`

推荐几个技术博客,持续更新中...

阅读更多

推荐几个技术博客,我整理了一下googlereader的订阅。

 
http://www.udpwork.com/
http://mindhacks.cn/
http://www.ruanyifeng.com/home.html
http://coolshell.cn/
http://www.php-internal.com/
http://www.laruence.com/
http://googlechinablog.blogspot.com/
http://www.cnblogs.com/
http://dbanotes.net/
http://emacser.com/
http://robbinfan.com/
http://timyang.net/
http://www.36kr.com/
http://www.valleytalk.org/

http://www.gnu.org/software/

 

http://alloyteam.github.io/JX/#home webqq的前端框架

 
--- 个人博客:
http://jiangbo.me/ 一些HFDS的说明
 
推荐给大家,相互学习啊。
 
继续补充哦。
 
--- 摘自 robbin 的博客 git使用记录
## Git配置
    git config --global user.name "robbin"   
    git config --global user.email "fankai@gmail.com"
    git config --global color.ui true
    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.st status
    git config --global alias.br branch
    git config --global core.editor "mate -w"    # 设置Editor使用textmate
    git config -l  # 列举所有配置

用户的git配置文件`~/.gitconfig`  

## Git常用命令

### 查看、添加、提交、删除、找回,重置修改文件

    git help <command>  # 显示command的help
    git show            # 显示某次提交的内容
    git show $id

    git co  -- <file>   # 抛弃工作区修改
    git co  .           # 抛弃工作区修改

    git add <file>      # 将工作文件修改提交到本地暂存区
    git add .           # 将所有修改过的工作文件提交暂存区

    git rm <file>       # 从版本库中删除文件
    git rm <file> --cached  # 从版本库中删除文件,但不删除文件

    git reset <file>    # 从暂存区恢复到工作文件
    git reset -- .      # 从暂存区恢复到工作文件
    git reset --hard    # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改

    git ci <file>
    git ci .
    git ci -a           # 将git add, git rm和git ci等操作都合并在一起做
    git ci -am "some comments"
    git ci --amend      # 修改最后一次提交记录

    git revert <$id>    # 恢复某次提交的状态,恢复动作本身也创建了一次提交对象
    git revert HEAD     # 恢复最后一次提交的状态

### 查看文件diff

    git diff <file>     # 比较当前文件和暂存区文件差异
    git diff
    git diff <$id1> <$id2>   # 比较两次提交之间的差异
    git diff <branch1>..<branch2> # 在两个分支之间比较 
    git diff --staged   # 比较暂存区和版本库差异
    git diff --cached   # 比较暂存区和版本库差异
    git diff --stat     # 仅仅比较统计信息

### 查看提交记录

    git log
    git log <file>      # 查看该文件每次提交记录
    git log -p <file>   # 查看每次详细修改内容的diff
    git log -p -2       # 查看最近两次详细修改内容的diff
    git log --stat      # 查看提交统计信息

### tig

Mac上可以使用tig代替diff和log,`brew install tig`

## Git 本地分支管理

### 查看、切换、创建和删除分支

    git br -r           # 查看远程分支
    git br <new_branch> # 创建新的分支
    git br -v           # 查看各个分支最后提交信息
    git br --merged     # 查看已经被合并到当前分支的分支
    git br --no-merged  # 查看尚未被合并到当前分支的分支
    
    git co <branch>     # 切换到某个分支
    git co -b <new_branch> # 创建新的分支,并且切换过去
    git co -b <new_branch> <branch>  # 基于branch创建新的new_branch
    
    git co $id          # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
    git co $id -b <new_branch>  # 把某次历史提交记录checkout出来,创建成一个分支

    git br -d <branch>  # 删除某个分支
    git br -D <branch>  # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
    
### 分支合并和rebase

    git merge <branch>               # 将branch分支合并到当前分支
    git merge origin/master --no-ff  # 不要Fast-Foward合并,这样可以生成merge提交

    git rebase master <branch>       # 将master rebase到branch,相当于:
    git co <branch> && git rebase master && git co master && git merge <branch>

## Git补丁管理(方便在多台机器上开发同步时用)
    git diff > ../sync.patch         # 生成补丁
    git apply ../sync.patch          # 打补丁
    git apply --check ../sync.patch  # 测试补丁能否成功

## Git暂存管理
    git stash                        # 暂存
    git stash list                   # 列所有stash
    git stash apply                  # 恢复暂存的内容
    git stash drop                   # 删除暂存区
    
## Git远程分支管理
    git pull                         # 抓取远程仓库所有分支更新并合并到本地
    git pull --no-ff                 # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
    git fetch origin                 # 抓取远程仓库更新
    git merge origin/master          # 将远程主分支合并到本地当前分支
    git co --track origin/branch     # 跟踪某个远程分支创建相应的本地分支
    git co -b <local_branch> origin/<remote_branch>  # 基于远程分支创建本地分支,功能同上

    git push                         # push所有分支
    git push origin master           # 将本地主分支推到远程主分支
    git push -u origin master        # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
    git push origin <local_branch>   # 创建远程分支, origin是远程仓库名
    git push origin <local_branch>:<remote_branch>  # 创建远程分支
    git push origin :<remote_branch>  #先删除本地分支(git br -d <branch>),然后再push删除远程分支

## Git远程仓库管理

    git remote -v                    # 查看远程服务器地址和仓库名称
    git remote show origin           # 查看远程服务器仓库状态
    git remote add origin git@github:robbin/robbin_site.git         # 添加远程仓库地址
    git remote set-url origin git@github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址)
    git remote rm <repository>       # 删除远程仓库

### 创建远程仓库
    git clone --bare robbin_site robbin_site.git  # 用带版本的项目创建纯版本仓库
    scp -r my_project.git git@git.csdn.net:~      # 将纯仓库上传到服务器上

    mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库
    git remote add origin git@github.com:robbin/robbin_site.git    # 设置远程仓库地址
    git push -u origin master                                      # 客户端首次提交
    git push -u origin develop  # 首次将本地develop分支提交到远程develop分支,并且track

    git remote set-head origin master   # 设置远程仓库的HEAD指向master分支

也可以命令设置跟踪远程库和本地库

    git branch --set-upstream master origin/master
    git branch --set-upstream develop origin/develop
 
写道
对大多数不从事Linux平台C语言开发的人来说,GNU gcc的一套工具和Linux平台的共享库的使用还是十分陌生的,其实我也不太熟悉,姑且写点基础知识,权当做备忘吧。

## GNU gcc的编译工具用法

我们先来写一个简单的C程序:hello.c

#include <stdio.h>

void print_hello() {
printf("Hello World\n");
}

int main(int argc, char argv[]) {
print_hello();
return 0;
}

定义了一个print_hello函数,调用main函数打印Hello World。 如何编译它呢?

gcc -o hello -O2 hello.c

-o参数指定生成的可执行程序的文件名, -O2是优化级别。该命令会编译生成hello可执行程序,看看这个文件:`ls -l hello`

-rwxr-xr-x 1 robbin users 11939 2008-11-02 13:48 hello

有11KB大小。

看看他链接了哪些系统动态链接库,用`ldd`命令:

ldd hello

输出信息为:

libc.so.6 => /lib64/tls/libc.so.6 (0x0000002a9566d000)
/lib64/ld-linux-x86-64.so.2 (0x0000002a95556000)

libc是C语言标准函数库,ld是动态链接器。

接着我们看看hello这个程序里面有哪些符号,用nm命令:

nm hello

输出:

00000000005008f8 A __bss_start
000000000040043c t call_gmon_start
......
00000000004004f0 T main
0000000000500658 d p.0
00000000004004e0 T print_hello
U puts@@GLIBC_2.2.5
0000000000400410 T _start

中间省略了一些,不过我们还是可以在符号表里面找到函数定义。 hello有11KB,体积偏大,去处符号表可以给它瘦身,我们用strip命令:

strip hello

然后再ls -l hello,输出为:

-rwxr-xr-x 1 webuser users 4464 2008-11-02 13:56 hello

只有4.4KB了,瘦身效果明显! 不过这次符号表再也看不到了,`nm hello`,输出为:`nm: hello: no symbols`。

最后如果我们想从可执行程序里面提取出来一点什么文本信息的话,还可以用strings命令:

strings hello

输出信息为:

/lib64/ld-linux-x86-64.so.2
SuSE
libc.so.6
puts
__libc_start_main
__gmon_start__
GLIBC_2.2.5
t fff
Hello World

友情提醒一下,如果你用Java写一个HelloWorld.java,编译以后你也可以用strings窥探一番。

## 动态共享库怎么使用

这次我们把hello.c拆开成为两个文件:hello.c和main.c。hello.c的代码是:

#include <stdio.h>

void print_hello() {
printf("Hello World\n");
}

而main.c的代码是:

int main(int argc, char argv[]) {
print_hello();
return 0;
}

hello.c是我们的动态共享库,在hello.c里面我们声明和实现了各种公用的函数,最后main.c可以去调用这些公用函数。首先我们要把hello.c编译成为动态共享库:

gcc -o libhello.so -O2 -fPIC -shared hello.c

`-fPIC`参数声明链接库的代码段是可以共享的,`-shared`参数声明编译为共享库。请注意这次我们编译的共享库的名字叫做`libhello.so`,这也是Linux共享库的一个命名的惯例了:后缀使用so,而名称使用libxxxx格式。

然后编译main.c的时候,我们需要更多的参数让gcc知道如何寻找共享库:

gcc -o main -O2 -L. -lhello main.c

* -L参数指定到哪个附加路径下面去寻找共享库,现在我们指定在当前目录下面寻找;
* -l参数指定链接到哪个共享库上面,我们传的参数hello,那么gcc就会自动链接到libhello.so这个共享库上面(注意我们上面说的libXXXX.so命名规则);
* -I参数指定到哪个附加路径下面去寻找h文件,这个我们没有使用。

最后我们成功编译好了main,执行一下,报错:

./main: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory

找不到libhello.so这个共享库,怎么回事?这是因为libhello.so并不在操作系统默认的共享库的路径下面,我们可以临时指定一下链接路径:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

这样就成功了。我们用ldd main看一下:

libhello.so => ./libhello.so (0x0000002a9566d000)
libc.so.6 => /lib64/tls/libc.so.6 (0x0000002a9576e000)
/lib64/ld-linux-x86-64.so.2 (0x0000002a95556000)

这次main程序链接到了libhello.so这个共享库上面。

## 关于Linux的动态共享库的设置

可执行程序找不到要链接的动态共享库,这是Linux上面编译和运行程序很容易碰到的问题,通过上面的小例子,我们已经大致了解共享库的一点基本原理,接下来我们要探讨一下怎么设置程序寻找动态共享库的行为。 Linux操作系统上面的动态共享库大致分为三类:

### 操作系统级别的共享库和基础的系统工具库

比方说libc.so, libz.so, libpthread.so等等,这些系统库会被放在/lib和/usr/lib目录下面,如果是64位操作系统,还会有/lib64和/usr/lib64目录。如果操作系统带有图形界面,那么还会有/usr/X11R6/lib目录,如果是64位操作系统,还有/usr/X11R6/lib64目录。此外还可能有其他特定Linux版本的系统库目录。 这些系统库文件的完整和版本的正确,确保了Linux上面各种程序能够正常的运行。

### 应用程序级别的系统共享库

并非操作系统自带,但是可能被很多应用程序所共享的库,一般会被放在`/usr/local/lib`和`/usr/local/lib64`这两个目录下面。很多你自行编译安装的程序都会在编译的时候自动把`/usr/local/lib`加入gcc的-L参数,而在运行的时候自动到`/usr/local/lib`下面去寻找共享库。

以上两类的动态共享库,应用程序会自动寻找到他们,并不需要你额外的设置和担心。这是为什么呢? 因为以上这些目录默认就被加入到动态链接程序的搜索路径里面了。Linux的系统共享库搜索路径定义在`/etc/ld.so.conf`这个配置文件里面。这个文件的内容格式大致如下:

/usr/local/lib
/usr/lib64
/usr/lib
/usr/local/lib64

假设我们自己编译安装的ImageMagick图形库在`/usr/local/ImageMagick`目录下面,并且希望其他应用程序都可以使用ImageMagick的动态共享库,那么我们只需要把`/usr/local/ImageMagick/lib`目录加入`/etc/ld.so.conf`文件里面,然后执行:`ldconfig` 命令即可。

`ldcofig`将搜索以上所有的目录,为共享库建立一个缓存文件`/etc/ld.so.cache`。为了确认`ldconfig`已经搜索到ImageMagick的库,我们可以用上面介绍的`strings`命令从`ld.so.cache`里面抽取文本信息来检查一下:

strings /etc/ld.so.cache | grep ImageMagick

输出结果为:

/usr/local/ImageMagick/lib/libWand.so.10
/usr/local/ImageMagick/lib/libWand.so
/usr/local/ImageMagick/lib/libMagick.so.10
/usr/local/ImageMagick/lib/libMagick.so
/usr/local/ImageMagick/lib/libMagick++.so.10
/usr/local/ImageMagick/lib/libMagick++.so

### 应用程序独享的动态共享库

有很多共享库只被特定的应用程序使用,那么就没有必要加入系统库路径,以免应用程序的共享库之间发生版本冲突。因此Linux还可以通过设置环境变量LD_LIBRARY_PATH来临时指定应用程序的共享库搜索路径,就像我们上面举的那个例子一样,我们可以在应用程序的启动脚本里面预先设置LD_LIBRARY_PATH,指定本应用程序附加的共享库搜索路径,从而让应用程序找到它。
 
3
6
分享到:
评论
2 楼 vb2005xu 2013-04-12  
http://blog.csdn.net/heiyeshuwu
1 楼 vb2005xu 2013-03-18  
是不是好博客自己点开就行了 :-) 小新就踩好了

相关推荐

    java多商铺源码-AndroidNotes:本人多年的Android笔记,既有基础知识,也有深度好文!持续更新中

    开发这几年也有记笔记和写博客的习惯,但是博客的产量远远追不上记笔记的量,导致为知笔记里的笔记越来越多,而且都比较凌乱,最近一直想着抽个时间整理出来,所以就有了这个仓库。很多看过我博客的读者都说我写的...

    基于微软Azure、.NET Core和Docker的博客系统.zip

    这是一个技术问题,我相信一定有解决方案,但是我也没太多时间和精力去细究如何实现,自己的第一反应也无非是将前后端全部部署在Azure Web App中,然后打开后端的认证机制。但这样做又要花一些额外的工夫。好吧,...

    Java 实时社区论坛.zip

    需要做的是一个能够持续提供用户价值的产品/特性虽然直到目前 B3log 系产品用户不多,但我们已经初步证明了:Java 用来实现博客、论坛没有什么不好的(仅次于 PHP 吧)先完成本职工作,再用开源的产品/经验来进行...

    【HTML+CSS+JavaScript】空间百宝箱特效-CSDN@追光者♂.zip

    这是近期通过前端技术实现的一个空间百宝箱特效,本资源包含完整的可执行代码文件(可以直接演示运行),也包含演示的几个效果。该内容已经在博客中记录(已经记录在专栏“前端之梦,代码之美”中),欢迎大家下载。...

    基于.net core 3.1和mysql数据库内容管理系统,可用于搭建论坛,博客,内容社交,WIKI。.zip

    它通常包括以下几个核心组成部分: 数据采集模块:负责从各类业务环节中实时、准确地收集信息,形成企业的基础数据资源。 数据分析模块:运用统计学、人工智能等技术对数据进行深度挖掘和智能分析,提供决策支持。...

    EXCEL格式工资管理系统3.2版.rar

    五、持续更新(因为有相关单位在使用),并提供数据升级功能,让你可以放心地过渡到最新版本。 六、适用于包括Excel2007在内的各个版本的excel。 特色功能: 一、隐藏无发生额的数据列(行),冻结标题行; 二、...

    Java开源的下一代社区平台Symphony.zip

    一个好玩的产品或说是细节特性然并卵,需要做的是一个能够持续提供用户价值的产品/特性 虽然直到目前 B3log 系产品用户不多,但我们已经初步证明了:Java 用来实现博客、论坛没有什么不好的 使用开源软件,了解...

    网络销售营销方案设计.doc

    然而,国际互联网就不是传统媒体所能比拟的了,归纳其优点可包含如下几 个方面:低成本、无限时、无国界、交互性、多媒体、针对性、受众可视性、实时灵活 、感官性...... 电子商务是在互联网技术基础上人们所从事的...

    Initab-crx插件

    它还提供了几个有用的工具,使您作为开发人员的工作更容易快速查看您的GitHub问题活动,堆栈溢出活动,等等... 特征: *开始使用Initab很容易。打开“设置”面板并配置您的首选项。自定义链接是一个流行的(可选)...

    树莓派入门图文基础教程-系统登录几种方式

    对于这位“好友”,能刷到此博客的人应该对它的前世今身已经都不陌生了,当然还是要推荐两篇文章,大家会对她有个深刻的认识,树莓派的维基百科和raspbian系统的奇妙诞生记。本篇博客为树莓派入门第一关,怎么登陆到...

    校招-前端开发求职简历

    一个完整的简历通常包含以下几个部分的描述: 个人信息:包括姓名、性别、出生日期、联系电话、电子邮箱和个人网站(可选)等基本信息。 教育背景:列出所就读的学校名称、专业名称、学位(如适用)、就读时间以及...

    zxing.java源码解析-awesome-resources:很棒的资源

    这是对自己这几年开发的一个总结,各种项目、资源、书籍、博客等 喜欢么?或者对您有用?那就 Star 一下吧 ^_^ Web 前端 Javascript : 前后端通用的一个并行库 : 用于现代浏览器的兼容 jQuery 的库 : 稳定的跨浏览器...

    博克智能服装CAD视频教程

    集成化 纸样、放码、排料集成在一起,保存一个文件,方便修改 一般分成两个或三个模块,保存几个不同文件,不方便修改。 其它功能 具备安全恢复功能、文件加密功能、网络升级等 一般没有这些功能。

    夫维SEO培训资料

    同样的,对于任何一个新站,在最初的几个月都应该把目光放在长尾关键词上,他们带 来的用户往往是非常专业和有针对性的。 3、长尾关键词的排名往往很稳定。 长尾关键词排名稳定的根本原因是,目前的SEO普及程度下,...

    30days:30 天学习 30 项技术

    于是决定学习,刚一开始就碰壁呢,明明非常简单的一步步下来,但我系统中就是失效了(我在Ubuntu里的,问题解决后好多了),而进展第二天的学习进度时,又有问题呢,可能这个系列已经同步跟进API,也没有持续更新了...

    博克智能服装CAD V13完美破解版

    集成化 纸样、放码、排料集成在一起,保存一个文件,方便修改 一般分成两个或三个模块,保存几个不同文件,不方便修改。 其它功能 具备安全恢复功能、文件加密功能、网络升级等 一般没有这些功能。

    Wiki和博客:建立复杂的自适应智能社区-研究论文

    另外,几种新技术将促进这种转变。 两个示例是称为Wiki的自组织知识网站和称为Blog的信息共享网站。 允许情报官员和我们非智能国家安全部门的同事在SIPRNet上访问这些技术,将为开始转型提供足够的支持。

    malware-persistence:收集恶意软件持久性和狩猎信息。 成为坚持不懈的猎人!

    不幸的是,许多恶意软件博客文章都包含所有各种IP和哈希信息,但只有少数几个突出显示了攻击的持久性机制,尽管从攻击者的角度来看,它是更静态且更难更改的信息之一。 比起更频繁地更改IP地址或哈希值,使用持久性...

Global site tag (gtag.js) - Google Analytics