一般來說,不同的命令可能隸屬於不同的軟件包,這樣就沒有一個地方會有所有命令的源代碼。(命令的個數也會與你所安裝的軟件包有關)
但是,一些常用的命令,例如
basename cat chgrp chmod chown chroot cksum comm cp csplit cut date dd df dirname du echo
env expand expr factor false fmt fold groups head hostid hostname id install join kill link ln
logname ls md5sum mkdir mkfifo mknod mv nice nl nohup od paste pathchk pinky pr printenv
pwd readlink rm rmdir seq sha1sum sleep sort split stty su sum sync tac tail tee test touch
tr true tsort tty uname unexpand uniq unlink uptime users wc who whoami yes
都包含在 coreutils 軟件包中,coreutils 軟件包的源碼可以在
http://ftp.gnu.org/gnu/coreutils/
下載到。
另外,還有一部分命令是 bash 內置的,例如 cd 等,可以在 bash 的源碼中找到。
http://ftp.gnu.org/gnu/bash/
=======================================================================================================
lpj@lpj-linux:~$ which ls /bin/ls用命令搜索該軟件所在包,代碼如下:
lpj@lpj-linux:~$ dpkg -S /bin/ls coreutils: /bin/ls從上一步中可以知道ls命令的實現在包coreutils中,用apt安裝(說安裝有些歧義,主要是區分apt-get -d)該包的源代碼然后解壓,代碼如下:
sudo apt-get source coreutils cd /usr/src/coreutils-XXX #XXX表示版本號 sudo tar zxvf coreutils-XXX.tar.gz 或者只下載源碼,然后手動打補丁再解壓,代碼如下:
sudo apt-get -d source coreutils cd /usr/src tar zxvf coreutils-XXX.tar.gz gzip -d coreutils-XXX.diff.gz #這一步會生成coreutils-XXX.diff文件 patch -p0 < coreutils-XXX.diff cd coreutils-XXX tar zxvf coreutils-XXX.tar.gzOK,這幾步執行完后,就可以進入/usr/src/coreutils-XXX/coreutils-XXX/src中查看各命令對應的源代碼了
===========================================================================================================
在 shadow-utils 這個軟件包里面,
http://ftp.devil-linux.org/pub/devel/sources/1.2/shadow-4.0.17.tar.bz2
解壓后有個 src目錄 ,下面即有 useradd的源代碼 , 不過要編譯成功必須保證 shadow目錄的完整性, 里面包含了頭文件和makefile ,如果只是參考的話 , 那么就無關緊要了