命令的原始碼是一個軟體包為單元的,放在一個軟體包的原始碼中。若要下載一個命令的原始碼,就要把這個命令所屬的軟體包的原始碼都下載下來。命令的原始碼就在下載的原始碼的相關資料夾內。一般是src資料夾,對應的主檔名稱為cmd.c,當中cmd為詳細的命令,如ls命令的主程式檔案為ls.c。
因為在不同的Linux發行版上。原始碼的獲取方法並不同樣。所以以下以Ubuntu和CentOS這兩種經常使用的Linux發行版為樣例進行說明。
1、Ubuntu中系統命令原始碼的獲取方法
以32位Ubuntu14.04下,獲取ls命令的原始碼為例,能夠使用例如以下的方法下載原始碼:
1)使用which命令檢視ls命令的位置,例如以下:
which ls # 輸出:/bin/ls
2)使用dpkg命令查詢ls命令所屬的包。例如以下:
dpkg -S /bin/ls # 輸出:coreutils: /bin/ls
3)使用apt-get命令來下載ls命令所在的包的原始碼。例如以下:
apt-get source coreutils
注:
1)在使用dpkg時。若出現錯誤。能夠使用sudo命令使其以root許可權執行。
2)使用apt-get source下載的原始碼儲存到當前資料夾下。
。此外,當我們知道了命令所屬的包後,也能夠到對應的官方站點下載。
2、CentOS中系統命令原始碼的獲取方法
以32位CentOS6.6下,獲取ls命令的原始碼為例,能夠使用例如以下的方法下載原始碼:
1)配置原始碼的源
在CentOS中,源的配置檔案為:/etc/yum.repos.d/CentOS-Base.repo,改動該檔案須要root許可權。
開啟該檔案,檢視該檔案的內容,在本人的機子上,該檔案的內容例如以下:
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?
release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
enabled=0
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
該檔案裡有兩個變數:releasever和basearch。分別表示release版本號和分支,如本人的機子上,這兩個值分別為6和i386。注意。releasever並不會細分為次級版本號。即不會是6.6之類的。
從該檔案的內容能夠知道,該檔案共同擁有5個節。也就是說本人的機子的軟體來源有5處,分別為base、updates、extras、centosplus和contrib。所以僅僅須要為例如以下的5處軟體源指定其原始碼的源就可以。在檔案的末尾加上例如以下的內容:
[base-src]
name=CentOS-$releasever - Base src
baseurl=http://vault.centos.org/6.6/os/Source/
[updates-src]
name=CentOS-$releasever - Updates src-centos
baseurl=http://vault.centos.org/6.6/updates/Source/
[extras-src]
name=CentOS-$releasever - Extras src-centos
baseurl=http://vault.centos.org/6.6/extras/Source/
[centosplus-src]
name=CentOS-$releasever - Plus src-centos
baseurl=http://vault.centos.org/6.6/centosplus/Source/
[contrib-src]
name=CentOS-$releasever - Contrib src-centos
baseurl=http://vault.centos.org/6.6/contrib/Soruce/
因為不同的版本號設定會有所不同,所以其設定會有所不同,方法可總結為例如以下:
(1)gpgkey與該檔案裡已有的節的gpgkey同樣
(2)為了確認檔案的存在和情況,能夠開啟站點http://vault.centos.org/檢視詳細的情況,再依據詳細的情況來填寫
(3)設定baseurl時須要依據自己的系統的版本號來設定,如本人的機子為CentOS-6.6,則在設定時,相關的引數就設定為6.6。即http://vault.centos.org/後接的子路徑為6.6。
該檔案的作用是為yum其及相關工作的下載提供一個源。如在使用yumdownloader(以下會講到)下載原始碼時。會發生例如以下動作:
(1)下載$baseurl/repodata/repomd.xml檔案。若該repomd.xml檔案比系統中的新。更新系統中的對應的repomd.xml
(2)下載$baseurl/SPackages/中的對應的原始碼rpm包。
2)使用which命令檢視ls命令的位置,例如以下:
which ls
# 輸出:/bin/ls
3)使用rpm命令查詢ls命令所屬的包,例如以下:
rpm -qf /bin/ls
# 輸出:coreutils-8.4-37.el6.i686
4)yumdownloader是一個從RPM源下載RPM的程式,能夠使用yumdownloader命令安裝原始碼。例如以下:
yumdownloader --source coreutils-8.4-37.el6.i686
(1)若yumdownloader命令沒有安裝,則能夠使用此命令安裝:yum install yum-utils。
(2)下載的檔案在當前資料夾下。能夠使用引數--destdir指定下載到哪一個資料夾。
5)使用yumdownloader下載到的是一個安裝包檔案rpm,能夠使用例如以下的命令查詢rpm中的tar檔案:
rpm -qpl coreutils-8.4-37.el6.src.rpm | grep tar
# 輸出:coreutils-8.4.tar.xz
6)使用rpm2cpio命令將rpm包檔案轉換成cpio歸檔檔案,再使用cpio命令,從cpio歸檔檔案複製提取出一個歸檔檔案。出例如以下:
rpm2cpio coreutils-8.4-37.el6.src.rpm | cpio -idv coreutils-8.4.tar.xz
# 輸出:
# coreutils-8.4.tar.xz
# 9561 blocks
cpio的man解釋為:cpio copies files into an archive
-i:與--extract等同。提取之意
-d:與--make-directories等同,當有須要時建立一個載入資料夾
-v:列出檔案的處理過程
7)使用tar命令對coreutils-8.4.tar.xz壓縮包進行解壓縮,例如以下:
tar -xvf ./coreutils-8.4.tar.xz
至此,命令的原始碼獲取完畢。
命令的原始碼是一個軟體包為單元的,放在一個軟體包的原始碼中。若要下載一個命令的原始碼,就要把這個命令所屬的軟體包的原始碼都下載下來。命令的原始碼就在下載的原始碼的相關資料夾內。一般是src資料夾,對應的主檔名稱為cmd.c,當中cmd為詳細的命令,如ls命令的主程式檔案為ls.c。
因為在不同的Linux發行版上。原始碼的獲取方法並不同樣。所以以下以Ubuntu和CentOS這兩種經常使用的Linux發行版為樣例進行說明。
1、Ubuntu中系統命令原始碼的獲取方法
以32位Ubuntu14.04下,獲取ls命令的原始碼為例,能夠使用例如以下的方法下載原始碼:
1)使用which命令檢視ls命令的位置,例如以下:
which ls # 輸出:/bin/ls
2)使用dpkg命令查詢ls命令所屬的包。例如以下:
dpkg -S /bin/ls # 輸出:coreutils: /bin/ls
3)使用apt-get命令來下載ls命令所在的包的原始碼。例如以下:
apt-get source coreutils
注:
1)在使用dpkg時。若出現錯誤。能夠使用sudo命令使其以root許可權執行。
2)使用apt-get source下載的原始碼儲存到當前資料夾下。
。此外,當我們知道了命令所屬的包後,也能夠到對應的官方站點下載。
2、CentOS中系統命令原始碼的獲取方法
以32位CentOS6.6下,獲取ls命令的原始碼為例,能夠使用例如以下的方法下載原始碼:
1)配置原始碼的源
在CentOS中,源的配置檔案為:/etc/yum.repos.d/CentOS-Base.repo,改動該檔案須要root許可權。
開啟該檔案,檢視該檔案的內容,在本人的機子上,該檔案的內容例如以下:
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?
release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
該檔案裡有兩個變數:releasever和basearch。分別表示release版本號和分支,如本人的機子上,這兩個值分別為6和i386。注意。releasever並不會細分為次級版本號。即不會是6.6之類的。
從該檔案的內容能夠知道,該檔案共同擁有5個節。也就是說本人的機子的軟體來源有5處,分別為base、updates、extras、centosplus和contrib。所以僅僅須要為例如以下的5處軟體源指定其原始碼的源就可以。在檔案的末尾加上例如以下的內容:
[base-src]
name=CentOS-$releasever - Base src
baseurl=http://vault.centos.org/6.6/os/Source/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[updates-src]
name=CentOS-$releasever - Updates src-centos
baseurl=http://vault.centos.org/6.6/updates/Source/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[extras-src]
name=CentOS-$releasever - Extras src-centos
baseurl=http://vault.centos.org/6.6/extras/Source/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[centosplus-src]
name=CentOS-$releasever - Plus src-centos
baseurl=http://vault.centos.org/6.6/centosplus/Source/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[contrib-src]
name=CentOS-$releasever - Contrib src-centos
baseurl=http://vault.centos.org/6.6/contrib/Soruce/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
因為不同的版本號設定會有所不同,所以其設定會有所不同,方法可總結為例如以下:
(1)gpgkey與該檔案裡已有的節的gpgkey同樣
(2)為了確認檔案的存在和情況,能夠開啟站點http://vault.centos.org/檢視詳細的情況,再依據詳細的情況來填寫
(3)設定baseurl時須要依據自己的系統的版本號來設定,如本人的機子為CentOS-6.6,則在設定時,相關的引數就設定為6.6。即http://vault.centos.org/後接的子路徑為6.6。
該檔案的作用是為yum其及相關工作的下載提供一個源。如在使用yumdownloader(以下會講到)下載原始碼時。會發生例如以下動作:
(1)下載$baseurl/repodata/repomd.xml檔案。若該repomd.xml檔案比系統中的新。更新系統中的對應的repomd.xml
(2)下載$baseurl/SPackages/中的對應的原始碼rpm包。
2)使用which命令檢視ls命令的位置,例如以下:
which ls
# 輸出:/bin/ls
3)使用rpm命令查詢ls命令所屬的包,例如以下:
rpm -qf /bin/ls
# 輸出:coreutils-8.4-37.el6.i686
4)yumdownloader是一個從RPM源下載RPM的程式,能夠使用yumdownloader命令安裝原始碼。例如以下:
yumdownloader --source coreutils-8.4-37.el6.i686
注:
(1)若yumdownloader命令沒有安裝,則能夠使用此命令安裝:yum install yum-utils。
(2)下載的檔案在當前資料夾下。能夠使用引數--destdir指定下載到哪一個資料夾。
5)使用yumdownloader下載到的是一個安裝包檔案rpm,能夠使用例如以下的命令查詢rpm中的tar檔案:
rpm -qpl coreutils-8.4-37.el6.src.rpm | grep tar
# 輸出:coreutils-8.4.tar.xz
6)使用rpm2cpio命令將rpm包檔案轉換成cpio歸檔檔案,再使用cpio命令,從cpio歸檔檔案複製提取出一個歸檔檔案。出例如以下:
rpm2cpio coreutils-8.4-37.el6.src.rpm | cpio -idv coreutils-8.4.tar.xz
# 輸出:
# coreutils-8.4.tar.xz
# 9561 blocks
cpio的man解釋為:cpio copies files into an archive
-i:與--extract等同。提取之意
-d:與--make-directories等同,當有須要時建立一個載入資料夾
-v:列出檔案的處理過程
7)使用tar命令對coreutils-8.4.tar.xz壓縮包進行解壓縮,例如以下:
tar -xvf ./coreutils-8.4.tar.xz
至此,命令的原始碼獲取完畢。