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


13

「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ます。


2
type -a echo最初に試してください。
桂佐藤

1
タイプ-a echo; echoは組み込みのシェルです。echoは/ usr / bin / echoです。だから、bashのすべてを読むのではなく、/ usr / bin / echoを見たいと思います!
ジョンローレンスアスペデン

2
/usr/bin/echo --version次を試してください。
桂佐藤


2
...そして、それはあなたが尋ねたものとは非常に異なる質問です。
桂佐藤

回答:


13

RHEL / Fedora

走る 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

15

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

後は君しだい。


どうもありがとう。私はそれについて尋ねたので、私はRHEL / Fedoraに受け入れられたものに答えさせるべきだと思います。しかし、主に私はdebianを使用しているので、おそらく私の観点からはあなたの方がお勧めです!残念ながら、両方を受け入れることはできません。
ジョンローレンスアスプデン

答えは正しいですが、さらに上流のソースを見たい場合があります(たとえば、まだディストリビューションにない新しい変更があるかどうか)。その呼び出し dpkg -s coreutils(または興味のあるパッケージ)を行い、を探しますHomepage:。通常、ホームページからソースコードと完全なバージョン履歴への読み取りアクセスを見つけることができます。
ウーヴェGeuder
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.