web-dev-qa-db-ja.com

コマンドのソースコードを確認するにはどうすればよいですか?

突然「エコー」のソースコードを見たいと思いました

$ 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/echobash全体を読むのではなく、見たいです。

13

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

後は君しだい。

15
muru