บทที่ 7 · อ่าน 5 นาที
ทำไมเครื่องหาคำสั่งเจอ
คำสั่งทุกตัวคือไฟล์โปรแกรมในเครื่อง $PATH คือ list ร้านที่เครื่องวิ่งไปหาคำสั่งให้ which บอกว่าเก็บที่ไหน
สงสัยกันมาตั้งแต่บทแรกใช่ไหมครับ เวลาพิมพ์ echo หรือ ls เครื่องรู้ได้ยังไงว่าจะรันอะไร บทนี้คือเฉลย
คำสั่งคือไฟล์โปรแกรมเล็กๆ ในเครื่อง
ความลับอย่างแรกครับ echo ls cat ทุกคำสั่งจริงๆ คือ ไฟล์โปรแกรมเล็กๆ ที่ติดมากับเครื่องทุกเครื่อง
ลองดูว่าไฟล์ ls อยู่ที่ไหนในเครื่อง ใช้ which
which lsจะได้ path ประมาณ /bin/ls หรือ /usr/bin/ls นั่นแหละ ครับคือไฟล์ ls ตัวจริงที่รันให้เราทุกครั้ง
ทำไมพิมพ์แค่ ls เครื่องก็เจอ
คำถามดีครับ ถ้า ls อยู่ที่ /bin/ls เราต้องพิมพ์ path เต็มทุกครั้งหรือเปล่า จริงๆ ไม่ต้อง พิมพ์ ls เฉยๆ เครื่องก็เจอ
คำตอบคือ เครื่องเก็บ list ของร้านที่จะวิ่งไปหาของให้เรา ทุก ครั้งที่พิมพ์คำสั่ง เครื่องจะไล่ดูทีละร้านตามลำดับ มีไฟล์ชื่อตรงกันไหม เจอที่แรก ก็หยุดรันให้
list นี้ฝรั่งเรียก $PATH เป็น setting ของเครื่อง ทุกเครื่องมี ติดมาให้แล้ว
ดู $PATH ของเครื่องตัวเอง
ลองดูว่าเครื่องเรามี list ร้านอะไรบ้าง พิมพ์
echo $PATHจะได้ที่อยู่หลายๆ อันต่อกันด้วยเครื่องหมาย : เช่น
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinแต่ละที่อยู่คือ folder ที่เครื่องจะไปไล่หาคำสั่งให้ ไล่ตามลำดับซ้ายไปขวา เจอ ที่แรกก็หยุด
เวลาเจอ "command not found"
ถ้าพิมพ์คำสั่งแล้ว Terminal ตอบกลับว่า
command not found: <ชื่อคำสั่ง>แปลว่า เครื่องไล่หาทุกร้านใน $PATH แล้วไม่เจอไฟล์ชื่อนี้ มี 2 สาเหตุหลัก
- พิมพ์ผิด เช็คตัวสะกดให้ละเอียด ตัวพิมพ์ใหญ่/เล็กต้องตรง
- ยังไม่ได้ลงโปรแกรมตัวนั้น ต้องลงก่อนถึงจะใช้ได้
สรุปบทนี้
- คำสั่งทุกตัวจริงๆ คือไฟล์โปรแกรมเล็กๆ ที่อยู่ในเครื่อง
which <คำสั่ง>ดูว่าไฟล์ของคำสั่งนั้นเก็บอยู่ที่ไหน$PATHlist ร้านที่เครื่องเข้าไปวิ่งหาคำสั่งให้echo $PATHดู list ร้าน- "command not found" หาทุกร้านแล้วไม่เจอ มักเพราะพิมพ์ผิด หรือยังไม่ได้ติดตั้งโปรแกรม
บทสุดท้ายเป็น capstone "ก่อนกด Enter ทุกครั้ง" รวมทุกบทมาใช้ จริง อ่านคำสั่งแปลกๆ ที่เจอจาก YouTube เพื่อน หรือ AI ออกก่อนกด Enter