Debian(及其衍生性商品)

Debian(及其衍生性商品)

我突然決定看看「echo」的源碼

$ which echo
/usr/bin/echo

所以

$ ls -al /usr/bin/echo
-rwxr-xr-x. 1 root root 32536 Oct 31  2016 /usr/bin/echo

所以

$strings /usr/bin/echo

讓我相信這是一個已編譯的 C 程序

現在我被困住了。

我如何能:

  1. 找出它在哪個包中

  2. 取得原始碼

  3. 重建它

  4. 測試一下

  5. 在系統範圍內安裝新版本

(我知道 5 不是一個好主意,我只是好奇...)

我目前使用的是 Fedora,但我也對 Debian 的答案感興趣

相關教程的連結將是一個很好的答案。


編輯:

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo

所以我想這是/usr/bin/echo我想看的,而不是試著閱讀整篇bash

答案1

Debian(及其衍生性商品)

運行dpkg -S /path查看/path屬於哪個包:

$ dpkg -S /bin/echo
coreutils: /bin/echo

取得原始碼(我在 Ubuntu 上):

$ apt-get source coreutils
Reading package lists... Done
Need to get 5,755 kB of source archives.
Get:1 http://jp.archive.ubuntu.com/ubuntu xenial/main coreutils 8.25-2ubuntu2 (dsc) [2,071 B]
Get:2 http://jp.archive.ubuntu.com/ubuntu xenial/main coreutils 8.25-2ubuntu2 (tar) [5,725 kB]
Get:3 http://jp.archive.ubuntu.com/ubuntu xenial/main coreutils 8.25-2ubuntu2 (diff) [28.0 kB]
Fetched 5,755 kB in 3s (1,758 kB/s)
gpgv: Signature made 2016年02月18日 22時28分36秒 JST using RSA key ID 73F3F233
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./coreutils_8.25-2ubuntu2.dsc
dpkg-source: info: extracting coreutils in coreutils-8.25
dpkg-source: info: unpacking coreutils_8.25.orig.tar.xz
dpkg-source: info: unpacking coreutils_8.25-2ubuntu2.debian.tar.xz
dpkg-source: info: applying no_ls_quoting.patch
dpkg-source: info: applying 61_whoips.patch
dpkg-source: info: applying 63_dd-appenderrors.patch
dpkg-source: info: applying 72_id_checkngroups.patch
dpkg-source: info: applying 80_fedora_sysinfo.patch
dpkg-source: info: applying 85_timer_settime.patch
dpkg-source: info: applying 99_kfbsd_fstat_patch.patch
dpkg-source: info: applying 99_hppa_longlong.patch
dpkg-source: info: applying 99_float_endian_detection.patch

找到文件:

$ cd coreutils-8.5 
$ find src -iname '*echo*'
src/echo.c

剩下的就取決於你了。

答案2

RHEL/軟呢帽

跑步rpm -qf /path

$ rpm -qf /usr/bin/echo
coreutils-8.25-17.fc25.x86_64

下載原始碼包(yumRHEL使用):

$ dnf download coreutils --enablerepo="*source"

從目前目錄下載的 SRPM 套件中提取原始程式碼、補丁,切換到提取檔案的目錄並找到您的檔案:

$ rpmbuild -rp coreutils-8.25-17.fc25.src.rpm
$ cd ~/rpmbuild/BUILD/coreutils-8.25/
$ find src -iname '*echo*'
src/echo.c

您可以使用 重建軟體包rpmbuild --rebuild coreutils-8.25-17.fc25.src.rpm,這將產生可直接安裝在系統上的 RPM。

如果您需要對 fedora 軟體包進行一些修改,那麼採用維護者的方式要容易得多:安裝fedpkg、克隆儲存庫、進行修改(使用修補程式)並透過修改重建軟體包:

$ sudo dnf install fedpkg
$ fedpkg clone coreutils
$ cd coreutils
$ # do the modifications
$ fedpkg local

相關內容