<ก่อนหน้านี้ | Contents | ถัดไป>
3.2. การวางแนวในระบบไฟล์
3.2.1. เส้นทาง
เมื่อคุณต้องการให้ระบบดำเนินการคำสั่ง คุณแทบจะไม่ต้องให้เส้นทางแบบเต็มไปยังคำสั่งนั้นเลย ตัวอย่างเช่น เรารู้ว่า ls คำสั่งอยู่ในไฟล์ / bin ไดเร็กทอรี (ตรวจสอบกับ ที่ -a ls) แต่เราไม่ต้องป้อนคำสั่ง /ถัง/ลิตร เพื่อให้คอมพิวเตอร์แสดงรายการเนื้อหาของไดเร็กทอรีปัจจุบัน
การขอ เส้นทาง ตัวแปรสภาพแวดล้อมดูแลสิ่งนี้ ตัวแปรนี้แสดงรายการไดเร็กทอรีเหล่านั้นในระบบที่สามารถพบไฟล์เรียกทำงาน และทำให้ผู้ใช้ประหยัดเวลาในการพิมพ์และจดจำตำแหน่งของคำสั่งต่างๆ ดังนั้นเส้นทางจึงมีไดเร็กทอรีจำนวนมากที่มี ถัง ในชื่อของพวกเขาตามที่ผู้ใช้ด้านล่างแสดงให้เห็น NS เสียงสะท้อน คำสั่งใช้แสดงเนื้อหา ("$") ของตัวแปร เส้นทาง:
โรเจอร์:> เสียงสะท้อน $PATH
/opt/local/bin:/usr/X11R6/bin:/usr/bin:/usr/sbin/:/bin
โรเจอร์:> เสียงสะท้อน $PATH
/opt/local/bin:/usr/X11R6/bin:/usr/bin:/usr/sbin/:/bin
ในตัวอย่างนี้ ไดเร็กทอรี /opt/local/bin, /usr/X11R6/bin, / usr / bin, / usr / sbin และ
/ bin ต่อมาก็ค้นหาโปรแกรมที่ต้องการ ทันทีที่พบรายการที่ตรงกัน การค้นหาจะหยุด แม้ว่าจะไม่ได้ค้นหาทุกไดเร็กทอรีในพาธก็ตาม นี้สามารถนำไปสู่สถานการณ์ที่แปลก ในตัวอย่างแรกด้านล่าง ผู้ใช้รู้ว่ามีโปรแกรมที่เรียกว่า ส่ง sms เพื่อส่งข้อความ SMS และผู้ใช้อื่นในระบบเดียวกันสามารถใช้งานได้ แต่เธอไม่สามารถทำได้ ความแตกต่างอยู่ในการกำหนดค่าของ เส้นทาง ตัวแปร:
[jenny@blob เจนนี่]$ ส่ง sms bash: sendsms: ไม่พบคำสั่ง [jenny@blob jenny]$ echo $PATH
/bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/home/jenny/bin [jenny@blob jenny]$ su - โทนี่
รหัสผ่าน: tony:~>ซึ่งส่งsms
sendsms คือ /usr/local/bin/sendsms
โทนี่:~>echo $PATH
/home/tony/bin.Linux:/home/tony/bin:/usr/local/bin:/usr/local/sbin:\
/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin
[jenny@blob เจนนี่]$ ส่ง sms bash: sendsms: ไม่พบคำสั่ง [jenny@blob jenny]$ echo $PATH
/bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/home/jenny/bin [jenny@blob jenny]$ su - โทนี่
รหัสผ่าน: tony:~>ซึ่งส่งsms
sendsms คือ /usr/local/bin/sendsms
โทนี่:~>echo $PATH
/home/tony/bin.Linux:/home/tony/bin:/usr/local/bin:/usr/local/sbin:\
/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin
สังเกตการใช้ su (switch user) สิ่งอำนวยความสะดวก ซึ่งอนุญาตให้คุณเรียกใช้เชลล์ในสภาพแวดล้อมของผู้ใช้รายอื่น โดยที่คุณทราบรหัสผ่านของผู้ใช้
แบ็กสแลชระบุความต่อเนื่องของบรรทัดถัดไป โดยไม่มีเครื่องหมาย เข้าสู่ แยกบรรทัดหนึ่งออกจากอีกบรรทัดหนึ่ง
ในตัวอย่างถัดไป ผู้ใช้ต้องการโทรหา wc (จำนวนคำ) คำสั่งตรวจสอบจำนวนบรรทัดในไฟล์ แต่ไม่มีอะไรเกิดขึ้น และเขาต้องหยุดการกระทำของเขาโดยใช้ Ctrl+C การผสมผสาน:
จัมเปอร์:~> wc -l ทดสอบ
(Ctrl-C)
จัมเปอร์:~> ซึ่ง wc
wc ถูกแฮช (/home/jumper/bin/wc)
จัมเปอร์:~> เสียงสะท้อน $PATH
/home/jumper/bin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\
/usr/bin:/usr/sbin:/bin:/sbin
จัมเปอร์:~> wc -l ทดสอบ
(Ctrl-C)
จัมเปอร์:~> ซึ่ง wc
wc ถูกแฮช (/home/jumper/bin/wc)
จัมเปอร์:~> เสียงสะท้อน $PATH
/home/jumper/bin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\
/usr/bin:/usr/sbin:/bin:/sbin
การใช้งานของ ที่ คำสั่งแสดงให้เราเห็นว่าผู้ใช้รายนี้มี ถัง-ไดเร็กทอรีในโฮมไดเร็กตอรี่ของเขา ซึ่งมีโปรแกรมที่เรียกว่า wc. เนื่องจากโปรแกรมในโฮมไดเร็กตอรี่ของเขาจะพบก่อนเมื่อค้นหา
เส้นทางที่เรียกร้องสำหรับ wc, โปรแกรม "ทำเอง" นี้ถูกดำเนินการ โดยอินพุตอาจไม่เข้าใจ ดังนั้นเราจึงต้องหยุดมัน ในการแก้ไขปัญหานี้มีหลายวิธี (มีหลายวิธีในการแก้ปัญหาใน UNIX/Linux เสมอ): คำตอบหนึ่งอาจเป็นการเปลี่ยนชื่อผู้ใช้ wc โปรแกรมหรือผู้ใช้สามารถกำหนดเส้นทางแบบเต็มไปยังคำสั่งที่ต้องการได้โดยใช้คำสั่ง -a ตัวเลือก ที่ คำสั่ง
หากผู้ใช้ใช้โปรแกรมในไดเร็กทอรีอื่นบ่อยขึ้น เขาสามารถเปลี่ยนเส้นทางเพื่อดูในไดเร็กทอรีของตนเองได้:
จัมเปอร์:~> เส้นทางการส่งออก=/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\
/usr/bin:/usr/sbin:/bin:/sbin:/home/จัมเปอร์/bin
จัมเปอร์:~> เส้นทางการส่งออก=/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\
/usr/bin:/usr/sbin:/bin:/sbin:/home/จัมเปอร์/bin
การเปลี่ยนแปลงไม่ถาวร!