用Linux的一大好處就是很多軟件都是開源的,可以輕松地獲得它們的源代碼。閱讀優秀的源代碼是程序員進步的一個很好的途徑。下面就介紹一下如何獲取CentOS下常用工具的源碼。
CentOS、RedHat、Fedora這樣系列的操作系統有一個yumdownloader的工具,可以下載安裝包及其源碼,例如:
yumdownloader --source kernel
上面的語句就會下載到包含內核源碼的安裝包但是我在執行上述語句的時間卻出現“No source RPM for XXX”的提示,后來到網上一查,是因為沒配置好路徑。
要想下載源碼包,我們就必須先配置好yum的源碼包下載路徑,操作如下(需要root權限):
1. 打開/etc/yum.repos.d目錄。
2. 如果沒有CentOS-Source.repo文件就新建一個,有就備份。
3.往CentOS-Source.repo插入以下內容:
[base-source] name=CentOS-$releasever - Base Source baseurl=http://vault.centos.org/6.4/os/Source/ enabled=1 [updates-source] name=CentOS-$releasever - Updates Source baseurl=http://vault.centos.org/6.4/updates/Source/ enabled=1 [extras-source] name=CentOS-$releasever - Extras Source baseurl=http://vault.centos.org/6.4/extras/Source/ enabled=1 [centosplus-source] name=CentOS-$releasever - Plus Source baseurl=http://vault.centos.org/6.4/centosplus/Source/ enabled=1
PS:我的CentOS是6.4的,請根據自己CentOS的版本修改baseurl,是6.3就把6.4改為6.3即可。
修改完成后,還需要以下語句使之生效:
yum clean all yum makecache
執行完成后(出現TimeOut就多執行幾次),我們就可以用yumdownloader下載源碼包了。現在另外一個問題來了,ls、ping之類的工具在哪個安裝包里面呢?
rpm管理工具可以幫上忙,可以查出這些工具所在的安裝包,例如下面這條命令就可以查出ls所在的安裝包:
rpm -qf `which ls`
PS:引號是Esc下面的那個,而且如果是別名會有問題,所以最好分開成下面這個樣子:
[wkq@localhost /]$ which ls alias ls='ls --color=auto' /bin/ls [wkq@localhost /]$ rpm -qf /bin/ls coreutils-8.4-19.el6_4.2.i686
知道是哪個軟件包后就可以用上面的語句下載ls所在的軟件包了:
yumdownloader --source coreutils
下載到的文件是一個rpm安裝包,還需要以下語句提取源碼:
rpm2cpio coreutils-8.4-19.el6_4.2.src.rpm|cpio -id
生成的文件之中會有一個壓縮文件,用tar解壓后即可得到源碼。