Tutorial di internet kerap berbunyi “sunting file di /etc” atau “cek log di /var/log” tanpa pernah menyebut nama distro — dan nasihat itu benar di Debian, Ubuntu, Fedora, maupun Arch. Hal itu mungkin karena letak direktori di Linux dijaga oleh sebuah dokumen standar bernama Filesystem Hierarchy Standard (FHS), yang menetapkan direktori apa wajib ada dan jenis file apa yang boleh menempatinya. Pada Chapter ini kita pelajari apa yang dijamin FHS, bagaimana standar ini menggolongkan direktori menjadi shareable dan static, serta bagaimana distro modern menafsirkannya ulang lewat penggabungan /bin ke dalam /usr/bin.
Standar yang Menjaga Konsistensi #
FHS adalah kelanjutan dari FSSTND, dokumen tata letak direktori yang dirintis komunitas Linux tahun 1994 dan kemudian disempurnakan agar juga cocok untuk varian Unix lain. Versi yang berlaku saat ini adalah FHS 3.0, dirilis tahun 2015 di bawah naungan Linux Foundation. Isinya berupa daftar direktori utama beserta aturannya: direktori mana yang wajib ada, jenis file apa yang boleh dan tidak boleh disimpan di dalamnya, serta direktori mana yang boleh berupa symlink ke lokasi lain.
Jaminan inilah yang membuat panduan, skrip, dan kebiasaan admin dapat dipindahkan antar distro tanpa penyesuaian. File /etc/os-release yang kita buka pada Chapter sebelumnya ditemukan di /etc pada distro mana pun karena FHS menetapkan direktori itu sebagai rumah konfigurasi mesin; standar yang sama menjamin /usr/bin hanya boleh diisi program dari package manager. Ringkasan seluruh direktori menurut Debian tersedia pada halaman manual hier(7)
.
Empat Kategori Direktori #
FHS menggolongkan direktori menurut dua sumbu. Sumbu pertama, shareable versus unshareable: direktori shareable berisi data yang aman dipakai bersama oleh banyak komputer — misalnya lewat berbagi berkas NFS — sedangkan unshareable berisi data yang memang milik satu mesin. Sumbu kedua, static versus variable: direktori static berisi program dan konfigurasi yang hanya berubah ketika admin memasang versi baru, sedangkan variable berisi data yang terus bertambah selama sistem berjalan, seperti log dan surat. Perpotongan kedua sumbu menghasilkan empat kategori:
| Shareable | Unshareable | |
|---|---|---|
| Static | /usr, /opt | /etc, /boot |
| Variable | /home, /var/mail | /var/run, /var/lock |
Penggolongan ini bukan teori kosong. Sebuah server bisa memasang /usr dalam mode hanya-baca (read-only) karena isinya static, sehingga program di dalamnya jauh lebih sulit diubah tanpa sengaja. Sebaliknya, direktori seperti /var dan /home sengaja dipisahkan agar cadangan (backup) dan kuota disk dapat diatur per jenis data. Pada FHS 3.0, /var/run dan /var/lock digantikan oleh /run yang menyimpan data sejak awal proses booting — distro modern umumnya menyediakan keduanya dengan /var/run sebagai tautan ke /run.
/usr untuk Package Manager, /usr/local untuk Kita #
Struktur /usr dikelola sepenuhnya oleh package manager. Kita bisa mengintip isinya langsung:
ls /usr/bin | head -n 5
ls /usr/bin | wc -lOutput yang Dihasilkan:
X11
Xvfb
[
aclocal
aclocal-1.17
926Mari kita telaah hasilnya:
- Baris 1 (
ls /usr/bin | head -n 5):lsmendaftar seluruh isi/usr/bin, laluhead -n 5hanya meneruskan lima baris pertama ke layar — pada mesin tempat buku ini diuji, lima nama itu adalahX11,Xvfb,[,aclocal, danaclocal-1.17. - Baris 2 (
ls /usr/bin | wc -l): menghitung jumlah baris daftar penuh; tercatat 926 nama program pada mesin uji.
Daftar dan jumlahnya pasti berbeda di komputer pembaca karena isinya mengikuti paket yang terpasang, tetapi sifatnya tetap sama: ratusan program yang datang dan pergi hanya lewat package manager. Entri [ pada contoh di atas adalah nama asli sebuah perintah — sinonim dari test — bukan tanda baca yang nyasar. Wilayah kebalikannya adalah /usr/local: struktur /usr (bin, lib, share) digandakan di sana untuk perangkat lunak yang kita pasang sendiri, misalnya hasil kompilasi make install, dan FHS melarang package manager menyentuhnya.
/bin yang Kini Menjadi Tautan #
Pada sistem lawas, /bin dan /sbin adalah folder sungguhan yang menyimpan program penting untuk tahap awal booting, sementara program lain menunggu di /usr/bin. Modernisasi bernama usrmerge menggabungkan keduanya: isi /bin pindah ke /usr/bin, lalu /bin diubah menjadi symlink yang hanya menunjuk ke sana. Kita membuktikannya dengan readlink, yang mencetak target sebuah symlink:
readlink /bin
readlink /sbinOutput yang Dihasilkan:
usr/bin
usr/sbinTampilan usr/bin dan usr/sbin — tanpa garis miring di awal — menandakan /bin adalah symlink relatif: targetnya dibaca terhadap posisi /bin sendiri, sehingga usr/bin berarti ./usr/bin di akar. Skrip lama yang menulis #!/bin/bash tetap bekerja karena kernel mendarat di /usr/bin/bash lewat tautan itu. Pada distro yang belum menggabungkan /usr, /bin masih folder sungguhan dan readlink tidak mencetak apa-apa; kelakuan yang sama muncul bila readlink diberikan file biasa.
Direktori Virtual yang Lahir dari Kernel #
Beberapa direktori yang kita lihat di akar tidak menempati ruang disk sama sekali. Direktori /proc dan /sys adalah pseudo-filesystem: isinya tidak tersimpan di perangkat penyimpanan, melainkan diciptakan kernel di memori pada saat kita membacanya. Membaca /proc/version sama dengan bertanya kepada kernel yang sedang berjalan, “kamu ini versi berapa?” — berikut contoh tampilannya pada satu mesin Ubuntu:
Linux version 6.8.0-45-generic (buildd@lcy02-amd64-072) (gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0,
GNU ld (GNU Binutils for Ubuntu) 2.42) #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Sep 6 13:42:12 UTC 2024 x86_64Nomor versi, tanggal, dan detail compiler pasti berbeda di komputer pembaca karena semuanya mengikuti kernel yang terpasang. Direktori /proc juga berisi satu folder per proses yang sedang hidup, dinamai angka process ID (PID), sehingga isinya berubah sepanjang waktu. Karena sifat dinamis inilah /proc dan /sys berada di luar FHS fisik: standar itu mengatur file di disk, sementara keduanya adalah jendela ke dalam kernel. Dokumentasi lengkap isi /proc tersedia di dokumentasi resmi kernel
.
Dengan peta dari Chapter sebelumnya dan jaminan dari FHS, kita kini tahu file tinggal di mana. Langkah berikutnya adalah menuliskan lokasi itu secara tepat: perbedaan path absolut yang dimulai dari akar dan path relatif yang berangkat dari posisi kita — materi Chapter Absolute dan Relative Path.