Komutun kaynak koduna nasıl bakarım? [kapalı]


13

Aniden 'echo' için kaynak koduna bakmaya karar verdim

$ which echo
/usr/bin/echo

yani

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

yani

$strings /usr/bin/echo

beni derlenmiş bir C programı olduğuna inandırıyor

Şimdi sıkıştım.

Nasıl yapabilirim:

  1. Hangi pakette olduğunu öğrenin

  2. Kaynağı alın

  3. Yeniden oluştur

  4. Dene

  5. Yeni sürümü sistem genelinde yükleyin

(5'in iyi bir fikir olmadığını biliyorum, sadece merak ediyorum ...)

Şu anda Fedora'dayım, ama Debian'ın cevaplarıyla da ilgileniyorum

Alakalı bir öğreticiye bağlantı iyi bir yanıt olacaktır.


Düzenle:

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

Bu yüzden sanırım /usr/bin/echohepsini okumak istediğimde görmek istiyorum bash.


2
type -a echoÖnce deneyin .
Satō Katsura

1
tip-yankı; yankı bir kabuk yerleşiktir; eko / usr / bin / echo; Yani sanırım bashın tamamını okumak yerine / usr / bin / echo olanını görmek istiyorum!
John Lawrence Aspden

2
/usr/bin/echo --versionSonrakini deneyin .
Satō Katsura


2
... Ve bu , sorduğunuzdan çok farklı bir soru.
Satō Katsura

Yanıtlar:


13

RHEL / Fedora

Çalıştırmak rpm -qf /path

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

Kaynak paketi indirin ( yumRHEL için kullanın ):

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

Geçerli dizinde indirilen SRPM paketindeki kaynakları, yamaları ayıklayın, dosyaların ayıklandığı dizine geçin ve dosyanızı bulun:

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

Paketi rpmbuild --rebuild coreutils-8.25-17.fc25.src.rpmdoğrudan sisteminize yükleyebileceğiniz RPM'leri üretecek şekilde yeniden oluşturabilirsiniz .

Fedora paketlerinde bazı değişiklikler yapmanız gerekiyorsa, sürdürücü yoluna gitmek çok daha kolaydır: fedpkgDepoyu kurun , kopyalayın, değişiklikleri yapın (yamaları kullanarak) ve paketi değişikliklerle yeniden oluşturun:

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

15

Debian (ve türevleri)

dpkg -S /pathHangi paketin /pathait olduğunu görmek için çalıştırın :

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

Kaynağı al (Ubuntu'dayım):

$ 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

Dosyayı bulun:

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

Gerisi size kalmış.


Çok teşekkürler. Sanırım RHEL / Fedora'nın kabul edilene cevap vermesini sağlamalıyım, çünkü bunu sordum. Ama esas olarak debian kullanıyorum, bu yüzden seninki muhtemelen benim açımdan tercih edilen! İkisini de kabul edemediğim için bir utanç.
John Lawrence Aspden

Cevap doğrudur, ancak ek olarak bir tanesi genellikle yukarı akış kaynağına bakmak isteyebilir (örneğin, dağıtımda henüz yeni değişiklikler olup olmadığı). Bunu yapmak için dpkg -s coreutils(veya ilgilendiğiniz herhangi bir paketi) ve arayın Homepage:. Ana sayfada genellikle kaynak kodlarına ve tam sürüm geçmişine okuma erişimi bulabilirsiniz.
Uwe Geuder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.