บทที่ 3 · อ่าน 6 นาที
อ่านที่อยู่ไฟล์เป็น
ที่อยู่ของไฟล์เขียนได้หลายแบบ absolute path เริ่มด้วย / และ relative path ที่ขึ้นกับตำแหน่ง บวกกับ 3 เครื่องหมายลัดที่เจอบ่อย ~ . ..
บทที่แล้วเราใช้ cd ตามด้วยชื่อ folder เช่น cd Photos บทนี้มาเจาะ ที่อยู่ของ folder กับไฟล์ ที่จริงเขียนได้หลายแบบ พอรู้ครบจะอ่าน path ตรงไหนก็ออก
ที่อยู่ในเครื่อง เหมือนที่อยู่บ้าน
ลองนึกตอนเราบอกที่อยู่บ้านให้คนอื่นฟัง มี 2 แบบหลัก
- ที่อยู่เต็ม "บ้านเลขที่ 123 ซอยอินทามระ 5 ถนนสุทธิสาร แขวง สามเสนใน เขตพญาไท กรุงเทพ" ใครฟังก็เดินทางมาได้ จะอยู่ที่ไหนของโลกก็เข้ามาเจอ
- ทางลัด "เดินจากตรงนี้ออกไปสุดซอย แล้วเลี้ยวขวา" ใช้ได้ เฉพาะคนที่อยู่ใกล้ๆ เราตอนนี้
ใน Terminal มี 2 แบบเหมือนกัน ฝรั่งเรียก absolute path กับ relative path
ที่อยู่เต็ม = absolute path
ที่อยู่เต็มใน Mac/Linux ขึ้นต้นด้วย / เสมอ เช่น /home/me/Photos หรือ /Users/krish/Documents
/ ตัวแรกสุดคือ จุดเริ่มต้นของทุกกล่องในเครื่อง ฝรั่งเรียก root (รูท) แปลว่าราก กล่องทุกอันในเครื่องไล่ย้อนขึ้นไปก็จบที่นี่
ข้อดีของ absolute path คือ ใช้ได้ทุกที่ ไม่สนว่าตอนนี้เปิดกล่องไหนอยู่ เพราะบอกทางครบจาก root เลย
ทางลัด = relative path
relative path คือที่อยู่ที่ขึ้นกับว่าตอนนี้เปิดกล่องไหนอยู่ ไม่ขึ้นต้นด้วย /
ตัวอย่างครับ ตอนนี้เปิดบ้านอยู่ (/home/me) พิมพ์ cd Photos จะเปิดเข้า /home/me/Photos เพราะ Terminal ตีความว่า "Photos นับจากกล่องที่เปิดอยู่ตอนนี้"
แต่ถ้าไปอยู่ที่อื่น เช่น /Users/somebody-else พิมพ์ cd Photos เหมือนกัน จะเข้า /Users/somebody-else/Photos แทน คนละที่กันไปเลย
3 เครื่องหมายลัดที่เจอบ่อย
นอกจากชื่อ folder ตรงๆ Terminal ยังเข้าใจเครื่องหมายลัดอีก 3 ตัว
~ บ้านของเรา
~ (ตัวหนอน) เป็นทางลัดของ home folder
~/Photos = /home/me/Photos (Linux) หรือ /Users/me/Photos (Mac) สั้นกว่าเยอะ ใช้ได้ทุกที่ในเครื่อง ไม่ขึ้น กับกล่องที่เปิดอยู่
. กล่องที่เปิดอยู่ตอนนี้
. (จุดเดียว) หมายถึงกล่องที่เปิดอยู่ตอนนี้ ใช้ตอนอยากบอก Terminal ชัดๆ ว่า "ตรงนี้แหละ ไม่ใช่ที่อื่น"
เจอบ่อยตอนรันสคริปต์เอง เช่น ./hello.sh = "ไฟล์ hello.sh ในกล่อง ที่เปิดอยู่นี่แหละ"
.. ออกไปด้านนอก 1 ชั้น
.. (จุดสองจุด) คือการออกจากกล่องปัจจุบันไปกล่องใบใหญ่ที่ครอบอยู่ เหมือนแกะของขวัญถอยทีละชั้น
ตัวอย่างครับ เปิด /home/me/Photos อยู่ พิมพ์ cd .. จะกลับขึ้นไป /home/me
ซ้อนกันได้ด้วย cd ../../ ขึ้น 2 ชั้น
เมื่อไรใช้ absolute เมื่อไรใช้ relative
หลักง่ายๆ ที่คนทั่วไปใช้กัน
- ไปไกลข้ามเครื่อง ไม่ได้อยู่ใกล้ๆ ใช้ absolute (ชี้ชัดกว่า)
- เดินใกล้ๆ ย่านเดิม ใช้ relative (สั้นและพิมพ์เร็วกว่า)
ใช้งานจริงๆ คนใช้ relative เยอะกว่า เพราะส่วนใหญ่ทำงานในกล่องเดียวหรือใกล้ๆ ส่วน absolute เก็บไว้ใช้ตอนต้องชี้ตำแหน่งให้แม่น เช่นในสคริปต์หรือใน config
สรุปบทนี้
- path คือ "ที่อยู่" ของ folder กับไฟล์ มี 2 แบบ
- absolute เริ่มด้วย
/เช่น/home/me/Photosใช้ได้ทุกที่ - relative ไม่เริ่มด้วย
/ขึ้นกับกล่องที่เปิดอยู่ ~บ้านของเรา.กล่องที่เปิดอยู่ตอนนี้..ออกไปด้านนอก 1 ชั้น
จบช่วงแรกแล้วครับ เราเปิด Terminal เป็น เดินไปมาได้ อ่าน path ออกทุกแบบ บทต่อไปเข้าเรื่อง การจัดการไฟล์ สร้าง คัดลอก ย้าย ลบ พวกนี้ Terminal ทำได้เร็วกว่าคลิกเยอะ