เหตุใดจึงมีหลายโปรแกรมอยู่ใน PATH


10

อย่างน้อยสิ่งหนึ่งที่ไขปริศนาเกี่ยวกับเดสก์ท็อป Linux อย่างน้อยก็คือทุกอย่างอยู่ในเส้นทางของฉัน ทุกอย่างฉันหมายถึงทุกแอปพลิเคชันเดสก์ท็อปรวมถึงสิ่งต่าง ๆ เช่น gnome-character-map และ glchess สิ่งเหล่านี้ไม่มีอินเตอร์เฟสบรรทัดคำสั่งที่จะพูดถึงดังนั้นฉันไม่สามารถนึกถึงกรณีที่ฉันจะเปิดใช้งานสิ่งเหล่านี้เป็นประจำจากเทอร์มินัล - และในกรณีที่ไม่น่าเป็นไปได้นั้นฉันไม่สามารถจินตนาการได้ว่า เส้นทาง ดูเหมือนว่าจะเป็นเรื่องตลก แต่อาจมีเหตุผลที่ดี

ดังนั้นจึงไม่เกิดขึ้น? มีผลกระทบที่สำคัญต่อประสิทธิภาพหรือการบำรุงรักษาหรือไม่?

คำตอบ:


14

คำสั่งทั้งหมดที่ผู้ใช้อาจต้องการเรียกใช้อยู่ในเส้นทาง นั่นคือสิ่งที่มันมีไว้เพื่อ ซึ่งรวมถึงคำสั่งที่คุณเรียกใช้โดยตรงคำสั่งที่บุคคลอื่นเรียกใช้โดยตรงและคำสั่งที่คุณหรือบุคคลอื่นเรียกใช้ทางอ้อมเนื่องจากคำสั่งอื่นถูกเรียกใช้ สิ่งนี้ไม่ จำกัด เฉพาะคำสั่งที่เรียกใช้จากเทอร์มินัล: คำสั่งที่เรียกใช้จาก GUI จะค้นหาในพา ธ การค้นหาคำสั่ง (อีกครั้งนั่นคือสิ่งที่มันต้องการ)

จำเป็นต้องพิมพ์เส้นทางแบบเต็มจะแย่มาก: คุณต้องค้นหาว่าเส้นทางแบบเต็มคืออะไร! คุณต้องติดตามว่าอยู่ใน/usr/bin(ซึ่งมีโปรแกรมส่วนใหญ่ที่ส่งมาพร้อมกับระบบปฏิบัติการ) หรือ/usr/local/bin(ซึ่งมีโปรแกรมที่ติดตั้งด้วยตนเองโดยผู้ดูแลระบบรวมถึงโปรแกรมที่ไม่ได้เป็นส่วนหนึ่งของระบบปฏิบัติการหลักในบางระบบ unix variants) หรือในไดเรคทอรีเฉพาะระบบอื่น ๆ หรือที่อื่น ๆ ในโฮมไดเร็กตอรี่ของผู้ใช้

เป็นการยากที่จะตอบเกี่ยวกับ“ ผลกระทบต่อประสิทธิภาพหรือการบำรุงรักษา” เพราะคุณไม่ได้พูดในสิ่งที่คุณเปรียบเทียบ หากคุณกำลังเปรียบเทียบกับการพิมพ์เส้นทางแบบเต็มทุกที่นั่นเป็นฝันร้ายสำหรับการบำรุงรักษา: ถ้าคุณเคยย้ายโปรแกรมหรือถ้าคุณต้องการติดตั้งเวอร์ชั่นใหม่กว่าที่ติดตั้งมากับระบบปฏิบัติการหรือติดตั้งโดยผู้ดูแลระบบ คุณต้องเปลี่ยนเส้นทางแบบเต็มไปทุกที่ ผลกระทบด้านประสิทธิภาพของการค้นหาชื่อในบางไดเรกทอรีนั้นเล็กน้อย

หากคุณกำลังเปรียบเทียบกับ Windows มันยิ่งแย่กว่านั้น: บางโปรแกรมเพิ่มไม่เพียงปฏิบัติการได้ แต่ยังรวมถึง crap ทุกชนิดให้กับ PATH และท้ายที่สุดคุณก็มีPATHตัวแปรที่มีความยาวหลายไมล์ซึ่งยังไม่รวมถึงโปรแกรมทั้งหมดเพราะ หลายโปรแกรมไม่ได้เพิ่มตัวเองลงใน PATH ของระบบเมื่อคุณติดตั้ง


นั่นดูเหมือนเหตุผลที่สมเหตุสมผล ขอบคุณสำหรับคำอธิบาย! บิตเกี่ยวกับการแทนที่โปรแกรมทำให้รู้สึกมาก ฉันไม่ได้คิดเกี่ยวกับเรื่องนั้นเลย :) ส่วนที่กระทบกับฉันคือฉันชอบที่จะมีเนมสเปซเล็ก ๆ และเป็นคำอธิบายเมื่อฉันคิดเกี่ยวกับการเขียนโปรแกรมในขณะที่ทุกอย่างอยู่ในเนมสเปซส่วนกลางเดียวกัน ดูเส้นทางแบบเต็มในสถานที่ที่ไม่ได้อธิบายเช่น * / bin) ฉันคิดว่าพวกเขาเป็นสิ่งที่แตกต่างออกไป
Dylan McCall

4

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

ยิ่งกว่านั้น Desktop Desktop ก็ไม่มีอะไรพิเศษเกี่ยวกับเรื่องนี้เช่นกัน PATH จากระบบ XP ของฉันมี% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbemซึ่งอาจครอบคลุมไบนารีส่วนใหญ่ของ Windows

ไดเร็กทอรีใน PATH ถูกค้นหาตามลำดับที่ระบุและหยุดทันทีที่พบการจับคู่ ไดเรกทอรีระบบมักจะเป็นจุดเริ่มต้นเพื่อให้ลำดับความสำคัญสูงสุดแก่พวกเขา ผู้ใช้ควรต่อท้ายพา ธ การค้นหาที่กำหนดเองในตอนท้าย

สำหรับประสิทธิภาพ: เชลล์ที่ทันสมัยส่วนใหญ่ทำการแคชเนื้อหาของ PATH ดังนั้นพวกเขาไม่จำเป็นต้องสแกนดิสก์ทุกครั้งที่ผู้ใช้ป้อนคำสั่ง


Windows PATH ครอบคลุมไบนารีส่วนใหญ่ที่มาพร้อมกับ Windows แต่แอปพลิเคชันทั่วไปที่คุณติดตั้งจะไม่พบใน PATH (แอพที่มีส่วนประกอบของบรรทัดคำสั่งจะเพิ่มตัวเองลงใน PATH แต่โดยปกติแล้ว GUI แบบเดียวเท่านั้นจะทำไม่ได้)
cjm

เจ๋งฉันมักจะไตร่ตรองคำสั่งและความสำคัญของมันเสมอ กฎง่ายๆคืออะไร? ฉันมี (เกือบ) การรวมกันของทุกคนusr, local, binและsbin(ไม่รวมของฉันไดเรกทอรีบ้านผู้ใช้)
Emanuel Berg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.