บทช่วยสอนนี้จะสอนคุณวิธีใช้คำสั่ง which ใน Linux พร้อมตัวอย่างง่ายๆ
คำสั่ง which จะบอกเส้นทางไปยังไฟล์ executable ที่ถูกใช้โดยคำสั่งบนระบบ หากมีอยู่
ทำไมจึงมีประโยชน์? สมมติว่าคุณมีสองสำเนาของ executable MySQL ติดตั้งบนระบบ (ติดตั้งผ่านวิธีต่างกัน) และคุณต้องการรู้ว่าตัวไหนกำลังถูกใช้งานจริง เพื่อให้อีกตัวสามารถลบได้ – คำสั่ง which จะบอกว่าตัวไหนในสองตัวถูกเรียกเมื่อคุณรัน MySQL บนบรรทัดคำสั่ง
ไวยากรณ์คำสั่ง which ใน Linux
คำสั่งสำหรับคำสั่ง which มีดังนี้:
which OPTIONS COMMAND
โปรดทราบว่า:
- OPTIONS เป็นรายการตัวเลือกจากตารางด้านล่าง ซึ่งสามารถใช้เปลี่ยนพฤติกรรมเริ่มต้นของคำสั่ง which
- COMMAND คือชื่อคำสั่งที่คุณต้องการทราบเส้นทางไปยัง executable
- COMMAND ต้องระบุ มิฉะนั้น which จะไม่มีอะไรให้ค้นหา!
ตัวเลือกคำสั่ง
นี่คือตัวเลือกที่ใช้บ่อยที่สุดซึ่งสามารถส่งให้คำสั่ง which:
| ตัวเลือก | คำอธิบาย |
|---|---|
| --all, -a | พิมพ์ executable ที่ตรงกันทั้งหมดใน PATH ไม่ใช่แค่ตัวแรก |
| --read-alias, -i | อ่านอีลิอาสจาก stdin รายงานตัวที่ตรงกันบน stdout มีประโยชน์เมื่อร่วมกับการใช้ alias สำหรับ which เอง |
| --skip-alias | ละเลยตัวเลือก --read-alias หากมี มีประโยชน์สำหรับค้นหา binary ปกติอย่างชัดเจน ขณะใช้ --read-alias ใน alias หรือ function สำหรับ which |
| --read-functions | อ่านการกำหนด shell function จาก stdin รายงานตัวที่ตรงกันบน stdout มีประโยชน์เมื่อร่วมกับการใช้ shell function สำหรับ which เอง |
| --skip-functions | ละเลยตัวเลือก --read-functions หากมี มีประโยชน์สำหรับค้นหา binary ปกติอย่างชัดเจน ขณะใช้ --read-functions ใน alias หรือ function สำหรับ which |
เช่นเดิม คุณสามารถดูคู่มือผู้ใช้เต็มรูปแบบสำหรับคำสั่ง which โดยรัน:
man which
ตัวอย่างคำสั่ง which
ด้านล่าง เราค้นหาเส้นทางสำหรับ executable ที่ถูกเรียกเมื่อ nano รันจากเทอร์มินัล:
which nano
จะได้ผลลัพธ์ในลักษณะนี้ หากติดตั้ง text editor nano บนระบบของคุณ:
/usr/bin/nano
ถ้า nano ไม่ได้ ติดตั้ง คุณจะเห็น:
nano not found
สิ่งนี้ทำให้คำสั่ง which มีประโยชน์ทั้งสำหรับตรวจสอบตำแหน่ง executable และตรวจสอบว่าแพ็กเกจติดตั้ง/พร้อมใช้งานหรือไม่
สามารถระบุชื่อ executable หลายตัวได้ หากต้องการค้นหาหลายคำสั่งพร้อมกัน:
which cat less
จะได้ผลลัพธ์:
/bin/cat /usr/bin/less
รหัสส่งคืน (Return Codes)
หากคุณใช้ which ใน Shell Script คุณสามารถใช้รหัสสถานะที่คำสั่งส่งคืน เพื่อตัดสินใจว่า executable path ถูกพบหรือไม่:
| รหัส | ความหมาย |
|---|---|
| 0 | คำสั่งที่ระบุทั้งหมดถูกพบและ executable |
| 1 | คำสั่งที่ระบุหนึ่งขึ้นไปไม่ถูกพบ หรือไม่ executable |
| 2 | ใช้ตัวเลือกหรือไวยากรณ์ไม่ถูกต้อง |
สิ่งนี้มีประโยชน์มาก หากคุณต้องการทำให้ shell scripts ของคุณพกพาได้ (portable) – คุณสามารถใช้คำสั่ง which ตรวจสอบว่าคำสั่งพร้อมใช้งานก่อนรันในสคริปต์ เพื่อให้ผู้ใช้ปลายทางไม่ได้รับข้อผิดพลาดหากพวกเขาไม่มีซอฟต์แวร์ที่จำเป็นติดตั้ง