ฉันจะดูซอร์สโค้ดสำหรับคำสั่งได้อย่างไร [ปิด]


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/echobash


2
ลองtype -a echoก่อน
Satō Katsura

1
พิมพ์ -a echo; echo เป็นตัวเชลล์ echo คือ / usr / bin / echo; ดังนั้นฉันคิดว่าฉันต้องการเห็น / usr / bin / echo มากกว่าอ่าน bash ทั้งหมด!
John Lawrence Aspden

2
ลอง/usr/bin/echo --versionต่อไป
Satō Katsura

4
เพลิดเพลินกับ: github.com/coreutils/coreutils/blob/master/src/echo.c
Julie Pelletier

2
... และที่เป็นมากคำถามที่แตกต่างกว่าคนที่คุณถาม
Satō Katsura

คำตอบ:


13

RHEL / Fedora

วิ่ง rpm -qf /path

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

ดาวน์โหลดแพ็กเกจซอร์ส (ใช้yumสำหรับ RHEL):

$ 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ซึ่งจะสร้าง RPMs ที่คุณสามารถติดตั้งบนระบบของคุณโดยตรง

หากคุณต้องการทำการดัดแปลงบางอย่างกับแพ็คเกจ 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 ตอบคำถามที่ยอมรับได้เนื่องจากฉันได้ถามเรื่องนี้ แต่ส่วนใหญ่ฉันใช้เดเบียนดังนั้นคุณน่าจะเป็นที่ต้องการจากมุมมองของฉัน! ความอัปยศฉันไม่สามารถยอมรับทั้งสองได้
John Lawrence Aspden

คำตอบนั้นถูกต้อง แต่นอกจากนี้มักจะต้องการที่จะดูที่ต้นน้ำ (เช่นว่าพวกเขามีการเปลี่ยนแปลงใหม่ยังไม่อยู่ใน distro) จะทำอย่างไรที่โทร dpkg -s coreutils(หรือสิ่งที่แพคเกจที่คุณมีความสนใจใน) Homepage:และมองหา จากหน้าแรกคุณสามารถค้นหาการเข้าถึงซอร์สโค้ดและประวัติเวอร์ชันเต็ม
Uwe Geuder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.