Làm thế nào để tôi xem mã nguồn cho một lệnh? [đóng cửa]


13

Tôi đột nhiên quyết định tôi muốn xem mã nguồn cho 'echo'

$ which echo
/usr/bin/echo

vì thế

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

vì thế

$strings /usr/bin/echo

khiến tôi tin rằng đó là một chương trình C được biên dịch

Bây giờ tôi đang bị mắc kẹt.

Làm thế nào để tôi:

  1. Tìm hiểu xem nó nằm trong gói nào

  2. Lấy nguồn

  3. Xây dựng lại nó

  4. Kiểm tra nó

  5. Cài đặt phiên bản mới trên toàn hệ thống

(Tôi biết rằng 5 không phải là một ý tưởng tốt, tôi chỉ tò mò ...)

Tôi hiện đang ở trên Fedora, nhưng tôi cũng quan tâm đến câu trả lời cho Debian

Một liên kết đến một hướng dẫn có liên quan sẽ là một câu trả lời tốt.


Biên tập:

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

Vì vậy, tôi đoán đó là một trong những /usr/bin/echogì tôi muốn xem hơn là cố gắng đọc toàn bộ bash.


2
Hãy thử type -a echođầu tiên.
Satō Katsura

1
loại -a vang; echo là một vỏ dựng sẵn; tiếng vang là / usr / bin / echo; Vì vậy, tôi đoán rằng tôi muốn xem / usr / bin / echo một thay vì đọc tất cả bash!
John Lawrence Aspden

2
Hãy thử /usr/bin/echo --versiontiếp theo.
Satō Katsura


2
... Và đó là một câu hỏi rất khác so với câu hỏi mà bạn đã hỏi.
Satō Katsura

Câu trả lời:


13

RÀNG / Fedora

Chạy rpm -qf /path

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

Tải xuống gói nguồn (sử dụng yumcho RHEL):

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

Trích xuất các nguồn, các bản vá từ gói SRPM được tải xuống trong thư mục hiện tại, thay đổi thư mục nơi các tệp được giải nén và tìm tệp của bạn:

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

Bạn có thể xây dựng lại gói bằng cách sử dụng rpmbuild --rebuild coreutils-8.25-17.fc25.src.rpm, nó sẽ tạo ra các RPM mà bạn có thể cài đặt trực tiếp trên hệ thống của mình.

Nếu bạn cần thực hiện một số sửa đổi đối với các gói fedora, việc đi theo cách bảo trì sẽ dễ dàng hơn nhiều: Cài đặt fedpkg, sao chép kho lưu trữ, thực hiện các sửa đổi (sử dụng các bản vá) và xây dựng lại gói với sửa đổi:

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

15

Debian (và các dẫn xuất)

Chạy dpkg -S /pathđể xem gói nào /paththuộc về:

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

Lấy nguồn (Tôi đang trên 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

Tìm tập tin:

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

Phần còn lại là tùy thuộc vào bạn.


Cảm ơn rất nhiều. Tôi nghĩ rằng tôi nên làm cho câu trả lời của RHEL / Fedora được chấp nhận, vì tôi đã hỏi về điều đó. Nhưng chủ yếu tôi sử dụng debian, vì vậy bạn có lẽ là người ưa thích theo quan điểm của tôi! Một sự xấu hổ tôi không thể chấp nhận cả hai.
John Lawrence Aspden

Câu trả lời là chính xác, nhưng ngoài ra, người ta thường có thể muốn xem xét nguồn ngược dòng (ví dụ: liệu họ có những thay đổi mới chưa có trong bản phân phối không). Để thực hiện cuộc gọi đó dpkg -s coreutils(hoặc bất kỳ gói nào bạn quan tâm) và tìm kiếm Homepage:. Từ trang chủ, bạn thường có thể tìm thấy quyền truy cập đọc vào mã nguồn và lịch sử phiên bản đầy đủ của họ.
Uwe Geuder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.