Mac OS X: สถานที่ทั่วไปที่ควรใช้ไฟล์ไบนารี


61

ฉันดาวน์โหลดแอปพลิเคชันที่เป็นแอปพลิเคชันบรรทัดคำสั่งและต้องการวางไว้ที่ไหนที่ฉันสามารถเรียกใช้จากบรรทัดคำสั่งได้โดยไม่ต้องพิมพ์พา ธ อย่างชัดเจน

  1. อะไรคือเส้นทางแบบดั้งเดิมที่ใช้สำหรับบางสิ่งเช่นนี้? /usr/bin? มีตัวเลือกที่แตกต่างกันหรือไม่ถ้าฉันต้องการให้กับผู้ใช้ทั้งหมดและอีกตัวเลือกหนึ่งสำหรับฉันสำหรับผู้ใช้เฉพาะเช่นบัญชีผู้ดูแลระบบของฉัน

  2. หรือฉันควรวางไว้ในไดเรกทอรีของตัวเองภายใต้ไดเรกทอรีแอปพลิเคชันและเพิ่มไปยังเส้นทางหรือไม่ ถ้าเป็นเช่นนั้นไฟล์ใดควบคุมตำแหน่งของพา ธ

คำตอบ:


53

คำตอบหลัก: /usr/local/binคุณอาจต้องการ คุณอาจต้องอัปเดตค่าเริ่มต้นทั้งนี้ขึ้นอยู่กับว่า macOS ของคุณเป็นรุ่นล่าสุดเมื่อ$PATHใด ดูด้านล่างสำหรับรายละเอียดเพิ่มเติม

UPDATE 2018/12/01ในบางจุดตั้งแต่ผมเขียนคำตอบเดิมของฉัน, $PATHแอปเปิ้ลเริ่มต้นของการเปลี่ยนแปลง เป็นผลให้สิ่งที่ฉันพูดด้านล่างมากมายไม่เกี่ยวข้องกับ Macs ล่าสุด ถ้าคุณพิมพ์echo $PATHใน terminal และเป็นครั้งแรกแล้วคุณสามารถละเว้นทุกอย่างที่เกี่ยวกับการเปลี่ยนแปลงด้านล่างของคุณ /usr/local/bin$PATH

คำตอบเดิม

Macs นั้นผิดปกติในเรื่องนี้ $PATHตัวแปรเริ่มต้นสำหรับผู้ใช้ปกติมีลักษณะดังนี้:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

โดยวาง/usr/local/bin หลัง /usr/binและ/bin, Mac upends ระบบปกติ โดยปกติคุณสามารถใส่อะไรลงไป/usr/local/bin(พูดล่ามภาษา Perl ตัวที่สองรวบรวมในแบบที่ไม่ได้มาตรฐาน) จากนั้นผู้ใช้ทั่วไปจะเข้าใช้งานแบบกำหนดเองมากกว่าแบบแรก ดีจัง. ผู้ใช้สามารถรับตัวแปรได้ แต่ระบบยังคงบริสุทธิ์ ได้รับค่าเริ่มต้นแอปเปิ้ล$PATHแต่รายการใน/usr/binหรือจะได้รับก่อนที่จะพบอะไรใน/bin /usr/local/bin(โดยทั่วไปจะมีจุดประสงค์ในการติดตั้งเช่น Perl แบบกำหนดเอง/usr/local/bin)

ในการแก้ไขปัญหานี้คุณสามารถเปลี่ยนผู้ใช้ทั่วไป$PATHโดยแก้ไข.profileไฟล์ในโฮมไดเร็กตอรี่ของผู้ใช้ (ไฟล์นั้นอาจไม่มีอยู่หากคุณมีการติดตั้งใหม่ในกรณีนี้ให้สร้างมันขึ้นมา)

กึ่งเกี่ยวข้อง: Homebrewให้การจัดการแพ็คเกจที่ยอดเยี่ยมสำหรับ Macs ตามค่าเริ่มต้น Homebrew จะติดตั้งซอฟต์แวร์ลงในซอฟต์แวร์/usr/localแต่จะทำในลักษณะที่ทำให้ง่ายต่อการลบสิ่งต่าง ๆ และกลับสู่สถานะวานิลลาในภายหลัง


1
บน OsX 10.13.6 (High Sierra) ที่เพิ่งติดตั้งใหม่พา ธ จะประกอบด้วย / usr / local / bin ก่อน (แม้ว่าโฟลเดอร์จะไม่มีอยู่) โดยค่าเริ่มต้น
เลโกลัส

1
@Legolas Apple ดูเหมือนจะเปลี่ยนวิธีจัดการกับสิ่งนี้ ฉันจะแก้ไขโพสต์
Telemachus

9

/usr/local/binและ/usr/local/sbinคุ้มค่าในการเพิ่มพา ธ ของคุณเนื่องจาก makefiles สำหรับบิวด์ซอร์สจำนวนมากถูกตั้งค่าเริ่มต้นให้ติดตั้งที่นั่น

หากคุณใช้MacPortsก็คุ้มค่าที่จะเพิ่ม/opt/local/binและ/opt/local/sbinเช่นกัน

วิธีที่ดีที่สุดในการทำเช่นนี้คือการเพิ่ม

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$PATH

ไปที่.bashrcไฟล์ในโฮมไดเร็กตอรี่ของคุณ (ซึ่งถูกซ่อนไว้ดังนั้น CLI เป็นวิธีที่ดีที่สุดในการทำเช่นนี้) หรือหากคุณต้องการเปลี่ยนพา ธ ทั้งระบบให้เพิ่มบรรทัดเดียวกันเป็น/etc/bashrc(ไม่ซ่อน) แต่คุณจะ จำเป็นต้องsudoทำเช่นนี้

หากคุณไม่ได้.bashrcอยู่ในบ้านของผู้ใช้คุณสามารถสร้างและเพิ่มบรรทัดนี้ได้ แต่อย่าลืมเปลี่ยนการอนุญาตบนไฟล์ที่คุณสร้างขึ้นเพื่อให้ผู้ใช้ที่มีปัญหาสามารถอ่านได้ (เห็นได้ชัดว่าไม่เกี่ยวข้องถ้าคุณ ' กำลังทำเพื่อโปรไฟล์ของคุณเอง)

$PATHในตอนท้ายผนวกเส้นทางเริ่มต้นระบบเพื่อสิ่งที่คุณใส่ก่อน โปรดทราบว่าระบบจะค้นหาไบนารีตามลำดับพา ธ ที่ได้รับดังนั้นหากคุณติดตั้งไบนารีใน/usr/localหรือ/opt/localติดตั้งตามค่าเริ่มต้นในระบบด้วยรุ่นที่คุณติดตั้งจะพบได้ก่อนซึ่งอาจทำให้ไม่พอใจ มันคุ้มค่าที่จะระวัง

ข้อมูลที่ดีเป็นที่นี่

ฉันควรทราบว่าข้างต้นถือว่าคุณกำลังใช้Bashสำหรับเชลล์ซึ่งเป็นค่าเริ่มต้นในMac OS X v10.4 (Tiger) และMac OS X v10.5 (Leopard) แต่ไม่ใช่ในระบบก่อนหน้าซึ่งใช้tcshแทน ซึ่งมีไวยากรณ์ที่แตกต่าง

ฉันหวังว่าจะช่วย ...


1
/usr/local/binอยู่ใน OS X เริ่มต้นแล้ว$PATH(แม้ว่าจะช้าไป - ดูคำตอบของฉัน) หากคุณใช้ MacPorts โปรแกรมติดตั้งควรแก้ไขพา ธ ของคุณตามความจำเป็นอย่างน้อยก็มักจะมีประสบการณ์ของฉัน ที่กล่าวว่าเป็นการดีที่ผู้ใช้จะรู้ว่ากำลังทำอะไร (และเพราะอะไร)
Telemachus

@Telemachus เห็นดี: เมื่อใดก็ตามที่ฉันสร้าง Mac สำหรับตัวเองฉันจะปรับแต่งนรกให้ออกจากเส้นทางก่อนดังนั้นฉันจึงไม่สามารถจำได้ว่ามาตรฐานและอะไรเป็นของฉัน!
avstrallen

1
ฉันรู้ว่าคุณกำลังคิดอะไรเกี่ยวกับตัวติดตั้ง MacPorts ในการปรับแต่งพา ธ ใน. profile แต่ฉันเคยมีโอกาสในอดีตเมื่อมีเหตุผลบางอย่างฉันไม่รู้ว่าสิ่งนี้ล้มเหลวในการยึดติด (ซึ่งทำให้สับสนกับฉัน มากในขณะที่) ... ดังนั้นตั้งแต่นั้นมาผมมักจะสายในด้วยมือ ... !
avstrallen

"ซึ่งซ่อนอยู่ดังนั้น CLI จึงเป็นวิธีที่ดีที่สุดในการทำเช่นนี้": คำถามโง่คุณจะเรียกใช้ TextEdit ในไฟล์จากพรอมต์คำสั่งได้อย่างไร
46499 Jason S

ไม่มีสิ่งที่เป็นคำถามที่โง่: ใช้openคำสั่งด้วยชื่อไฟล์เป็นอาร์กิวเมนต์และควรเปิดด้วยสิ่งใดก็ตามที่ตั้งเป็นเครื่องมือแก้ไขข้อความเริ่มต้น (TextEdit เป็นมาตรฐาน)
avstrallen

7

/usr/localฉันมักจะไปด้วย นี่คือคำอธิบายว่าทำไมดีซึ่งหมายถึงระบบแฟ้มลำดับชั้นมาตรฐาน (FHS) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢ซึ่งใน เทิร์นพูดเกี่ยวกับ/usr/local:

ลำดับชั้นที่สามสำหรับข้อมูลท้องถิ่นเฉพาะกับโฮสต์นี้ โดยทั่วไปจะมีไดเรกทอรีย่อยเพิ่มเติมเช่น bin, lib, share.⁢


ใช่มันค่อนข้างเหมือนกับระบบปฏิบัติการ * nix อื่น ๆ ในเรื่องนั้น
jtbandes

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