Bagaimana cara melihat kode sumber untuk suatu perintah? [Tutup]

13

Tiba-tiba saya memutuskan untuk melihat kode sumber untuk 'gema'

$ which echo
/usr/bin/echo

begitu

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

begitu

$strings /usr/bin/echo

membuat saya percaya bahwa ini adalah program C yang dikompilasi

Sekarang saya mandek.

Bagaimana saya:

  1. Cari tahu di paket mana

  2. Dapatkan sumbernya

  3. Bangun kembali

  4. Menguji

  5. Instal versi baru di seluruh sistem

(Saya tahu bahwa 5 itu bukan ide yang baik, saya hanya ingin tahu ...)

Saya saat ini di Fedora, tetapi saya juga tertarik pada jawaban untuk Debian

Tautan ke tutorial yang relevan akan menjadi jawaban yang bagus.


Edit:

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

Jadi saya kira itu yang /usr/bin/echosaya ingin lihat daripada mencoba membaca semuanya bash.

John Lawrence Aspden
sumber
2
Coba type -a echodulu.
Satō Katsura
1
ketik -a gema; gema adalah shell builtin; gema adalah / usr / bin / gema; Jadi saya rasa saya ingin melihat / usr / bin / echo daripada membaca semua bash!
John Lawrence Aspden
2
Coba /usr/bin/echo --versionselanjutnya.
Satō Katsura
4
selamat
Julie Pelletier
2
... Dan itu pertanyaan yang sangat berbeda dari yang Anda tanyakan.
Satō Katsura

Jawaban:

13

RHEL / Fedora

Lari rpm -qf /path

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

Unduh paket sumber (gunakan yumuntuk RHEL):

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

Ekstrak sumber, tambalan dari paket SRPM yang diunduh di direktori saat ini, ubah ke direktori tempat file diekstraksi dan temukan file Anda:

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

Anda dapat membangun kembali paket menggunakan rpmbuild --rebuild coreutils-8.25-17.fc25.src.rpm, yang akan menghasilkan RPM yang dapat Anda instal langsung pada sistem Anda.

Jika Anda perlu melakukan beberapa modifikasi pada paket fedora, jauh lebih mudah untuk mengikuti cara pengelola: Instal fedpkg, klon repositori, lakukan modifikasi (menggunakan tambalan) dan buat kembali paket dengan modifikasi:

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

Debian (dan turunannya)

Jalankan dpkg -S /pathuntuk melihat paket mana yang /pathmenjadi milik:

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

Dapatkan sumbernya (saya di 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

Temukan file:

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

Sisanya terserah padamu.

muru
sumber
Terima kasih banyak. Saya pikir saya harus membuat RHEL / Fedora menjawab yang diterima, karena saya memang menanyakan hal itu. Tetapi terutama saya menggunakan debian, jadi milik Anda mungkin yang paling disukai dari sudut pandang saya! Sayang saya tidak bisa menerima keduanya.
John Lawrence Aspden
Jawabannya benar, tetapi selain itu orang mungkin sering ingin melihat sumber hulu (misalnya apakah mereka memiliki perubahan baru belum di distro). Untuk melakukan panggilan itu dpkg -s coreutils(atau paket apa pun yang Anda minati) dan cari Homepage:. Dari beranda, Anda biasanya dapat menemukan akses baca ke kode sumber dan riwayat versi lengkapnya.
Uwe Geuder