如何獲取linux下命令源碼?命令的源代碼是以一個(gè)軟件包為單位,放在一個(gè)軟件包的源代碼中。如果你想下載一個(gè)命令的源代碼,你必須下載這個(gè)命令所屬軟件包的源代碼。命令的源代碼在下載的源代碼的相關(guān)文件夾中。一般是src文件夾,對(duì)應(yīng)的主文件名是cmd.c,其中cmd是詳細(xì)的命令,比如ls命令的主程序文件是ls.c
因?yàn)樵诓煌腖inux發(fā)行版上。源代碼不是以同樣的獲得的。所以以下面兩個(gè)常用的Linux發(fā)行版Ubuntu和CentOS為例來(lái)說(shuō)明。
1.Ubuntu中獲取系統(tǒng)命令源代碼的方法。
以32位Ubuntu14.04獲取ls命令源代碼為例,可以通過(guò)以下方法下載源代碼:
1)使用哪個(gè)命令查看ls命令的位置,如下所示:
哪個(gè)ls#輸出:/bin/ls
2)使用dpkg命令查詢ls命令所屬的包。例如,以下內(nèi)容:
Dpkg-S/bin/ls#輸出:cor:/Bin/LS.
3)使用apt-get命令下載ls命令所在包的源代碼。例如,以下內(nèi)容:
apt-getsourcecoreutils
注意:
1)使用dpkg時(shí)。如果有錯(cuò)誤。您可以使用sudo命令以root權(quán)限運(yùn)行它。
2)將使用apt-getsource下載的源代碼保存到當(dāng)前文件夾。
。另外,當(dāng)我們知道命令屬于哪個(gè)包的時(shí)候,也可以從相應(yīng)的官網(wǎng)下載。
2.CentOS中獲取系統(tǒng)命令源代碼的方法。
以32位CentOS6.6下獲取的ls命令源代碼為例,可以使用以下方法下載源代碼:
1)配置源代碼的來(lái)源
在CentOS中,源的配置文件是:,更改此文件需要root權(quán)限。
打開(kāi)文件并檢查文件的內(nèi)容。在我的電腦上,該文件的內(nèi)容如下:
#
#
#鏡像系統(tǒng)使用客戶端的連接IP地址
#更新每個(gè)鏡像的狀態(tài),以選擇更新到和的鏡像
#地理上靠近客戶。你應(yīng)該用這個(gè)來(lái)更新CentOS
#除非您手動(dòng)選擇其他鏡像。#
#如果mirrorlist=對(duì)您不起作用,作為退路,您可以嘗試
#改為注釋掉了baseurl=line。
#
#
[基本]
name=CentOS-$releasever-base
mirrorlist=$releaseveramparch=$basearchamprepo=OS
#baseURL=$releasever/OS/$basearch/
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
#發(fā)布的更新
[更新]
name=CentOS-$releasever-更新
mirrorlist=$releaseveramparch=$basearchamprepo=updates
#baseURL=$releasever/updates/$basearch/
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
#可能有用的附加軟件包
[臨時(shí)演員]
name=CentOS-$releasever-Extras
鏡像列表=
release=$releaseveramparch=$basearchamprepo=extras
#baseURL=$releasever/extras/$basearch/
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
#擴(kuò)展現(xiàn)有軟件包功能的附加軟件包
[centosplus]
name=CentOS-$releasever-Plus
mirrorlist=$releaseveramparch=$basearchamprepo=centosplus
#baseurl=$releasever/centosplus/$basearch/
gpgcheck=1
啟用=0
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
#Centos用戶的貢獻(xiàn)包
[貢獻(xiàn)]
name=CentOS-$releasever-Contrib
mirrorlist=$releaseveramparch=$basearchamprepo=contrib
#baseURL=$releasever/contrib/$basearch/
gpgcheck=1
啟用=0
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
這個(gè)文件中有兩個(gè)變量:releasever和basearch。分別代表發(fā)布版本號(hào)和分支。比如在我的電腦上,這兩個(gè)值分別是6和i386。注意。Releasever沒(méi)有細(xì)分為次要版本號(hào)。也就是說(shuō),它贏了不要6.6什么的。
從這個(gè)文件的內(nèi)容可以看出,這個(gè)文件總共有5個(gè)部分。也就是說(shuō)我的電腦有五個(gè)軟件源,分別是base、updates、extras、centosplus和contrib。因此只需要指定其源代碼的來(lái)源,例如以下五個(gè)軟件來(lái)源。例如,在文件末尾添加以下內(nèi)容:
[base-src]
name=CentOS-$releasever-basesrc
baseurl=
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
[更新-src]
name=CentOS-$releasever-更新src-centos
baseurl=
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
[附加服務(wù)-src]
name=CentOS-$releasever-Extrassrc-CentOS
baseurl=
gpgcheck=1
gpgk:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[centosplus-src]
name=CentOS-$releasever-Plussrc-CentOS
baseurl=
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
[contrib-src]
name=CentOS-$releasever-Contribsrc-CentOS
baseurl=
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
因?yàn)椴煌陌姹咎?hào)設(shè)置會(huì)有所不同,所以其設(shè)置也會(huì)有所不同,方法可以概括如下:
(1)1)gpgkey與本文檔中現(xiàn)有部分的gpgkey相同。
(2)為了確認(rèn)檔案的存在和情況,可以打開(kāi)站點(diǎn)查看詳細(xì)情況,然后根據(jù)詳細(xì)情況填寫(xiě)。
(3)設(shè)置baseurl時(shí),要根據(jù)自己系統(tǒng)的版本號(hào)來(lái)設(shè)置。如果我的機(jī)器是CentOS-6.6,設(shè)置時(shí)相關(guān)參數(shù)會(huì)設(shè)置為6.6。也就是后面的子路徑是6.6。
這個(gè)文件的目的是為yum及其相關(guān)作品的下載提供一個(gè)源碼。例如,當(dāng)使用yumdownloader(下面討論)下載源代碼時(shí)。例如,將發(fā)生以下操作:
(1)下載$baseurl/repodata/repomd.xml文件。如果repomd.xml文件比系統(tǒng)中的文件新。更新系統(tǒng)中相應(yīng)的repomd.xml。
(2)下載$baseurl/SPackages/中對(duì)應(yīng)的源rpm包。
2)使用哪個(gè)命令查看ls命令的位置,如下所示:
哪個(gè)是
#輸出:/bin/ls
3)使用rpm命令查詢ls命令所屬的包,如下所示:
rpm-qf/bin/ls
#輸出:coreutils-8.4-37.el6.i686
4)yumdownloader是一個(gè)從RPM源碼下載RPM的程序,可以用命令yumdownloader安裝源碼。例如,以下內(nèi)容:
yumdownloader-sourcecoreutils-8.4-37.el6.i686
注意:
(1)如果沒(méi)有安裝yumdownloader命令,可以使用此命令安裝:yuminstallyum-utils。
(2)下載的文件在當(dāng)前文件夾中。可以使用參數(shù)-destdir指的是決定下載到哪個(gè)文件夾。
5)你用yumdownloader下載的是一個(gè)安裝包文件rpm,你可以用以下命令查詢r(jià)pm中的tar文件,例如:
rpm-qpl|greptar
#output:coreutils-8.4.tar.xz
6)使用rpm2cpio命令將rpm包文件轉(zhuǎn)換為cpio存檔文件,然后使用cpio命令從cpio存檔文件中復(fù)制并提取一個(gè)存檔文件。舉以下例子:
rpm2cpio|cpio-idvcoreutils-8.4.tar.xz
#輸出:
#coreutils-8.4.tar.xz
#9561街區(qū)
Cpiosman解釋為:cpio將文件復(fù)制到一個(gè)存檔中
-i:相當(dāng)于-extract。提取的含義
-d:相當(dāng)于-make-directory,必要時(shí)創(chuàng)建一個(gè)加載文件夾。
-v:列出了文件的處理過(guò)程。
7)使用tar命令解壓coreutils-8.4.tar.xz壓縮包,如下:
tar-xvf。/coreutils-8.4.tar.xz
至此,該命令的源代碼已經(jīng)獲得。