> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skanesgalab.my.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Struktur Hierarki Direktori Linux (FHS)

> Panduan mendalam struktur direktori Linux Filesystem Hierarchy Standard (FHS): fungsi setiap folder (/etc, /var, /opt, /home, /bin), perbedaan dan kapan menggunakannya.

## Filosofi Sistem Berkas Linux: "Everything is a File"

Bagi kamu yang terbiasa dengan sistem operasi Windows, penyimpanan dibagi berdasarkan partisi huruf drive independen, seperti `C:\`, `D:\`, atau `E:\`. Setiap flashdisk atau harddisk eksternal yang dicolokkan akan mendapatkan huruf drive baru.

Di Linux, konsepnya sangat berbeda:

1. **Tidak Ada Huruf Drive (`C:\` / `D:\`):** Seluruh penyimpanan sistem berkas Linux berbentuk **Satu Pohon Tunggal (*Single Inverted Tree*)** yang berakar dari satu titik awal bernama **Root Directory (`/`)**.
2. **"Everything is a File":** Di Linux, hampir semua hal dianggap dan direpresentasikan sebagai sebuah berkas — dokumen teks, folder, proses CPU yang sedang berjalan, harddisk, kartu jaringan, bahkan webcam dan mouse!
3. **Standar FHS (*Filesystem Hierarchy Standard*):** Semua distribusi Linux (Ubuntu, Debian, Red Hat, Arch) mengikuti aturan standar FHS yang menentukan letak spesifik di mana jenis file tertentu harus disimpan.

***

## Pohon Struktur Direktori Linux

```mermaid theme={null}
flowchart TD
    Root["/ (Root Directory - Induk dari Semua Folder)"]
    
    Root --> bin["/bin & /sbin (Biner Perintah Sistem)"]
    Root --> etc["/etc (Konfigurasi Sistem & Layanan)"]
    Root --> var["/var (Data Dinamis: Log, Web, Spool)"]
    Root --> home["/home & /root (Home Direktori Pengguna)"]
    Root --> opt["/opt & /usr/local (Aplikasi Pihak Ketiga)"]
    Root --> tmp["/tmp (File Sementara / Temporary)"]
    Root --> dev["/dev (Node Perangkat Keras / Devices)"]
    Root --> proc["/proc & /sys (Virtual Kernel Info di RAM)"]
    Root --> mnt["/mnt & /media (Titik Pasang Storage Eksternal)"]
    Root --> usr["/usr (Program & Pustaka User Umum)"]
```

***

## Penjelasan Mendalam Setiap Direktori

Berikut bedah tuntas fungsi masing-masing direktori, isi berkas di dalamnya, dan kapan kamu sebagai SysAdmin/DevOps harus menggunakannya:

### 1. `/` (Root Directory)

* **Fungsi:** Titik pangkal atau akar dari seluruh sistem hierarki berkas Linux. Tidak ada folder yang posisinya berada "di atas" `/`.
* **Kapan Digunakan:** Hanya digunakan sebagai acuan path absolut (misal `/etc/hosts`). Jangan pernah menaruh file sembarangan langsung di `/` agar sistem tetap rapi.

***

### 2. `/etc` (Editable Text Configuration)

* **Fungsi:** Rumah bagi **seluruh berkas konfigurasi sistem dan layanan**. Hampir semua berkas di sini berupa teks biasa (*plain text*) yang bisa kamu edit menggunakan editor seperti `nano` atau `vim`.
* **Contoh Berkas Penting:**
  * `/etc/passwd`: Daftar akun pengguna sistem.
  * `/etc/fstab`: Tabel partisi harddisk yang otomatis dimount saat boot.
  * `/etc/hosts`: Pemetaan domain lokal ke IP address.
  * `/etc/ssh/sshd_config`: Konfigurasi keamanan remote server SSH.
  * `/etc/nginx/`: Konfigurasi virtual host web server Nginx.
  * `/etc/network/interfaces` atau `/etc/netplan/`: Konfigurasi kartu jaringan.
* **Kapan Digunakan:** Setiap kali kamu ingin mengubah setting server, memodifikasi port SSH, mengatur static IP, atau menambah domain website.

***

### 3. `/var` (Variable Data)

* **Fungsi:** Menyimpan data dinamis yang ukurannya **terus berubah dan bertambah** saat sistem atau aplikasi sedang berjalan.
* **Sub-Direktori Penting:**
  * `/var/log/`: Tempat seluruh log sistem dan aplikasi tersimpan (`syslog`, `auth.log`, `nginx/access.log`).
  * `/var/www/html/`: Direktori default penyimpanan file website HTML/PHP untuk Apache atau Nginx.
  * `/var/lib/`: Basis data state aplikasi (misal `/var/lib/mysql` untuk database MySQL atau `/var/lib/docker` untuk kontainer Docker).
  * `/var/spool/`: Antrean proses cetak dokumen atau antrean pengiriman email (*mail spool*).
* **Kapan Digunakan:** Saat menganalisis error aplikasi lewat log, menaruh kode web production, atau saat memeriksa partisi mana yang menyebabkan harddisk server penuh (karena log yang membesar).

***

### 4. `/home` vs `/root` (User Directories)

* **`/home/<username>`:**
  * Folder pribadi milik pengguna biasa (non-root). Setiap user memiliki subfolder tersendiri (misal `/home/budi`, `/home/yanto`).
  * Menyimpan file pribadi, dokumen, desktop, serta berkas konfigurasi profil user (*dotfiles* seperti `~/.bashrc`, `~/.ssh/id_rsa`).
  * User lain dilarang membaca atau mengedit isi folder home milik orang lain kecuali diberi izin.
* **`/root`:**
  * Home directory khusus untuk akun superuser administrator utama (**root**).
  * Letaknya sengaja dipisahkan langsung di partisi `/` (bukan di `/home/root`) agar root tetap bisa login untuk memperbaiki sistem meskipun partisi `/home` mengalami kerusakan harddisk.
* **Kapan Digunakan:** Saat kamu login sebagai user biasa, kamu akan selalu otomatis berada di `/home/username`.

***

### 5. `/bin`, `/sbin`, dan `/usr/bin` (Executables / Binaries)

* **`/bin` (User Binaries):** Berisi program biner dan perintah dasar yang dibutuhkan oleh **semua user**, terutama saat sistem dalam mode darurat (*single-user mode*). Contoh: `ls`, `cp`, `mv`, `rm`, `cat`, `bash`.
* **`/sbin` (System Binaries):** Berisi perintah administrasi yang **hanya boleh dijalankan oleh root/administrator** untuk pemeliharaan sistem. Contoh: `fdisk`, `reboot`, `iptables`, `ip`, `shutdown`.
* **`/usr/bin` & `/usr/sbin`:** Berisi aplikasi pengguna yang diinstal lewat package manager (seperti `curl`, `git`, `python3`, `htop`, `nginx`).
  *(Pada distro modern seperti Ubuntu/Debian baru, `/bin` dan `/sbin` sebenarnya adalah symlink yang mengarah ke `/usr/bin` dan `/usr/sbin`).*

***

### 6. `/opt` vs `/usr/local` (Aplikasi Tambahan & Pihak Ketiga)

Kedua folder ini sering membingungkan pemula:

| Parameter | `/opt` (Optional Software) | `/usr/local` (Locally Compiled) |
| :- | :- | :- |
| **Tujuan** | Perangkat lunak pihak ketiga yang diinstal dalam paket mandiri (*self-contained package*). | Perangkat lunak yang kamu kompilasi sendiri secara manual dari source code (`./configure && make install`). |
| **Struktur** | Memiliki folder terisolasi sendiri (semua file binary, config, dan lib berada di dalam `/opt/nama_aplikasi/`). | File tersebar mengikuti struktur FHS standar (`/usr/local/bin`, `/usr/local/lib`, `/usr/local/etc`). |
| **Contoh** | Google Chrome, Docker Desktop, GitLab Omnibus, Datadog Agent, aplikasi Java proprietary. | Python versi kustom yang kamu build sendiri dari file tar.gz. |

***

### 7. `/dev` (Device Nodes)

* **Fungsi:** Bukan berisi file biasa, melainkan **antarmuka file representasi perangkat keras fisik**.
* **Contoh Penting:**
  * `/dev/sda`, `/dev/nvme0n1`: Piringan harddisk fisik SATA atau NVMe SSD.
  * `/dev/sda1`: Partisi nomor 1 pada harddisk pertama.
  * `/dev/null`: *"Black Hole"* digital. Data apa pun yang kamu alihkan ke sini akan lenyap seketika tanpa memakan memori.
  * `/dev/urandom`: Generator angka acak kriptografis yang sangat aman.
* **Kapan Digunakan:** Saat kamu ingin mempartisi harddisk baru (`fdisk /dev/sdb`), memformat partisi (`mkfs.ext4 /dev/sdb1`), atau membuang pesan error (`2>/dev/null`).

***

### 8. `/proc` & `/sys` (Virtual Kernel Filesystems)

* **Fungsi:** Folder "gaib" yang **sebenarnya tidak ada di dalam harddisk**, melainkan dibuat secara dinamis oleh kernel Linux langsung di dalam **RAM (Memori)**.
* **Isi:**
  * `/proc`: Berisi jendela informasi status kernel dan proses CPU yang sedang berjalan saat ini. Setiap proses memiliki folder angka sesuai PID-nya (misal `/proc/1234/`).
  * `/proc/cpuinfo`: Rincian spesifikasi prosesor CPU.
  * `/proc/meminfo`: Rincian kapasitas RAM real-time.
  * `/sys`: Berisi informasi driver perangkat keras terstruktur (PCI, USB, kartu grafis).
* **Kapan Digunakan:** Saat kamu ingin mengintip statistik performa prosesor atau mengubah parameter kernel secara dinamis (`sysctl`).

***

### 9. `/mnt` vs `/media` (Mount Points)

* **`/media` (Automount):** Tempat sistem operasi memasang (*mount*) media penyimpanan eksternal yang dapat dilepas secara otomatis saat dicolokkan (misal flashdisk USB, CD-ROM, atau kartu SD).
* **`/mnt` (Manual Mount):** Tempat kosong standar yang disediakan bagi administrator sistem untuk memasang sistem berkas sementara secara manual (misal kamu memasang partisi harddisk kedua: `mount /dev/sdb1 /mnt/data`).

***

### 10. `/tmp` (Temporary Files)

* **Fungsi:** Tempat aplikasi menyimpan berkas kerja sementara (seperti cache sesi, lock file instalasi, atau socket koneksi).
* **Karakteristik:** Berkas di `/tmp` **akan otomatis dihapus bersih oleh sistem saat server di-reboot** atau jika file sudah berumur beberapa hari. Jangan pernah menyimpan dokumen penting di folder ini!

***

## Rangkuman Cepat: Di Mana Saya Harus Meletakkan File?

| Jika kamu ingin... | Letakkan di direktori: |
| :- | :- |
| Mengedit pengaturan port server atau konfigurasi jaringan | **`/etc`** |
| Menaruh file website HTML, database MySQL, atau membaca log | **`/var`** |
| Menyimpan skrip pribadi, kunci SSH, dan dokumen harianmu | **`/home/username`** |
| Memasang aplikasi enterprise mandiri dari vendor pihak ketiga | **`/opt`** |
| Memasang harddisk baru atau share folder NFS jaringan | **`/mnt`** |
| Membuat file cadangan sementara yang boleh hilang saat restart | **`/tmp`** |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.