หากคุณเคยสงสัยว่าทำไมระบบปฏิบัติการ Linux หรือ Unix-like ถึงต้องมีโฟลเดอร์ชื่อแปลก ๆ อย่าง /etc, /usr, /var หรือ /srv และทำไมการกระจายตัวของ Linux ทุกค่าย (ไม่ว่าจะเป็น Ubuntu, Red Hat, Debian หรือ Rocky Linux) ถึงจัดวางโครงสร้างไว้คล้ายกันไปหมด คำตอบคือมาตรฐาน FHS (Filesystem Hierarchy Standard)
FHS คืออะไร และมีจุดเริ่มต้นอย่างไร?
FHS (Filesystem Hierarchy Standard) คือข้อกำหนดมาตรฐานที่ระบุว่า ไดเรกทอรี (Directory) และไฟล์ต่าง ๆ ในระบบปฏิบัติการกลุ่ม Linux และ Unix-like ควรจะถูกจัดวางไว้ที่ไหน และแต่ละโฟลเดอร์มีหน้าที่อะไร
ประวัติความเป็นมา
- สิงหาคม 1993 (จุดเริ่มต้นในชื่อ FSSTND): ในยุคแรกเริ่ม Linux แต่ละ Distribution ต่างคนต่างจัดวางไฟล์ตามใจชอบ ทำให้ผู้พัฒนาซอฟต์แวร์ทำงานลำบากมาก จึงมีการจับมือกันสร้างมาตรฐานชื่อ FSSTND (File System Standard) เพื่อใช้ใน Linux
- ปี 1996 (เปลี่ยนชื่อเป็น FHS): มาตรฐานนี้ถูกขยายขอบเขตให้ครอบคลุมระบบปฏิบัติการ Unix-like อื่น ๆ (เช่น BSD) จึงเปลี่ยนชื่อเป็น FHS (Filesystem Hierarchy Standard)
- ปัจจุบัน: FHS อยู่ภายใต้การดูแลของ The Linux Foundation โดยเวอร์ชันสำคัญที่มีการใช้งานแพร่หลายคือ FHS 2.3 (ปี 2004) และ FHS 3.0 (ปี 2015)
แนวคิดหลักในการแบ่งประเภทไฟล์ตาม FHS
FHS แบ่งไฟล์ออกเป็น 2 มิติหลัก เพื่อช่วยให้ผู้ดูแลระบบ (Admin) บริหารจัดการดิสก์และการสำรองข้อมูล (Backup) ได้ง่ายขึ้น
- Shareable vs. Unshareable
- Shareable: ไฟล์ที่แชร์ให้เครื่องอื่นในเครือข่ายใช้ร่วมกันได้ (เช่น เอกสารผู้ใช้, โปรแกรมใน
/usr) - Unshareable: ไฟล์เฉพาะเครื่องนั้นๆ ห้ามแชร์ (เช่น การตั้งค่าเครือข่ายใน
/etc, ไดรเวอร์อุปกรณ์)
- Shareable: ไฟล์ที่แชร์ให้เครื่องอื่นในเครือข่ายใช้ร่วมกันได้ (เช่น เอกสารผู้ใช้, โปรแกรมใน
- Static vs. Variable
- Static: ไฟล์คงที่ ไม่เปลี่ยนหากไม่มีมนุษย์ไปแก้ไขหรืออัปเดตระบบ (เช่น คำสั่งไบนารี, Documentation)
- Variable: ไฟล์ที่มีการเปลี่ยนแปลงตลอดเวลาโดยอัตโนมัติ (เช่น Log, Spool, Temporary files)
โครงสร้างต้นไม้ของระบบไฟล์ (Text-based Tree Structure)
จุดเริ่มต้นของทุกอย่างใน Linux คือ ไดเรกทอรีราก หรือ Root Directory (/) โดยแผนผังลำดับชั้นตามมาตรฐาน FHS มีโครงสร้างดังนี้
/ (Root Directory)
├── bin -> Essential Command Binaries (e.g., ls, cp, bash)
├── boot -> Boot Loader Files (e.g., vmlinuz, initrd, grub)
├── dev -> Device Files (e.g., sda, tty, null)
├── etc -> Host-specific System Configuration
│ ├── opt -> Configuration for add-on packages in /opt
│ └── X11 -> Configuration for the X Window System (optional)
├── home -> User Home Directories (e.g., /home/username)
├── lib -> Essential Shared Libraries & Kernel Modules
├── lib<qual> -> Alternate architecture libraries (e.g., lib64, lib32)
├── media -> Mount point for removable media (e.g., cdrom, usb)
├── mnt -> Mount point for a temporarily mounted filesystem
├── opt -> Add-on Application Software Packages
├── proc -> Virtual filesystem providing process and kernel information
├── root -> Home directory for the root user
├── run -> Run-time variable data (system state since boot)
├── sbin -> System Binaries for administration (e.g., fdisk, ip)
├── srv -> Data for services provided by this system
├── sys -> Virtual filesystem for kernel and device information
├── tmp -> Temporary files (cleared on reboot or periodically)
├── usr -> Secondary Hierarchy (User System Resources)
│ ├── bin -> Non-essential user binaries
│ ├── include -> Standard C/C++ header files
│ ├── lib -> Libraries for binaries in /usr/bin and /usr/sbin
│ ├── local -> Local hierarchy for software installed by the admin
│ ├── sbin -> Non-essential system administration binaries
│ └── share -> Architecture-independent shared data (docs, man pages)
└── var -> Variable Data Files
├── cache -> Application cache data
├── lib -> State information (e.g., database storage)
├── lock -> Lock files to track resources in use
├── log -> System and application log files
├── run -> Dynamic run-time data (legacy, symlink to /run)
├── spool -> Tasks waiting for processing (e.g., print queues, mail)
└── tmp -> Temporary files preserved between reboots
รายละเอียดและประเภทของ Root Folder (/) ทั้งหมดที่เป็นไปได้
ตารางสรุปรายละเอียดและประเภทของ Root Folder (/) ทั้งหมดที่เป็นไปได้ในระบบ Linux โดยแบ่งตามกลุ่มมาตรฐาน FHS, โฟลเดอร์เสริมในอดีต และโฟลเดอร์เฉพาะทางยุคใหม่ครับ
1. กลุ่มไดเรกทอรีมาตรฐานตามข้อกำหนด FHS (Standard FHS Directories)
| ไดเรกทอรี | ชื่อเต็ม / ความหมาย | หน้าที่และประเภทข้อมูล | หมายเหตุ |
/ | Root | จุดเริ่มต้นสูงสุดของระบบไฟล์ทั้งหมดใน Linux | – |
/bin | Essential Binaries | คำสั่งพื้นฐานที่จำเป็นสำหรับผู้ใช้ทุกคน (เช่น ls, cp, bash) | มักเป็น Symlink ไปที่ /usr/bin ใน Linux ยุคใหม่ |
/boot | Boot Files | ไฟล์สำหรับกระบวนการเปิดเครื่อง รวมถึง Kernel, initrd และ GRUB | – |
/dev | Device Files | ไฟล์ตัวแทนอุปกรณ์ฮาร์ดแวร์ต่างๆ (เช่น /dev/sda, /dev/null) | – |
/etc | Host-Specific Configuration | ไฟล์ตั้งค่าของระบบและแอปพลิเคชันทั้งหมด | – |
/home | User Home Directories | พื้นที่เก็บข้อมูลส่วนตัวและไฟล์คอนฟิกของผู้ใช้งานทั่วไป | – |
/lib | Essential Libraries | Shared Libraries (.so) ที่จำเป็นสำหรับโปรแกรมใน /bin และ /sbin | มักเป็น Symlink ไปที่ /usr/lib ใน Linux ยุคใหม่ |
/lib<qual> | Alternate Architecture Libraries | ไลบรารีตามสถาปัตยกรรม CPU (เช่น /lib64, /lib32) | – |
/media | Removable Media Mount Points | จุดเมานต์อัตโนมัติสำหรับสื่อบันทึกข้อมูลพกพา (เช่น USB, CD-ROM) | – |
/mnt | Temporarily Mounted Filesystems | จุดเมานต์ชั่วคราวสำหรับผู้ดูแลระบบเมานต์ดิสก์ภายนอกด้วยตนเอง | – |
/opt | Optional Application Software | ซอฟต์แวร์เสริมภายนอกที่ไม่ใช่แพ็กเกจหลักของ OS (เช่น Chrome, Discord) | – |
/proc | Process & Kernel Virtual Filesystem | Virtual FS แสดงสถานะกระบวนการ (Process) และเคอร์เนลในหน่วยความจำ RAM | – |
/root | Root User Home Directory | Home directory ส่วนตัวของผู้ดูแลระบบ (Root User) | – |
/run | Runtime Variable Data | ข้อมูลสถานะการทำงานขณะนั้น (Runtime) ตั้งแต่เริ่มเปิดเครื่อง | – |
/sbin | System Binaries | คำสั่งขั้นสูงสำหรับการบริหารจัดการระบบของ Admin (เช่น fdisk, reboot) | มักเป็น Symlink ไปที่ /usr/sbin ใน Linux ยุคใหม่ |
/srv | Service Data | ข้อมูลเฉพาะของบริการที่เครื่องให้บริการแก่อื่น ๆ (เช่น /srv/www, /srv/ftp) | กำหนดใน FHS 2.3 เป็นต้นมา |
/sys | System Virtual Filesystem | Virtual FS แสดงข้อมูลโครงสร้างอุปกรณ์ ไดรเวอร์ และเคอร์เนล | – |
/tmp | Temporary Files | ไฟล์ชั่วคราว มักถูกลบโดยอัตโนมัติเมื่อรีสตาร์ตเครื่อง | – |
/usr | User System Resources | รวมไฟล์โปรแกรม ไดรเวอร์ และไลบรารีระดับรองของผู้ใช้ | – |
/var | Variable Data | เก็บข้อมูลที่มีการเปลี่ยนแปลงบ่อย (เช่น Log, Database, Spool) | – |
2. กลุ่มไดเรกทอรีเสริมหรืออดีตมาตรฐาน (Optional & Historical Directories)
| ไดเรกทอรี | หน้าที่และประเภทข้อมูล | หมายเหตุ |
/lost+found | เก็บกู้ไฟล์ที่เสียหายเมื่อเครื่องดับหรือระบบไฟล์มีปัญหา (ถูกใช้โดย fsck) | สร้างโดยระบบไฟล์ตระกูล ext (ext2/ext3/ext4) |
/etc/X11 | ไฟล์ตั้งค่าระบบแสดงผลกราฟิก X Window System | FHS ระบุให้เป็น Optional |
/etc/opt | ไฟล์ตั้งค่าเฉพาะสำหรับโปรแกรมที่ติดตั้งอยู่ใน /opt | FHS ระบุให้เป็น Optional |
กลุ่มไดเรกทอรีเฉพาะทางนอกเหนือจาก FHS (Non-FHS Extensions)
| ไดเรกทอรี | หน้าที่และประเภทข้อมูล | พบได้ในระบบ / เทคโนโลยี |
/snap | จุดเมานต์และไฟล์แอปพลิเคชันในรูปแบบ Snap Packages | พบบ่อยใน Canonical Ubuntu |
/flatpak | จุดเก็บและเมานต์แอปพลิเคชันรูปแบบ Flatpak | พบบ่อยใน Fedora, Arch และ Linux ยุคใหม่ |
/cdrom | จุดเมานต์ CD-ROM ยุคดั้งเดิม | ปัจจุบันย้ายไปใช้ /media/cdrom ตาม FHS |
/sysroot / /ostree | ไดเรกทอรีรากจริงของระบบปฏิบัติการแบบ Immutable OS | เช่น Red Hat Enterprise Linux CoreOS, Fedora Silverblue |
/init / /.singularity.d | โฟลเดอร์ภายในระบบคอนเทนเนอร์หรืออิมเมจพิเศษ | พบใน Docker, Singularity หรือระบบ Embedded |
สรุป
การมีมาตรฐาน FHS ช่วยให้ผู้พัฒนาซอฟต์แวร์เขียนโปรแกรมครั้งเดียว แล้วนำไปรันบน Linux ได้ทุกค่าย รวมถึงช่วยให้ System Administrator สลับไปดูแล Server ต่างระบบปฏิบัติการได้ทันทีโดยไม่ต้องเสียเวลาค้นหาว่าไฟล์คอนฟิกหรือไบนารีเก็บไว้ที่ไหน
อ่านเพิ่มเติม