คำสั่งระบบเช่น ls ถูกสร้างขึ้นได้อย่างไร?


19

ฉันมีข้อสงสัยเกี่ยวกับ * ระวัง

  • ฉันไม่ทราบว่าไฟล์เรียกทำงานประเภทใดlsไม่ว่าจะเป็น. sh หรือ. ksh หรือระบบปฏิบัติการประเภทอื่น ๆ หากเป็นเช่นนั้นมันคืออะไร

  • เมื่อฉันพยายามที่จะดูว่าซอร์สโค้ดของlsคำสั่งมีลักษณะอย่างไรจะแสดงสิ่งที่อ่านไม่ได้วิธีใดที่ * nix ใช้ในการสร้างไฟล์ที่อ่านไม่ได้ประเภทเหล่านี้และฉันสามารถทำให้ไฟล์ของฉันคล้ายกับไฟล์เหล่านี้ (เช่นls- ไม่สามารถอ่านได้)


2
ความเป็นไปได้ที่ซ้ำกันของคำสั่ง builtin คืออะไรแตกต่างกันอย่างไร?
David Wilkins

4
ฉันคิดว่ามันเกี่ยวข้องกับ URL ด้านบนมากกว่าที่เป็นซ้ำ
slm

คำตอบ:


31

คุณสามารถกำหนดลักษณะของการปฏิบัติการใน Unix ได้โดยใช้fileคำสั่งและtypeคำสั่ง

ชนิด

คุณใช้typeเพื่อกำหนดตำแหน่งของไฟล์ที่เรียกใช้งานได้บนดิสก์ดังนี้:

$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls

ดังนั้นตอนนี้ฉันรู้ว่าlsจะอยู่ที่นี่ในระบบของฉันใน 2 /usr/bin/lsสถานที่: /bin/ls& ดูที่ไฟล์ปฏิบัติการเหล่านั้นฉันเห็นได้ว่ามันเหมือนกัน:

$ ls -l /usr/bin/ls /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /usr/bin/ls

หมายเหตุ:คุณสามารถยืนยันเหมือนพวกเขากำลังเกินกว่าขนาดของพวกเขาโดยการใช้หรือcmpdiff

กับ diff
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
ด้วย cmp
$ cmp /usr/bin/ls /bin/ls
$ 

การใช้ไฟล์

ถ้าฉันค้นหาพวกเขาโดยใช้fileคำสั่ง:

$ file /usr/bin/ls /bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped
/bin/ls:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped

ดังนั้นสิ่งเหล่านี้จะเป็นโปรแกรมจริงที่รวบรวมจาก C / C ++ หากพวกเขาเป็นเชลล์สคริปต์พวกเขามักจะนำเสนอเช่นนี้เพื่อfile:

$ file somescript.bash 
somescript.bash: POSIX shell script, ASCII text executable

เอลฟ์คืออะไร

เอลฟ์เป็นรูปแบบไฟล์มันเป็นผลลัพธ์ของคอมไพเลอร์เช่นgccซึ่งจะใช้ในการรวบรวม C / C ++ lsโปรแกรมเช่น

ในการคำนวณรูปแบบที่ปฏิบัติการและเชื่อมโยงได้ (ELF เดิมชื่อ Extensible Linking Format) เป็นรูปแบบไฟล์มาตรฐานทั่วไปสำหรับไฟล์เรียกใช้งานรหัสวัตถุไลบรารีที่ใช้ร่วมกันและการทิ้งแกน

โดยทั่วไปจะมีหนึ่งในนามสกุลต่อไปนี้ในชื่อไฟล์: none, .o, .so, .elf, .prx, .puff, .bin


@lgeorget - ดู Q & A นี้สำหรับเคล็ดลับเกี่ยวกับการใช้ชนิดที่เทียบกับ: unix.stackexchange.com/questions/85249/... โดยทั่วไปที่ดีที่สุดในการใช้งานเพียงtypeใดก็ได้ที่คุณอยากจะใช้หรือwhich whereis
slm

3
นอกจากนี้สำหรับเครื่องมือ GNU ซอร์สโค้ดสามารถใช้ได้อย่างอิสระเริ่มการค้นหาของคุณที่gnu.org/software
glenn jackman

สำหรับการทดสอบที่เหมือนกันคุณควรใช้สิ่งที่ชอบmd5sumหรือsha1sumไม่ใช่แค่ตรวจสอบขนาดและเวลาของไฟล์
Bob

@Bob - ไฟล์เหล่านั้นเหมือนกันไม่มีส่วนเกี่ยวข้องกับ Q ดังนั้นฉันจึงแสดงวิธีการง่าย ๆ เพื่อเปรียบเทียบไฟล์ฉันจะใช้เครื่องมือที่ฉลาดกว่าเช่น cmp ซึ่งมีความหมายสำหรับการเปรียบเทียบไฟล์ไบนารี ดูด้วยว่าแพ็คเกจใดที่พวกเขาจัดหาโดยระบุว่าพวกเขาเกี่ยวข้องหรือไม่ พวกเขาเป็นส่วนหนึ่งของcoreutils-8.21-13.fc19.x86_64และฉันเพิ่งรู้ว่าพวกเขาเหมือนกันจาก 20 ปีของการจัดการกับการเผยแพร่ Red Hat
slm

@Bob - ดูการอัปเดตสำหรับตัวอย่างในการเปรียบเทียบไฟล์
slm

9

มันเป็นไบนารีที่ปฏิบัติการได้ (รวบรวมเป็นรหัสเครื่องเช่นเดียวกับระบบส่วนใหญ่) เชลล์สคริปเป็นเหมือน "กาว" มากขึ้นในการรวมส่วนต่างๆเข้าด้วยกันเพื่อสร้างโซลูชันจากสิ่งที่มีอยู่ได้อย่างรวดเร็วและยืดหยุ่น นั่นคือพลังของ * ระวัง

คุณต้องมีซอร์สโค้ด (c บางครั้ง c ++ เป็นภาษาที่ใช้กันโดยทั่วไปใน * nix) ไม่ใช่แค่ไฟล์ประมวลผลที่คอมไพล์แล้ว เนื่องจากเป็นโอเพ่นซอร์สคุณสามารถรับรหัสได้ทุกอย่างจากคลังเก็บออนไลน์ (โดยทั่วไปยูทิลิตี้หลักมักมาจากโครงการ gnu) อย่างไรก็ตามมันค่อนข้างยุ่งยากหากคุณไม่ทราบวิธีการใช้ git หรือระบบติดตามรุ่นอื่น ๆ

นี่คือไฟล์ ls.c หากมันช่วยได้: http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c


โอ้และเพื่อชี้แจงคำถามว่าจะสร้างแอปพลิเคชั่นไบนารีได้อย่างไร: เลือกภาษาการเขียนโปรแกรมนับไม่ถ้วน (ยกเว้นคู่ที่ตีความหรือกึ่งตีความเช่น python, java, javascript, ... ซึ่งไม่ได้สร้างปฏิบัติการแบบสแตนด์อโลน ไฟล์ไบนารี) จากนั้นเรียนรู้การใช้ภาษานั้นและวิธีการรวบรวม
orion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.