Joh*_*den 13 fedora debian source-code
我突然决定要查看“回声”的源代码
$ which echo
/usr/bin/echo
Run Code Online (Sandbox Code Playgroud)
所以
$ ls -al /usr/bin/echo
-rwxr-xr-x. 1 root root 32536 Oct 31 2016 /usr/bin/echo
Run Code Online (Sandbox Code Playgroud)
所以
$strings /usr/bin/echo
Run Code Online (Sandbox Code Playgroud)
让我相信这是一个编译的 C 程序
现在我被困住了。
我如何能:
找出它在哪个包中
获取源码
重建它
测试一下
在系统范围内安装新版本
(我知道 5 不是一个好主意,我只是好奇……)
我目前在 Fedora 上,但我也对 Debian 的答案感兴趣
相关教程的链接将是一个很好的答案。
编辑:
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
Run Code Online (Sandbox Code Playgroud)
所以我想这是/usr/bin/echo我想看的而不是试图阅读整个bash.
mur*_*uru 15
运行dpkg -S /path查看/path属于哪个包:
$ dpkg -S /bin/echo
coreutils: /bin/echo
Run Code Online (Sandbox Code Playgroud)
获取源代码(我在 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
Run Code Online (Sandbox Code Playgroud)
找到文件:
$ cd coreutils-8.5
$ find src -iname '*echo*'
src/echo.c
Run Code Online (Sandbox Code Playgroud)
剩下的就看你了。
Jak*_*uje 13
跑 rpm -qf /path
$ rpm -qf /usr/bin/echo
coreutils-8.25-17.fc25.x86_64
Run Code Online (Sandbox Code Playgroud)
下载源包(yum用于 RHEL):
$ dnf download coreutils --enablerepo="*source"
Run Code Online (Sandbox Code Playgroud)
从当前目录中下载的 SRPM 包中提取源代码、补丁,切换到提取文件的目录并找到您的文件:
$ rpmbuild -rp coreutils-8.25-17.fc25.src.rpm
$ cd ~/rpmbuild/BUILD/coreutils-8.25/
$ find src -iname '*echo*'
src/echo.c
Run Code Online (Sandbox Code Playgroud)
您可以使用 重建软件包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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5194 次 |
| 最近记录: |