`

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

阅读更多

推荐几个技术博客,我整理了一下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  
是不是好博客自己点开就行了 :-) 小新就踩好了

相关推荐

    Solo博客系统 v4.4.0.zip

    10. **社区与维护**:开源项目如 Solo 通常有一个活跃的开发者社区,用户可以在社区中获取帮助、报告问题或者贡献自己的代码,保持系统持续更新和优化。 总的来说,"Solo博客系统 v4.4.0.zip" 是一个涵盖 Python ...

    最实用的前端书签,持续更中.zip

    "最实用的前端书签,持续更中.zip" 文件很可能是一个包含了一系列精选前端开发者书签的压缩包,旨在帮助用户保持对最新前端技术的了解和跟进。书签目录名为 "bookmarks-master",暗示这可能是一个组织良好的书签集合...

    家庭台式机行业(2021-2026)企业市场突围战略分析与建议.docx

    品差异化战略.................................................总结来看,家庭台式机行业企业在未来几年内应从战略定位、产品创新、市场营销等多个层面进行全面布局,以适应不断变化的市场环境,实现市场的有效突围。

    易语言博客软件更新

    在“易语言博客软件更新”这个主题中,我们主要关注以下几个知识点: 1. **版本控制**:版本控制是软件开发中的关键部分,用于跟踪和管理不同阶段的代码更改。在博客软件中,版本控制允许开发者发布修复错误、添加...

    基于博客的网络营销.doc

    博客营销的优势主要体现在以下几个方面: 1. **精准定位**:博客群体往往基于共同的兴趣或主题聚集,这使得企业可以根据目标受众的特性,精准投放广告,提高广告的有效性。 2. **病毒式传播**:博客营销强调用户的...

    UnaBoot博客系统 v1.3.0.zip

    UnaBoot博客系统的安装通常包括以下几个步骤:下载源码、配置环境(如Java运行环境和数据库)、修改配置文件、构建项目、启动服务。对于初次接触此类项目的用户,可以参考"说明.htm"中的详细指南进行操作。 六、...

    ASP.NET源码——[博客空间]博易 BlogYi 博客程序 v1.8.5.zip

    在博易 BlogYi 博客程序中,我们可以预见到以下几个关键知识点: 1. **ASP.NET MVC**:BlogYi很可能采用了MVC模式进行开发,每个控制器负责处理HTTP请求,视图则用于呈现数据,而模型则封装了业务逻辑和数据访问层...

    博客后台管理系统.zip

    博客后台管理系统是一个基于Java技术栈,使用SpringMVC框架,集成IDEA开发工具,并依赖MySQL数据库的综合性项目。这个系统的主要目标是为用户提供一个高效、便捷的博客发布、管理及互动平台。 首先,我们来详细了解...

    SSM+Vue个人博客网站开题报告.doc

    论文的主要内容包括以下几个功能模块: 1. 登录功能:支持游客无登录浏览,普通用户需验证身份后才能进行更多操作。 2. 网站前台:游客和用户可以查看博主个人信息、文章,发表评论。 3. 网站后台:管理员能够管理...

    鲶鱼博客源码.zip

    对于想要建立个人网站的人来说,选择【鲶鱼博客源码】有以下几个优势: 1. **易用性**:作为一个便捷快速的程序,鲶鱼博客可能设计得非常直观,使得非技术背景的用户也能轻松上手。 2. **灵活性**:自研框架意味着...

    本项目是我个人在编写Java系列博客的源代码,会持续不断更新。如果项目中的代码有错误,望大家一起勘正~。.zip

    在Java项目源码中,我们可以期待看到以下几个核心领域的知识点: 1. **基础语法**:包括变量、数据类型、控制结构(如if-else、switch、循环)、函数、类和对象的定义与使用,这些都是Java编程的基础。 2. **面向...

    阿里巴巴博客漫游器自动更新版本

    在自动更新版本的过程中,有以下几个关键知识点: 1. **版本控制**:阿里巴巴博客漫游器的自动更新涉及到版本控制,这通常通过Git等版本控制系统实现,以便管理和跟踪代码的变更。每次更新都对应一个特定的版本号,...

    SpringBoot博客系统.zip

    在SpringBoot博客系统中,主要涉及以下几个核心知识点: 1. **Spring Boot核心**:Spring Boot的核心在于自动配置,它通过“起步依赖”(Starter Dependency)简化了项目构建,并自动配置了许多常见应用的设置。...

    个人博客系统设计需求分析.pdf

    博客系统的设计需考虑到以下几个关键知识点: 1. **个人BLOG的概念**:BLOG源于WEBLOG,起初由Jorn Barger提出,是一种网络日记形式。它允许用户通过文字、链接、图片和多媒体内容来构建个性化网络空间。博客在全球...

    高技术产品的市场营销.pdf

    9. **持续的客户服务**:高科技产品往往需要持续的技术支持和更新,因此强大的客户服务系统对于保持客户满意度至关重要。 10. **评估与调整**:定期评估营销策略的效果,根据市场反馈和数据分析进行调整,确保资源...

    jsp博客管理系统.zip

    本系统的标签包括“Java”、“毕设”、“课设”和“论文”,这表明它涵盖了以下几个关键知识点: 1. **Java Servlet**:Servlet是Java服务器端程序,负责接收HTTP请求并返回响应。在JSP中,Servlet常用于处理业务...

    个人独立博客搭建完全手册汇编.pdf

    个人独立博客是指拥有独立域名并且使用自主博客系统的网站,与...然而,维护一个独立博客也需要持续的学习和投入,包括技术更新、内容创作和社区互动。总的来说,建立个人独立博客是一个既富有挑战又充满乐趣的过程。

    员工转正述职报告(技术研发类)实用.pdf

    4. 技术更新:面对快速发展的技术环境,保持学习和适应新技术是必要的,可以通过线上课程、技术博客等途径持续学习。 三、对于产品优化和创新上的建议和构思 1. 性能提升:提出对产品性能改进的建议,如代码重构、...

    基于JavaEE的个人博客系统的设计与实现.pdf

    个人博客系统通常具备内容丰富、操作简便、开放互动、展现个性以及能够持续更新等特征。为了满足互联网用户对个人博客系统的需求,开发一个稳定可靠、功能完善的博客系统显得尤为重要。 本篇论文介绍了基于JavaEE...

    个人博客系统的设计与实现.zip

    设计阶段,我们需要考虑以下几个方面: 1. **需求分析**:确定博客系统的基本功能,如文章发布、评论、分类管理、用户注册与登录、个人中心等。 2. **架构设计**:可以选择MVC(Model-View-Controller)模式,将...

Global site tag (gtag.js) - Google Analytics