Linux Fundamentals
File System Structure
อธิบายโครงสร้างระบบไฟล์ Linux ตั้งแต่ราก / และไดเรกทอรีสำคัญ เช่น /home, /etc, /var พร้อมความหมายของ . และ .. เพื่อให้อ้างอิงตำแหน่งได้อย่างถูกต้อง
1. ที่มาและความต้องการ: ความสับสนเรื่องที่อยู่ของไฟล์ใน Linux
เมื่อก้าวเข้าสู่โลกของ Linux ผู้ใช้ส่วนใหญ่มักค้นหาไดรฟ์ C: หรือ D: ที่คุ้นเคย แต่ในหน้าต่างคำสั่ง คุณจะพบเพียงเครื่องหมายทับ `/` เดี่ยวๆ และชื่อโฟลเดอร์ภาษาอังกฤษสั้นๆ เช่น `etc`, `var`, `bin` หรือ `home` หากไม่เข้าใจโครงสร้างที่เก็บไฟล์ คุณจะไม่รู้เลยว่าตัวเองกำลังทำงานอยู่ที่ใด และอาจเผลอไปแก้ไขหรือลบไฟล์ของระบบจนระบบปฏิบัติการเสียหาย การเข้าใจแผนผังระบบไฟล์จึงเป็นก้าวสำคัญที่สุดก่อนเริ่มพิมพ์คำสั่งใดๆ
- Linux ไม่มีไดรฟ์ C: หรือ D: แบบ Windows แต่อยู่ใต้ระบบไฟล์เดียวกันทั้งหมด
- อุปกรณ์เก็บข้อมูลทุกตัว (Hard Drive, SSD, Flash Drive) จะถูกนำมาติดตั้ง (mount) เข้าเป็นกิ่งก้านในต้นไม้นี้
- การเข้าใจบทบาทของแต่ละโฟลเดอร์ช่วยป้องกันการแก้ไขไฟล์ระบบโดยไม่ตั้งใจ
2. แบบจำลองความคิด: ต้นไม้เดี่ยวที่เริ่มจากราก / และจุดนำทาง . กับ ..
โครงสร้างระบบไฟล์ของ Linux เรียกว่า Hierarchical File System ซึ่งมีลักษณะเหมือน "ต้นไม้คว่ำ" จุดสูงสุดของต้นไม้เรียกว่า **Root Directory** เขียนแทนด้วยเครื่องหมาย `/` เพียงตัวเดียว ไม่มีอะไรอยู่เหนือ `/` อีกแล้ว ทุกโฟลเดอร์และทุกไฟล์ล้วนแตกกิ่งก้านสาขาลงมาจากจุดนี้ นอกจากชื่อโฟลเดอร์แล้ว ในทุกๆ ไดเรกทอรียังมีสัญลักษณ์สำคัญ 2 ตัวที่ระบบสร้างไว้เสมอ: - `.` (จุดเดียว) หมายถึง **ไดเรกทอรีปัจจุบัน** ที่เรากำลังยืนอยู่ - `..` (สองจุด) หมายถึง **ไดเรกทอรีแม่ (Parent Directory)** ที่อยู่เหนือขึ้นไป 1 ระดับ
ลองทำนายผลลัพธ์
สมมุติว่าปัจจุบันคุณยืนทำงานอยู่ที่ไดเรกทอรี /home/student หากคุณอ้างอิงตำแหน่งไปยัง .. คุณคิดว่าระบบจะมองเห็นโฟลเดอร์ใด? (เฉลย: ระบบจะชี้ไปยัง /home เพราะ .. หมายถึงโฟลเดอร์แม่ที่อยู่เหนือขึ้นไปหนึ่งขั้นจากตำแหน่งที่คุณยืนอยู่เสมอ)
โครงสร้างแบบต้นไม้เดี่ยว: ทุกเส้นทางแตกแขนงออกมาจาก root (/) เท่านั้น
3. กายวิภาคของไดเรกทอรีหลัก (Filesystem Hierarchy Standard)
Linux มีมาตรฐานที่เรียกว่า FHS (Filesystem Hierarchy Standard) กำหนดว่าโฟลเดอร์ชื่อใดควรใช้เก็บอะไร เพื่อให้โปรแกรมและผู้ดูแลระบบทำงานร่วมกันได้อย่างเป็นระเบียบ:
| ไดเรกทอรี | หน้าที่และการใช้งานจริง | ข้อควรระวัง |
|---|---|---|
| / | Root directory รากของทั้งระบบ | จุดสูงสุด ห้ามลบหรือย้าย |
| /home | พื้นที่ทำงานของผู้ใช้ทั่วไป (เช่น /home/student) | ปลอดภัยสำหรับสร้าง แก้ไข และลบไฟล์งานของคุณ |
| /root | โฮมไดเรกทอรีของผู้ดูแลระบบสูงสุด (Superuser) | แยกต่างหากจาก /home เพื่อความปลอดภัยของระบบ |
| /etc | ไฟล์การตั้งค่าคอนฟิก (Configuration) ของทั้งระบบ | แก้ไขด้วยความระมัดระวัง เพราะส่งผลต่อการทำงานของระบบ |
| /var | ข้อมูลที่มีขนาดเปลี่ยนไปเรื่อยๆ (Variable data) เช่น log, cache | มักใช้ตรวจสอบไฟล์บันทึกการทำงานใน /var/log |
| /tmp | ไฟล์ชั่วคราวที่โปรแกรมต่างๆ สร้างขึ้น | ไฟล์ในนี้อาจถูกระบบลบโดยอัตโนมัติเมื่อรีสตาร์ตเครื่อง |
| /bin, /usr/bin | โปรแกรมและคำสั่งมาตรฐานของระบบ (Binary) | เก็บไฟล์รันคำสั่ง เช่น ls, cp, rm, bash |
4. พื้นผิวเปรียบเทียบ: Absolute Path กับ Relative Path
การระบุตำแหน่งไฟล์ในระบบ Linux มี 2 รูปแบบ ซึ่งให้ผลลัพธ์ต่างกันอย่างสิ้นเชิงเมื่อตำแหน่งปัจจุบันของคุณเปลี่ยนไป:
เปรียบเทียบการอ้างอิงตำแหน่ง: Absolute Path vs Relative Path
ข้อสังเกตสำคัญ: Absolute Path จะเริ่มต้นด้วยเครื่องหมาย / เสมอและชี้ไปยังเป้าหมายเดิมเสมอไม่ว่าคุณจะอยู่ที่ใด ส่วน Relative Path จะไม่ขึ้นต้นด้วย / และต้องตีความร่วมกับตำแหน่งที่คุณยืนอยู่ ณ ขณะนั้น
ไม่มี / นำหน้า ขึ้นกับตำแหน่งปัจจุบัน
มี / นำหน้าเสมอ ชี้จุดเดิมแน่นอน
กฎเหล็กเรื่องระบบไฟล์ที่คุณต้องจำ
รากเดียวทั้งระบบ
ทุกสิ่งใน Linux เริ่มต้นที่ราก / เพียงตัวเดียว ไม่มี drive letter แยก
พื้นที่ปลอดภัยของผู้ใช้
โฟลเดอร์ /home คือพื้นที่ปลอดภัยของคุณ ส่วน /etc และ / เป็นพื้นที่ระบบ
จุดนำทางในระบบ
จุดเดียว (.) คือตำแหน่งปัจจุบัน และสองจุด (..) คือไดเรกทอรีแม่เหนือขึ้นไป 1 ชั้นเสมอ
ความแน่นอนของเส้นทาง
หากต้องการความแม่นยำไม่ให้ผิดพลาดในสคริปต์ ให้เลือกใช้ Absolute Path
5. ตรวจสอบความเข้าใจและก้าวต่อไป
ทดสอบความเข้าใจโครงสร้างระบบไฟล์ Linux
สัญลักษณ์ใดคือจุดเริ่มต้นสูงสุด (Root Directory) ของระบบไฟล์ทั้งหมดใน Linux?
หากต้องการค้นหาหรือตรวจสอบไฟล์การตั้งค่าคอนฟิก (Configuration) ของระบบ ควรเข้าไปดูที่ไดเรกทอรีใด?
สัญลักษณ์พิเศษที่ใช้แทน 'ไดเรกทอรีแม่ (Parent Directory)' ซึ่งอยู่เหนือตำแหน่งปัจจุบันขึ้นไป 1 ระดับ คืออะไร?
ไดเรกทอรีใดที่มีไว้สำหรับเก็บไฟล์ชั่วคราว และระบบอาจล้างไฟล์ทิ้งโดยอัตโนมัติเมื่อเปิดเครื่องใหม่?
- ระบบไฟล์ Linux เป็นโครงสร้างต้นไม้เดี่ยวที่แตกกิ่งก้านสาขาออกจากราก /
- ไดเรกทอรี /home เก็บงานของผู้ใช้ ขณะที่ /etc เก็บไฟล์คอนฟิกระบบ และ /var เก็บ log
- จุดเดียว (.) แทนตำแหน่งปัจจุบัน และสองจุด (..) แทนตำแหน่งแม่เหนือขึ้นไป 1 ชั้น
- ก้าวต่อไป: ในบท 'absolute-vs-relative-path' เราจะนำความเข้าใจเรื่องราก / และจุด ./.. ไปฝึกเขียน path ระบุเป้าหมายอย่างละเอียด โดยบทนี้สมมุติว่าคุณเข้าใจตำแหน่งของ / และความหมายของ .. แล้ว