PATH ทำงานอย่างไรใน Bash

How Does Path Work Bash



เมื่อคุณพิมพ์คำสั่งในเทอร์มินัล Linux คุณมักจะเรียกโปรแกรมทำงานบางอย่าง เช่น ลส , ซีดี , rm , mkdir ฯลฯ โปรแกรมทั้งหมดเหล่านี้อยู่ที่ใดที่หนึ่งในระบบไฟล์ใช่ไหม bash รู้ได้อย่างไรว่าโปรแกรมเหล่านี้อยู่ที่ไหน

ตัวแปรสภาพแวดล้อมเข้ามามีบทบาทโดยเฉพาะตัวแปร PATH ตัวแปรนี้มีหน้าที่บอก bash ว่าจะค้นหาโปรแกรมเหล่านั้นได้ที่ไหน มาดูกันว่า PATH ทำงานอย่างไรและจะดู/แก้ไข PATH ได้อย่างไร







ตัวแปรสภาพแวดล้อมและ $PATH

ในคำศัพท์เฉพาะของเชลล์ สภาพแวดล้อมคือพื้นที่ที่เชลล์สร้างขึ้นทุกครั้งที่เริ่มเซสชัน ในการจัดการสภาพแวดล้อม มีตัวแปรสภาพแวดล้อมที่แสดงถึงส่วนต่างๆ ของสภาพแวดล้อม ค่าของตัวแปรอาจเป็นสตริง ตำแหน่งไดเร็กทอรี ค่า หรืออื่นๆ



PATH เป็นตัวแปรสภาพแวดล้อมที่ติดตามบางไดเรกทอรี โดยค่าเริ่มต้น ตัวแปร PATH มีตำแหน่งต่อไปนี้



  • /usr/bin
  • /usr/sbin
  • /usr/local/bin
  • /usr/local/sbin
  • /เป็น
  • /sbin
  • /snap/bin (หากติดตั้ง Snap)

ต้องการดูว่าไดเรกทอรีใดบ้างที่ลงทะเบียนภายใต้ PATH? เปิดเครื่องเทอร์มินัลและเรียกใช้คำสั่งต่อไปนี้





$โยนออก $PATH

ในที่นี้เครื่องหมาย $ แสดงถึงตัวแปร NS โยนออก คำสั่งพิมพ์ค่าของตัวแปร PATH



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

ตัวอย่างเช่น มาทดสอบกับ โยนออก สั่งการ. ที่นี่ฉันกำลังเรียกใช้คำสั่ง echo

$โยนออกสวัสดีชาวโลก!

ไฟล์ปฏิบัติการของ .อยู่ที่ไหน โยนออก ? เรียกใช้คำสั่งถัดไปเพื่อค้นหา

$ที่ โยนออก

อย่างที่เราเห็น โยนออก ไฟล์เรียกทำงานอยู่ที่ /usr/bin/echo อยู่ที่ไหน? มาหาคำตอบกัน

$ที่ ที่

มันยังอยู่ที่ /usr/bin/ which เครื่องมือคำสั่งส่วนใหญ่อยู่ภายใต้ไดเร็กทอรี /usr/bin ที่นี่ bash กำลังให้คำปรึกษา PATH สำหรับตำแหน่งเพื่อค้นหาคำสั่งปฏิบัติการ

การปรับเปลี่ยน PATH

ก่อนที่เราจะปรับเปลี่ยนค่าของ PATH สิ่งสำคัญคือต้องเข้าใจโครงสร้างของมัน รันคำสั่งอีกครั้งเพื่อตรวจสอบค่าของ PATH

$โยนออก $PATH

ขอให้สังเกตว่าแต่ละไดเร็กทอรีคั่นด้วยเครื่องหมาย :

การเพิ่มไดเร็กทอรีไปยัง PATH

ในการเพิ่มไดเร็กทอรีที่กำหนดเองลงใน PATH เราจะใช้ไฟล์ bashrc เป็นสคริปต์ทุบตีพิเศษที่ทุบตีทุกครั้งที่เริ่มเซสชันทุบตีใหม่ โปรดทราบว่าไฟล์ bashrc นั้นไม่ซ้ำกันสำหรับผู้ใช้ทุกคนในระบบ Linux

เปิดไฟล์ bashrc ในโปรแกรมแก้ไขข้อความ หากไฟล์ bashrc ยังไม่มีอยู่ ตัวแก้ไขจะสร้างไฟล์ขึ้นมาโดยอัตโนมัติ

$ฉันมา~/.bashrc

นี่คือ bashrc เริ่มต้นที่มาพร้อมกับ Ubuntu ไปที่ไฟล์สุดท้าย (ถ้ามี) และเพิ่มบรรทัดต่อไปนี้

$ส่งออก เส้นทาง='$PATH: / '

ที่นี่ ค่าใหม่ของตัวแปร PATH จะเป็นตัวแปรเก่าพร้อมกับไดเร็กทอรีใหม่ที่เราเพิ่งเพิ่มเข้าไป

บันทึกไฟล์และบอกให้ bash โหลดซ้ำ

$แหล่งที่มา~/.bashrc

มาตรวจสอบว่าเพิ่มเส้นทางใหม่สำเร็จหรือไม่

$โยนออก $PATH

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

$demo.sh

ใช่ bash สามารถเรียกมันได้โดยตรงโดยไม่มีปัญหา

การลบไดเร็กทอรีออกจาก PATH

ไม่มีวิธีที่ตรงไปตรงมาในการเพิ่ม/ลบไดเร็กทอรีจาก PATH ให้ฉันอธิบาย

ค่าของ PATH ได้รับการแก้ไขแล้ว แล้วเคล็ดลับ bashrc ล่ะ? Bashrc เป็นสคริปต์ทุบตีที่ bash โหลดทุกครั้งที่เริ่มเซสชัน ใน bashrc เราเพิ่งประกาศว่าค่าใหม่ของ PATH จะเป็นค่าเริ่มต้นและไดเรกทอรีที่ผู้ใช้กำหนด ตอนนี้ทุกครั้งที่โหลด bash จะเห็นว่า bashrc กำลังบอกให้กำหนดค่าใหม่ของ PATH และนั่นคือสิ่งที่ทำ

ในทำนองเดียวกัน หากเราต้องการลบไดเร็กทอรีออกจาก PATH เราต้องกำหนดค่า PATH ใหม่อีกครั้งใน bashrc เพื่อให้ทุกครั้งที่ bash เริ่มทำงาน มันจะใช้ค่าที่แก้ไข

มาดูตัวอย่างนี้กัน ฉันยินดีที่จะลบไดเร็กทอรี ~/Desktop ออกจาก PATH

$โยนออก $PATH | sed -และ 's/:~/เดสก์ท็อป$//'

หากไดเร็กทอรีเป็น /home/wrong/dir คำสั่งจะมีลักษณะดังนี้

$โยนออก $PATH | sed -และ 's/:/home/wrong/dir$//'

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

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

$ส่งออก เส้นทาง='$(echo $PATH | sed -e 's/:~/Desktop$//')'

หรือคุณสามารถตั้งค่า PATH ได้ด้วยตนเอง เป็นกระบวนการที่ใช้แรงงาน แต่ตรงไปตรงมาและเรียบง่ายกว่า

$ส่งออก เส้นทาง=/usr/ท้องถิ่น/สบิน:/usr/ท้องถิ่น/เป็น:/usr/สบิน:/usr/เป็น:/สบิน:/เป็น:
/usr/เกม:/usr/ท้องถิ่น/เกม:/snap/เป็น

ที่นี่ ค่าของคำสั่งจะถูกกำหนดให้กับ PATH บันทึกไฟล์และโหลด bashrc ใหม่

$แหล่งที่มา~/.bashrc

มาตรวจสอบผลลัพธ์กัน

$โยนออก $PATH

อัปเดตค่า PATH แล้ว!

ความคิดสุดท้าย

ใน bash ตัวแปร PATH เป็นสิ่งสำคัญ โปรแกรมใดๆ ที่ทำงานผ่านเซสชัน bash จะสืบทอดตัวแปร ดังนั้นจึงเป็นสิ่งสำคัญที่ PATH จะรวมเฉพาะไดเร็กทอรีที่จำเป็นเท่านั้น การเพิ่มไดเร็กทอรีจะเพิ่มความซ้ำซ้อนให้กับระบบเท่านั้น

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

$สิ่งแวดล้อม | เรียงลำดับ

ต้องการเพิ่มประสบการณ์ทุบตีของคุณ? นามแฝงของ Bash นำเสนอวิธีพิเศษในการเร่งความเร็วและทำให้สิ่งต่าง ๆ เพิ่มขึ้น เรียนรู้เพิ่มเติมเกี่ยวกับ bash alias .

สนุก!