โครงสร้างไดเรกทอรี (Linux Directory Structure) ตามมาตรฐาน FHS (Filesystem Hierarchy Standard) ระบบ Linux

โครงสร้างไดเรกทอรี (Linux Directory Structure) ตามมาตรฐาน FHS (Filesystem Hierarchy Standard) ระบบ Linux จะจัดเก็บไฟล์ประเภทต่างๆ แยกตามหน้าที่ของมันอย่างชัดเจน โดยทุกอย่างจะแตกกิ่งก้านออกมาจาก Root Directory (/)

นี่คือรายละเอียดเจาะลึกของแต่ละ Path (โฟลเดอร์) สำคัญใน Linux ว่าใช้เก็บไฟล์อะไรบ้างครับ:

📁 1. กลุ่มระบบพื้นฐาน (System Core)

  • / (Root): จุดเริ่มต้นของทุกสิ่งใน Linux ทุกโฟลเดอร์และอุปกรณ์ทั้งหมด (รวมถึงไดรฟ์อื่นๆ) ต้องมาเชื่อมต่อ (Mount) อยู่ภายใต้ไดเรกทอรีนี้
  • /boot: เก็บไฟล์ที่จำเป็นในการบูตเครื่อง เช่น Linux Kernel, รหัสควบคุมการบูต (GRUB) และไฟล์ Initial RAM Disk (initrd)
  • /etc: ย่อมาจาก Editable Text Configuration เป็นที่เก็บไฟล์ตั้งค่า (Configuration) ของระบบและโปรแกรมทั้งหมด ไฟล์ในนี้มักเป็นข้อความธรรมดา (Text File) ที่ผู้ดูแลระบบสามารถเปิดแก้ไขได้ เช่น ตั้งค่าเน็ตเวิร์ก หรือรหัสผ่าน

⚙️ 2. กลุ่มคำสั่งและโปรแกรมปฏิบัติการ (Binaries)

  • /bin: ย่อมาจาก User Binaries เก็บคำสั่งพื้นฐานของระบบที่จำเป็นต้องใช้ตอนบูตเครื่อง หรือตอนเข้าโหมดกู้คืนระบบ เช่น ls, cp, mv, ping (ผู้ใช้ทุกคนรวมถึงกูรูและมือใหม่สามารถเรียกใช้ได้)
  • /sbin: ย่อมาจาก System Binaries เก็บคำสั่งสำหรับผู้ดูแลระบบ (Root/Admin) ใช้ในการตั้งค่าระบบ ซ่อมแซม หรือบำรุงรักษา เช่น iptables, reboot, fdisk (ผู้ใช้ทั่วไปมักจะไม่มีสิทธิ์รันคำสั่งในนี้โดยตรง)
  • /usr: ย่อมาจาก Universal System Resources (หรือ User System Resources) เป็นที่เก็บโปรแกรมและไฟล์ส่วนใหญ่ที่ผู้ใช้ติดตั้งเพิ่ม ภายในจะมีโครงสร้างย่อยคล้ายตัว Root เอง เช่น:
    • /usr/bin: โปรแกรมทั่วไปที่ผู้ใช้ติดตั้งเพิ่ม (เช่น python, curl, git)
    • /usr/sbin: โปรแกรมสำหรับ Admin ที่ติดตั้งเพิ่ม
    • /usr/lib: ไลบรารีซอฟต์แวร์สำหรับโปรแกรมใน /usr/bin

💾 3. กลุ่มข้อมูลผู้ใช้และพื้นที่ทำงาน (User Data & Runtime)

  • /home: พื้นที่เก็บไฟล์ส่วนตัวของผู้ใช้งานทั่วไป (ยกเว้น Root) แต่ละคนจะได้โฟลเดอร์ย่อยเป็นชื่อตัวเอง เช่น /home/somchai ข้างในจะเก็บเอกสาร เพลง ภาพ รวมถึงไฟล์ตั้งค่าส่วนตัวของโปรแกรมต่างๆ
  • /root: โฟลเดอร์ส่วนตัวของผู้ดูแลระบบสูงสุด (Superuser/Root) ถูกแยกออกมาจาก /home เพื่อความปลอดภัยและเพื่อให้ระบบยังเข้าถึงบัญชี Root ได้แม้ดิสก์ส่วนของ /home จะมีปัญหา
  • /tmp: ย่อมาจาก Temporary Files ใช้เก็บไฟล์ชั่วคราวที่ระบบหรือโปรแกรมสร้างขึ้นระหว่างทำงาน ข้อมูลในนี้มักจะถูกลบโดยอัตโนมัติเมื่อรีสตาร์ทเครื่อง

🔄 4. กลุ่มข้อมูลที่มีการเปลี่ยนแปลงและไฟล์ระบบเสมือน (Dynamic & Virtual)

  • /var: ย่อมาจาก Variable Files เก็บไฟล์ที่ขนาดเปลี่ยนแปลงตลอดเวลาระหว่างที่ระบบรันอยู่ เช่น:
    • /var/log: ไฟล์บันทึกเหตุการณ์ของระบบ (Log files) สำคัญมากในการเช็กอาการเสีย
    • /var/mail: กล่องจดหมายอีเมลของระบบ
    • /var/www: พื้นที่เก็บไฟล์เว็บไซต์สำหรับ Web Server (เช่น Apache, Nginx)
  • /dev: ย่อมาจาก Device Files เก็บไฟล์ที่เป็นตัวแทนของอุปกรณ์ฮาร์ดแวร์ในเครื่อง (ตามแนวคิด Everything is a file) เช่น /dev/sda คือฮาร์ดดิสก์ลูกแรก, /dev/urandom ตัวสร้างเลขสุ่ม
  • /proc & /sys: ไดเรกทอรีเสมือน (Virtual Filesystem) ไม่ได้กินพื้นที่บนดิสก์จริง แต่ถูกสร้างขึ้นใน RAM โดย Kernel เพื่อรายงานสถานะของระบบ เช่น ข้อมูล CPU, หน่วยความจำ หรือสถานะของโปรเซสที่กำลังทำงานอยู่

🔌 5. กลุ่มอุปกรณ์เชื่อมต่อภายนอก (Mount Points)

  • /media: จุดเชื่อมต่ออัตโนมัติสำหรับอุปกรณ์ภายนอกที่ถอดเสียบได้ (Removable Media) เช่น เมื่อเสียบ USB Flash Drive หรือแผ่น CD ระบบจะสร้างโฟลเดอร์ในนี้ให้อัตโนมัติ (เช่น /media/usb)
  • /mnt: ย่อมาจาก Mount เป็นพื้นที่ว่างสำหรับให้ผู้ดูแลระบบทำการเชื่อมต่อ (Mount) ดิสก์หรือระบบไฟล์อื่นเข้ามาด้วยตัวเองแบบชั่วคราว หรือจัดการไดรฟ์เน็ตเวิร์ก

ทั้ง 4 โดเรกทอรีนี้ (/bin, /sbin, /usr/bin, /usr/sbin) เป็นที่เก็บ ไฟล์คำสั่งหรือโปรแกรมที่สั่งรันได้ (Executable Binaries) เหมือนกัน แต่ถูกแยกออกจากกันตาม “ใครเป็นคนใช้” และ “ความจำเป็นต่อระบบ” ครับ

สรุปความแตกต่างแบบเข้าใจง่ายๆ ได้ด้วยตารางนี้เลยครับ:

Pathใครเป็นคนใช้?จำเป็นตอนกู้คืนระบบ (Single-user mode) ไหม?ตัวอย่างคำสั่งข้างใน
/binทุกคน (ผู้ใช้ทั่วไป + Admin)จำเป็นมาก (ระบบขาดไม่ได้)ls, cp, mv, cat, mkdir
/sbinAdmin / Root เท่านั้นจำเป็นมาก (ใช้กู้ระบบ/ตั้งค่าฮาร์ดแวร์)fdisk, reboot, iptables, fsck
/usr/binทุกคน (ผู้ใช้ทั่วไป + Admin)ไม่จำเป็น (เป็นโปรแกรมใช้งานทั่วไป)python, git, curl, vim, gcc
/usr/sbinAdmin / Root เท่านั้นไม่จำเป็น (เป็นบริการของระบบ)sshd, nginx, cron, chroot

เจาะลึกความหมายของแต่ละตัว

1. /bin (User Binaries – พื้นฐานของทุกคน)

  • แนวคิด: เก็บคำสั่งพื้นฐานที่สุดที่ทุกคนในเครื่องต้องใช้
  • ความสำคัญ: คำสั่งในนี้จะถูกใช้ตั้งแต่ตอนที่ระบบเริ่มบูต หรือในเวลาที่ระบบเกิดพังแล้วต้องเข้าโหมดกู้คืน (Single-user mode) แม้จะยังไม่ได้เชื่อมต่อฮาร์ดดิสก์ลูกอื่นๆ คำสั่งในนี้ก็ต้องพร้อมทำงานเสมอ

2. /sbin (System Binaries – เครื่องมือช่างสำหรับ Admin)

  • แนวคิด: คล้ายกับ /bin แต่จำกัดไว้สำหรับผู้ดูแลระบบ (Root) เท่านั้น ตัวอักษร “s” ย่อมาจาก System
  • ความสำคัญ: เก็บคำสั่งที่ใช้จัดการระบบในระดับลึก เช่น การจัดพาร์ติชันดิสก์ การเปิด-ปิดเครื่อง หรือการกู้คืนระบบไฟล์ หากผู้ใช้ทั่วไปสั่งรันคำสั่งในนี้ มักจะขึ้นเตือนว่าไม่มีสิทธิ์ (Permission denied) หรือหาคำสั่งไม่เจอ

3. /usr/bin (User Programs – แอปพลิเคชันทั่วไป)

  • แนวคิด: เก็บโปรแกรมและคำสั่งทั่วไปที่ผู้ใช้ติดตั้งเพิ่มเข้ามาทีหลัง หรือโปรแกรมที่ไม่เกี่ยวข้องกับการบูตระบบ
  • ความสำคัญ: เป็นโฟลเดอร์ที่ใหญ่มากและมีจำนวนคำสั่งเยอะที่สุดในเครื่อง เพราะพวกเครื่องมือพัฒนาซอฟต์แวร์ เกม หรือโปรแกรมอรรถประโยชน์ต่างๆ (Utilities) ที่ไม่ได้คอขาดบาดตายต่อการบูตเครื่องจะมาอยู่ที่นี่ทั้งหมด

4. /usr/sbin (Non-essential System Binaries – บริการเบื้องหลังของ Admin)

  • แนวคิด: เก็บคำสั่งและโปรแกรมสำหรับผู้ดูแลระบบ (Admin) ที่ไม่จำเป็นต้องใช้ตอนบูตเครื่อง
  • ความสำคัญ: ส่วนใหญ่โปรแกรมในนี้จะเป็น Daemon (บริการที่ทำงานเบื้องหลัง) หรือโปรแกรมฝั่งเซิร์ฟเวอร์ เช่น ตัวจัดการระบบเน็ตเวิร์กขั้นสูง, เว็บเซิร์ฟเวอร์, หรือบริการแชร์ไฟล์ ซึ่งจะถูกเรียกใช้หลังจากระบบหลักบูตเสร็จสมบูรณ์แล้วเท่านั้น

💡 เกร็ดความรู้เพิ่มเติมสำหรับ Linux ยุคใหม่ (Modern Linux):
ใน Linux แจกจ่ายยุคใหม่ๆ (เช่น Ubuntu, Fedora, CentOS รุ่นใหม่ๆ) ได้ปรับโครงสร้างที่เรียกว่า “UsrMerge” เพื่อความเรียบง่าย โดยระบบจะรวมโฟลเดอร์ /bin ไปไว้ที่ /usr/bin และรวม /sbin ไปไว้ที่ /usr/sbin แล้วสร้างลิงก์ทางลัด (Symlink) เอาไว้ ทำให้ในปัจจุบัน ไม่ว่าจะเรียกจาก Path ไหน ก็จะวิ่งไปที่เดียวกันครับ

ถ้าคุณอยากลองใช้งานคำสั่งใน Path เหล่านี้ เลือกหัวข้อที่สนใจต่อได้เลยครับ:

ขอดู คำสั่งเช็กว่าคำสั่งที่เราใช้ อยู่ใน Path ไหน (เช่น using which หรือ whereis )อธิบายวิธี เพิ่ม Path ใหม่เข้าในระบบ ($PATH variable) เวลาติดตั้งโปรแกรมเอง