ฉันอยู่ตรงไหน? Filesystem เป็นต้นไม้
เข้าใจว่า filesystem คือต้นไม้ root เดียว เรียน pwd/ls/cd และใช้ ~ กับ / ให้คล่องเพื่อเดินไปไหนมาไหนในเครื่องตัวเอง
บทที่แล้วเห็น prompt บอกว่าอยู่ที่ ~/projects/vibe-code แต่ที่ว่า ~/projects/vibe-code นี้คืออะไรกันแน่ อยู่ตรงไหนของคอมพิวเตอร์ แล้วถ้าอยากย้ายไปที่อื่นทำยังไง
บทนี้ตอบคำถามนั้นด้วย mental model เดียวจบเรื่อง filesystem คือต้นไม้ พร้อมเครื่องมือ 3 อย่างที่ใช้เดินในต้นไม้คือ pwd, ls, และ cd
Filesystem คือต้นไม้กลับหัว
ไฟล์กับ folder ในเครื่องไม่ได้อยู่ระเกะระกะ ทุกอย่างอยู่ในโครงสร้าง hierarchy (มีลำดับชั้น) เหมือนต้นไม้ที่มี “ราก” อยู่บนสุด แล้วแตกกิ่งก้านออกไปเป็น folder ย่อยๆ ข้างใน folder ก็มี folder ซ้อนได้อีก ลงลึกได้เรื่อยๆ
รากของต้นไม้บน Mac กับ Linux คือเครื่องหมาย / (slash) เรียกว่า root ทุก path เริ่มจากตรงนี้ ไม่มีที่ไหนอยู่นอก root (Windows ต่างออกไป มี C:, D: เหมือนมีหลายต้นไม้ แต่ใน Git Bash กับ WSL จะถูกจำลองให้มีต้นเดียวเหมือน Unix)
3 command ที่ต้องจำให้ได้
pwd(print working directory) = ฉันอยู่ตรงไหน แสดง path เต็มของ folder ที่ยืนอยู่ปัจจุบันls(list) = ข้างในนี้มีอะไร แสดงรายชื่อไฟล์กับ folder ที่อยู่ตรงที่ยืนcd <ที่ไหน>(change directory) = เดินไปที่อื่น ย้ายตำแหน่งปัจจุบันไป folder ใหม่
3 ตัวนี้คือ 80% ของการใช้งาน terminal ในชีวิตจริง จำให้ได้ก่อน ที่เหลือค่อยเรียนตอนเจอ
ลองเดินในต้นไม้ดู
ด้านล่างคือ filesystem จำลอง ซ้ายคือต้นไม้ ขวาคือ terminal ลองคลิก folder ต่างๆ ในต้นไม้ดู prompt ด้านขวาจะเปลี่ยนตาม ลอง pwd ดูว่าอยู่ไหน ลอง ls ดูว่าที่นี่มีอะไรบ้าง แล้วลองกด hidden files ดูไฟล์ที่ถูกซ่อนอยู่
cd เข้าไป ใช้ปุ่มข้างล่างรัน pwd/ls/cd ..2 ตัวย่อที่ใช้ทุกวัน: ~ กับ /
username ของแต่ละเครื่องไม่เหมือนกัน ถ้าต้องพิมพ์ /Users/krish/Documents ทุกครั้งจะไม่สะดวก shell เลยมีตัวย่อไว้ให้ใช้
~(tilde) = home ของคุณ จะ expand เป็น/Users/ชื่อคุณบน Mac หรือ/home/ชื่อคุณบน Linux โดยอัตโนมัติ/= root จุดบนสุดของต้นไม้
ตอนเปิด terminal ใหม่ shell จะพาไปอยู่ที่ ~ เป็น default และถ้าพิมพ์ cd เฉยๆ ไม่ใส่ argument shell ก็จะตีความเป็น cd ~ พาไปที่ home
Hidden files: ไฟล์ที่ชื่อขึ้นต้นด้วยจุด
ไฟล์หรือ folder ที่ชื่อขึ้นต้นด้วย . (dot) อย่าง .git, .env, .zshrc, .gitignore จะ ถูก shell ซ่อนไว้ ไม่ปรากฏเวลาสั่ง ls ปกติ
อยากเห็นต้องใช้ ls -a (a ย่อมาจาก all) ถึงจะโชว์ครบ
เหตุผลที่ config file ส่วนใหญ่ชื่อขึ้นต้นด้วย . คือเพื่อไม่ให้รก เวลาเปิด folder project มองแต่ไฟล์งานจริงได้ ไม่ต้องปนกับไฟล์ตั้งค่า
สรุป
- Filesystem คือต้นไม้ root อยู่บนสุดที่
/ pwdบอกที่อยู่,lsบอกว่าที่นี่มีอะไร,cdเดินไปที่อื่น~= home,/= root- ไฟล์ชื่อขึ้นต้นด้วย
.ถูกซ่อน ใช้ls -aดู - กด
Tabให้ shell เติมชื่อให้ เร็วและไม่สะกดผิด
ตอนนี้เดินในต้นไม้ได้คล่องแล้ว แต่พอเริ่มต้องพิมพ์ path ที่ซับซ้อนขึ้น จะเจอคำถามว่าทำไมต้องใส่ . หรือ .. นำหน้า อย่าง ./script.sh, ../config, หรือ ~/projects/vibe-code บทต่อไปจะเจาะลึกเรื่อง path absolute กับ relative ให้พิมพ์ได้ถูกในทุกสถานการณ์