Table of Contents
- The Root Directory (
/) - Key Subdirectories of
/- /bin: Essential User Binaries
- /boot: Bootloader Files
- /dev: Device Files
- /etc: System Configuration
- /home: User Home Directories
- /lib: Shared Libraries
- /media: Removable Media
- /mnt: Temporary Mount Points
- /opt: Optional Software
- /proc: Virtual Process Filesystem
- /root: Root User’s Home
- /run: Runtime Data
- /sbin: System Binaries
- /srv: Service Data
- /sys: Kernel and Hardware Info
- /tmp: Temporary Files
- /usr: User Utilities and Applications
- /var: Variable Data
- Navigating the Filesystem: Essential Commands
- Conclusion
- References
The Root Directory (/)
At the top of the Linux filesystem hierarchy sits the root directory, denoted by a forward slash (/). Every file and folder on your system is a child of this root—there are no “drives” like C:\ or D:\ as in Windows. Think of it as the trunk of a tree, with all other directories branching off from it.
Even if you have multiple storage devices (e.g., SSD, external hard drive), they are “mounted” as subdirectories under / (e.g., an external drive might be mounted at /mnt/external).
Key Subdirectories of /
Let’s explore the most important subdirectories under / and what they contain.
/bin: Essential User Binaries
Purpose: Contains critical executable programs (binaries) required for basic system operation, even when the system is in recovery mode (e.g., single-user mode). These binaries are available to all users.
Examples:
ls: Lists directory contents.cd: Changes the current directory (thoughcdis actually a shell built-in, many basic tools here are essential).cp: Copies files.mv: Moves/renames files.cat: Reads file contents.
Note: On modern Linux systems, /bin is often a symbolic link to /usr/bin (more on /usr later), but the distinction remains for compatibility.
/boot: Bootloader Files
Purpose: Stores files needed to start (boot) the system, including the Linux kernel, initial RAM disk (initrd/initramfs), and bootloader configuration (e.g., GRUB).
Examples:
vmlinuz-<version>: The Linux kernel executable.initrd.img-<version>: Initial RAM disk (loads drivers needed to mount the root filesystem).grub/: Configuration files for the GRUB bootloader.
Caution: Never delete files here—doing so could render your system unbootable!
/dev: Device Files
Purpose: A virtual filesystem that represents hardware devices and system resources as files. Linux treats almost everything as a file, and /dev is where you interact with devices.
Examples:
/dev/sda: The first SATA/PATA hard drive (e.g.,/dev/sda1is its first partition)./dev/null: A “black hole” where data sent here is discarded (e.g.,command > /dev/nullsilences output)./dev/zero: Generates an infinite stream of null bytes (used to create empty files)./dev/random//dev/urandom: Generate random numbers (used for encryption).
/etc: System Configuration
Purpose: The “et cetera” directory holds system-wide configuration files for applications, services, and the OS itself. If you need to tweak settings (e.g., network, user accounts, or software behavior), this is where you’ll look.
Examples:
/etc/passwd: Stores user account information (usernames, UIDs, home directories)./etc/group: Defines user groups./etc/fstab: Lists filesystems to mount at boot./etc/network/interfacesor/etc/netplan/: Network configuration (varies by distro)./etc/apache2/or/etc/nginx/: Configuration for web servers like Apache or Nginx.
/home: User Home Directories
Purpose: Each regular user gets a personal directory here, named after their username (e.g., /home/alice for user “alice”). This is where users store personal files, downloads, documents, and application settings (e.g., ~/.bashrc for shell preferences).
Shortcut: The tilde (~) symbol refers to your home directory (e.g., cd ~ takes you home, ~alice refers to Alice’s home).
/lib: Shared Libraries
Purpose: Contains shared library files (.so files) required by binaries in /bin and /sbin. Think of libraries as reusable code that programs rely on to run.
Examples:
libc.so.*: The GNU C Library, essential for nearly all Linux programs.libpthread.so.*: Library for multi-threading support.
Note: /lib64 (on 64-bit systems) holds 64-bit libraries, while /lib may contain 32-bit libraries for compatibility.
/media: Removable Media
Purpose: Automatically mounted removable media (e.g., USB drives, SD cards, CDs/DVDs) appear here. Modern desktop environments (GNOME, KDE) mount devices here when you plug them in (e.g., /media/alice/USB-Drive).
/mnt: Temporary Mount Points
Purpose: A “mount point” directory for manually mounting filesystems (e.g., external hard drives, network shares). Unlike /media, which is for auto-mounted devices, /mnt is for temporary, user-initiated mounts (e.g., mount /dev/sdb1 /mnt/backup).
/opt: Optional Software
Purpose: Reserved for “optional” software not part of the default OS installation (e.g., commercial applications, self-compiled programs). Software here is often installed in its own subdirectory (e.g., /opt/google/chrome for Chrome).
/proc: Virtual Process Filesystem
Purpose: A virtual, in-memory filesystem that provides real-time information about running processes and system kernel status. It does not store data on disk—everything here is generated dynamically.
Examples:
/proc/cpuinfo: Details about your CPU (cores, speed, model)./proc/meminfo: RAM usage statistics./proc/uptime: System uptime (how long the system has been running)./proc/<PID>/: Directory for process ID<PID>(e.g.,/proc/1is thesystemdorinitprocess, the first to run at boot).
/root: Root’s Home Directory
Purpose: The home directory for the root user (the superuser/administrator). Unlike regular users, root does not have a directory in /home—its home is directly under /.
Caution: Only use the root account for administrative tasks; avoid daily use to prevent accidental system damage.
/run: Runtime Data
Purpose: Stores temporary runtime data (e.g., process IDs, lock files, socket files) that persists only until the next reboot. It replaced older directories like /var/run and /var/lock for faster access (often mounted as a temporary filesystem in RAM).
Examples:
/run/user/<UID>/: Temporary files for the user with UID<UID>(e.g.,/run/user/1000/for a user with UID 1000)./run/nginx.pid: PID file for the Nginx web server.
/sbin: System Binaries
Purpose: Similar to /bin, but contains binaries for system administration (e.g., managing disks, networks, or users). These tools are typically only used by the root user or with sudo.
Examples:
fdisk: Partition management.mount: Mounts filesystems.useradd/userdel: Creates/deletes users.ifconfigorip: Network interface configuration.
/srv: Service Data
Purpose: Short for “service,” this directory stores data for services provided by the system (e.g., web server files, FTP shares). It’s less commonly used today but may contain content like /srv/www/ for a web server’s root directory.
/sys: Kernel and Hardware Info
Purpose: A virtual filesystem (like /proc) that exposes kernel data structures and hardware information, particularly for modern hardware (e.g., USB, PCI devices, and power management).
Examples:
/sys/class/net/: Network interface information (e.g.,/sys/class/net/eth0/speedfor Ethernet speed)./sys/devices/: Detailed hardware device trees.
/tmp: Temporary Files
Purpose: A directory for temporary files that are not needed after a reboot. Files here may be deleted automatically (often on reboot or via a cleanup service like systemd-tmpfiles).
Use Case: Store large temporary data (e.g., during software installation) or files you don’t need to keep long-term. Example: mkdir /tmp/my-temp-dir to create a temporary workspace.
/usr: User Utilities and Applications
Purpose: The “user” directory contains non-essential binaries, libraries, documentation, and applications. Unlike /bin and /sbin, which are critical for booting, /usr holds software installed by the user or package manager.
Key Subdirectories:
/usr/bin: User binaries (e.g.,git,python,firefox)./usr/sbin: System binaries for non-critical admin tools (e.g.,apache2for the web server)./usr/lib: Libraries for/usr/binand/usr/sbin./usr/share: Shared data (e.g., documentation, icons, man pages in/usr/share/man)./usr/local: For software compiled and installed manually (e.g.,/usr/local/binfor custom binaries).
/var: Variable Data
Purpose: Short for “variable,” this directory stores data that changes frequently (grows or shrinks over time). Unlike /tmp, files here are not deleted on reboot.
Examples:
/var/log: System and application logs (e.g.,/var/log/syslogfor system events,/var/log/auth.logfor login attempts)./var/spool: Queued data (e.g.,/var/spool/mailfor email,/var/spool/cronfor scheduled tasks)./var/www: Default web server root (for Apache/Nginx) on some distros./var/lib: Persistent application data (e.g.,/var/lib/dpkg/for Debian package databases).
Navigating the Filesystem: Essential Commands
Now that you know what the directories are, let’s learn how to move between them using the command line.
pwd: Print Working Directory
Displays your current location in the filesystem.
alice@linux:~$ pwd
/home/alice
cd: Change Directory
Use cd <path> to move to a directory.
Examples:
cd /home/alice/Documents: Move to theDocumentsfolder (absolute path).cd ../Pictures: Move up one directory (..means “parent directory”) and intoPictures(relative path).cd ~orcd: Return to your home directory.cd -: Go back to the previous directory.
ls: List Directory Contents
Lists files and folders in the current (or specified) directory.
Useful Flags:
ls -l: Long format (shows permissions, size, owner, etc.).ls -a: Show hidden files (names start with., e.g.,.bashrc).ls -h: Human-readable sizes (e.g.,1K,2.5Minstead of bytes).
alice@linux:~/Documents$ ls -la
total 24
drwxr-xr-x 2 alice alice 4096 Jun 1 10:00 .
drwxr-xr-x 5 alice alice 4096 Jun 1 09:30 ..
-rw-r--r-- 1 alice alice 123 May 28 14:00 notes.txt
-rw------- 1 alice alice 567 Jun 1 10:00 .secret.txt # Hidden file
Absolute vs. Relative Paths
- Absolute Path: Starts with
/and specifies the full path from the root (e.g.,/home/alice/Documents). - Relative Path: Relies on your current directory (e.g.,
Documents/reportsif you’re in/home/alice).
Conclusion
The Linux directory structure may seem intimidating at first, but it’s a logical, standardized system designed for efficiency and clarity. By mastering the purpose of key directories like /etc, /home, and /var, you’ll be better equipped to troubleshoot issues, configure software, and organize your work.
Remember: The command line is your best friend here. Practice with cd, ls, and pwd, and don’t hesitate to explore (just be careful with root privileges!). Over time, navigating the Linux filesystem will feel as natural as browsing folders on your desktop.
References
- Filesystem Hierarchy Standard (FHS): The official specification for Linux directory structure.
- Linux man pages:
man hier(hierarchy) for a concise overview of directories. - Ubuntu Community Documentation: Distro-specific examples and tips.
Happy navigating! 🐧