Jak patrzeć na kod źródłowy polecenia? [Zamknięte]


13

Nagle zdecydowałem, że chcę spojrzeć na kod źródłowy „echa”

$ which echo
/usr/bin/echo

więc

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

więc

$strings /usr/bin/echo

prowadzi mnie do przekonania, że ​​jest to skompilowany program C.

Teraz utknąłem.

Jak ja:

  1. Dowiedz się, w którym pakiecie się znajduje

  2. Uzyskaj źródło

  3. Odbuduj to

  4. Sprawdź to

  5. Zainstaluj nową wersję dla całego systemu

(Wiem, że 5 nie jest dobrym pomysłem, jestem po prostu ciekawy ...)

Obecnie korzystam z Fedory, ale interesują mnie również odpowiedzi dla Debiana

Link do odpowiedniego samouczka byłby dobrą odpowiedzią.


Edytować:

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

Sądzę więc, że to ten, /usr/bin/echoktóry chciałbym zobaczyć, zamiast próbować przeczytać całość bash.


2
Spróbuj type -a echonajpierw.
Satō Katsura

1
wpisz -a echo; echo jest wbudowaną powłoką; echo to / usr / bin / echo; Więc chyba chcę zobaczyć / usr / bin / echo, a nie przeczytać całą bash!
John Lawrence Aspden

2
Spróbuj /usr/bin/echo --versiondalej.
Satō Katsura,


2
... I to jest zupełnie inne pytanie niż to, które zadałeś.
Satō Katsura

Odpowiedzi:


13

RHEL / Fedora

Biegać rpm -qf /path

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

Pobierz pakiet źródłowy (użyj yumdla RHEL):

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

Wyodrębnij źródła, poprawki z pakietu SRPM pobranego w bieżącym katalogu, przejdź do katalogu, w którym pliki są rozpakowywane, i znajdź swój plik:

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

Możesz przebudować pakiet za pomocą rpmbuild --rebuild coreutils-8.25-17.fc25.src.rpm, który wygeneruje RPM, które możesz zainstalować bezpośrednio w systemie.

Jeśli potrzebujesz dokonać modyfikacji pakietów Fedory, o wiele łatwiej jest przejść do opiekuna: Zainstaluj fedpkg, sklonuj repozytorium, dokonaj modyfikacji (używając łatek) i odbuduj pakiet z modyfikacjami:

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

15

Debian (i pochodne)

Uruchom, dpkg -S /pathaby zobaczyć, do którego pakietu /pathnależy:

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

Pobierz źródło (korzystam z 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

Znajdź plik:

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

Reszta zależy od ciebie.


Dziękuję bardzo. Myślę, że powinienem sprawić, aby RHEL / Fedora odpowiedziała na odpowiedź, ponieważ o to zapytałem. Ale głównie używam debiana, więc twój jest prawdopodobnie preferowany z mojego punktu widzenia! Szkoda, że ​​nie mogę zaakceptować obu.
John Lawrence Aspden

Odpowiedź jest poprawna, ale dodatkowo często można chcieć przyjrzeć się źródłu źródłowemu (np. Czy wprowadzono nowe zmiany jeszcze w dystrybucji). Aby to zadzwonić dpkg -s coreutils(lub inny interesujący Cię pakiet) i poszukaj Homepage:. Na stronie głównej zwykle można znaleźć dostęp do odczytu ich kodu źródłowego i pełnej historii wersji.
Uwe Geuder,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.