โปรแกรม `['ที่อยู่ในระบบ / bin ของฉันคืออะไร


32

ผมก็เพิ่งเรียกดู Fedora ของฉันโฟลเดอร์และพบไบนารีที่มีชื่อว่า/bin [ฉันพยายามค้นหาข้อมูลเพิ่มเติมทางอินเทอร์เน็ต แต่ฉันไม่พบสิ่งใดที่มีประโยชน์ การดำเนินการให้ผ่านstraceดูเหมือนจะไม่ก่อให้เกิดประโยชน์ใด ๆ สำหรับการตรวจสอบอย่างใกล้ชิดเช่นกัน

นั่นคืออะไร? ฉันควรตื่นตระหนกเหรอ? มันอาจเป็นผลมาจากการประนีประนอมระบบหรือไม่? ฉันควรเรียกใช้หรือไม่ มันเป็นของแพคเกจใด ๆ ?


4
[ -f /bin/[ ] && printf "%s\n" "Don't panic"
jasonwryan

@ jasonwryan ใช่ฉันต้องใช้เวลาสักพักกว่าจะหามัน ฉันไม่สามารถหาข้อมูลได้มากมายในเน็ตและ Google ก็ไม่ได้ช่วยอะไรมาก โพสต์ไว้ที่นี่ด้วยความหวังว่ามันจะช่วยคนถัดไปที่อยู่ในรองเท้าของฉัน
NlightNFotis

10
วิ่งman [ไปดูว่า[คำสั่งคืออะไร!
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

@Gilles พูดตามตรงฉันทำและพูดถึงบางสิ่งเกี่ยวกับbashและคิดว่าอาจเป็นอย่างอื่น ไม่ใช่สิ่งแรกที่นึกถึงเมื่อคุณเห็นเลขฐานสองที่มีชื่อที่คุณไม่เคยเห็นมาก่อนในระบบไฟล์ของคุณ - หรือเพื่อให้เป็นอีกวิธีหนึ่งคุณต้องหาสิ่งที่เป็นรูปธรรมมากขึ้นเพื่อเคลียร์ข้อสงสัยในหัวของคุณ .
NlightNFotis

4
ทำrpm -qif /bin/[เพื่อค้นหาว่ามันมาจากไหน ...
vonbrand

คำตอบ:


37

[ไบนารีที่อาศัยอยู่ใต้/binต้นไม้ในการกระจาย GNU / Linux จำนวนมากไม่ได้เป็นสิ่งที่จะต้องตื่นตระหนกออก อย่างน้อยใน Fedora 19 ของฉันมันเป็นส่วนหนึ่งของแพ็คเกจ coreutils ดังที่แสดงด้านล่าง:

$ rpm -qf /bin/[
coreutils-8.21-13.fc19.x86_64

และเป็นคำพ้องความหมายสำหรับtestอนุญาตให้มีการแสดงออกเช่น[ expression ]เขียนในเชลล์สคริปต์หรือแม้กระทั่งการใช้แบบโต้ตอบ


16
โปรดทราบว่าเปลือกเช่นbashมี builtin testและ[และไม่เรียกไบนารีภายนอก
jordanm

1
@ jordanm วันนี้เชลล์ส่วนใหญ่มีพวกมัน (และการดำเนินงานทั่วไปอื่น ๆ ที่เรียบง่าย) เป็น builtins แต่นั่นไม่ใช่ allways ดังนั้น (หรือเป็นเช่นนั้นในเปลือกหอยทั้งหมด) มันอาจได้รับคำสั่งจาก POSIX
vonbrand

2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.htmlคุณพูดถูก ต้องการคำสั่งทดสอบ[ตามข้อกำหนดนี้
yegle

@vonbrand เฉพาะเชลล์คล้าย Bourne เท่านั้นที่มี[คำสั่งbuiltin Non-บอร์นเหมือนคนที่ชอบ(t)csh, rc, esทั่วไปทำไม่ได้ ( fishเป็นข้อยกเว้นที่นั่น)
Stéphane Chazelas

5

[คำสั่งเช่นเดียวกับtestคำสั่ง

อนุญาตให้คุณเขียนข้อความสั่งเงื่อนไขแบบสั้น ๆ ในเชลล์สคริปต์ จากหน้าคู่มือ SunOS:

   if [ "$1" = "pear" ] || [ "$1" = "grape" ] || [ "$1" = "apple" ]
   then
       command
   fi

หากคุณลบสคริปต์จะหยุดทำงาน!


สคริปต์ที่เขียนขึ้นสำหรับเชลล์ที่ไม่มี[คำสั่งในตัวจะหยุดทำงาน เปลือกหอยส่วนใหญ่ทำ /bin/[ยังคงแน่นอนฉันจะไม่แนะนำให้ถอด
Keith Thompson

@ KeithThompson เชลล์ทั้งหมดมี[builtin เป็นสคริปต์ที่มีแอ็พพลิเคชันที่ไม่ใช่เชลล์เรียกใช้งาน[ซึ่งจะแตก Like find ... -exec [ -f {} ] \;หรือenv LC_ALL=C [ -f bar ]
Stéphane Chazelas

@StephaneChazelas: กระสุนทั้งหมดหรือไม่ (csh และ tcsh ทำไม่ได้ แต่อาจจะอยู่ข้างๆจุดนั้น) ฉันไม่คิดว่าฉันเคยเห็นเปลือกที่ได้มาจาก sh ซึ่งไม่ได้[เป็นแบบ builtin แต่ไม่คิดว่า[เป็นแบบในตัว เชลล์เป้าหมาย ไม่ว่าในกรณีใดการถอด/bin/[จะเป็นความคิดที่ไม่ดีอย่างแน่นอน
Keith Thompson

เล่นลิ้นเล็ก ๆ น้อย ๆ : testและ[เป็นเกือบเดียวกัน [ต้องปิด]; testไม่อนุญาต (หรือมากกว่านั้นไม่ถือเป็นการโต้แย้ง]เป็นพิเศษ)
Keith Thompson

2

[ได้รับเสมอเป็นเทียบเท่ากับการทดสอบ แต่ฉันไม่เคยเห็น] กล่าวถึงอย่างชัดเจนแม้ว่าจะมีเสมอ ฉันเพิ่งพบสิ่งนี้ในhttp://ss64.com/bash/test.html :

When the [ form is used, the last argument to the command must be a ]

ซึ่งทำให้มั่นใจ - ในที่สุดฉันก็เสร็จตามที่พวกเขาพูด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.