Linux Directory Structure Explained
Open a Linux terminal and run ls / — you'll see directories like etc, proc, sys, var. What do they all mean? Unlike Windows where files go in C:\Program Files or C:\Users, Linux follows a strict standard called the FHS.
The Filesystem Hierarchy Standard (FHS)
The Most Important Directories
/etc — Configuration Lives Here
Every system-wide config file lives in /etc. Network config, user accounts, SSH settings, cron jobs — all here. The name historically stands for "etcetera" but now think of it as "everything to configure." Examples: /etc/passwd (users), /etc/fstab (mounts), /etc/nginx/nginx.conf.
/proc — The Kernel's Window (Not Real Files)
/proc is a virtual filesystem. Nothing in it is stored on disk — the kernel generates these files on the fly when you read them. /proc/cpuinfo tells you about your CPU. /proc/1234/ tells you everything about process 1234. /proc/meminfo shows memory usage. This is how tools like top and ps get their data.
/sys — Hardware Exposed as Files
Also virtual, like /proc, but focused on hardware. /sys/class/net/eth0/ contains your network interface details. /sys/block/sda/ describes your disk. You can even write to some of these files to change hardware behavior — like adjusting screen brightness or the I/O scheduler.
/var — Logs, Databases, Mail
Files that grow over time live in /var. /var/log/ holds system logs. /var/lib/ holds application state (databases, package manager info). /var/spool/ holds queued jobs (print queue, mail). When a disk fills up on a server, /var/log/ is often the culprit.
/usr — The "Second Root"
Most user-installed software goes into /usr. /usr/bin/ has most commands (python3, git, vim). /usr/lib/ has their libraries. /usr/share/ has docs and data. /usr/local/ is for software you compile yourself — so package managers don't overwrite it.
/dev — Every Device Is a File
Linux treats hardware as files. /dev/sda is your first hard disk. /dev/null discards anything written to it. /dev/random generates random bytes. /dev/tty is your terminal. This "everything is a file" design lets you use the same tools (read, write, cat) for both files and hardware.
Practical Tips
/usr/local/bin/ for system-wide scripts you compile yourself. ~/.local/bin/ for per-user scripts. Never drop things in /bin/ or /usr/bin/ — those are managed by your package manager.
/tmp is a tmpfs mount — stored in RAM, cleared on reboot. Never store anything important there. Also, it's world-writable, so other users can see files there.