回覆列表
  • 1 # 永記利維

    命令的原始碼是一個軟體包為單元的,放在一個軟體包的原始碼中。若要下載一個命令的原始碼,就要把這個命令所屬的軟體包的原始碼都下載下來。命令的原始碼就在下載的原始碼的相關資料夾內。一般是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

    至此,命令的原始碼獲取完畢。

  • 中秋節和大豐收的關聯?
  • 地方三級審批手續是什麼意思?