Dondon Developments

Linux Directory Structure Reference Guide

Last updated on

Simple reference guide for Linux directories and their use


* AI Generated

Overview

The Linux filesystem follows a hierarchical structure defined by the Filesystem Hierarchy Standard (FHS). Understanding this structure is essential for system administration, software deployment, and general Linux usage.

Root Directory Structure

/ (Root Directory)

The top-level directory that contains all other directories and files in the system.


Essential System Directories

/bin - Essential User Binaries

  • Purpose: Contains essential command-line utilities needed by all users
  • Availability: Must be available even in single-user mode
  • Examples: ls, cp, mv, cat, bash, grep
  • Note: These are commands you’d expect to work on any Linux system

/sbin - System Binaries

  • Purpose: Essential system administration commands
  • Access: Typically used by root/administrators
  • Examples: mount, umount, fsck, iptables, systemctl
  • Note: “s” stands for “system” or “superuser”

/lib - Essential Libraries

  • Purpose: Shared libraries required by programs in /bin and /sbin
  • Contents: Dynamic linking libraries (.so files)
  • Importance: Critical for system boot and basic functionality

User and Application Directories

/usr - User System Resources

Secondary hierarchy containing the majority of user utilities and applications.

Key subdirectories:

  • /usr/bin - Non-essential user commands and applications
  • /usr/sbin - Non-essential system administration binaries
  • /usr/lib - Libraries for /usr/bin and /usr/sbin programs
  • /usr/local - Local software installations (not from package manager)
  • /usr/share - Architecture-independent shared data

/opt - Optional Software Packages

  • Purpose: Self-contained third-party software packages
  • Structure: Each package gets its own subdirectory (e.g., /opt/google/chrome)
  • Use Cases:
    • Commercial software
    • Large application suites
    • Proprietary applications
    • Software that prefers to keep all files together
  • Examples: Oracle Database, VMware, Google Chrome, custom enterprise applications

/home - User Home Directories

  • Purpose: Personal directories for regular users
  • Structure: /home/username
  • Contents: User files, personal configurations, documents

/root - Root User Home

  • Purpose: Home directory specifically for the root user
  • Location: Separate from /home for security and availability reasons

Configuration and Data Directories

/etc - System Configuration

  • Purpose: System-wide configuration files
  • Format: Text-based configuration files
  • Examples: /etc/passwd, /etc/hosts, /etc/apache2/, /etc/ssh/
  • Scope: Affects entire system, not individual users

/var - Variable Data

  • Purpose: Files that change during normal system operation
  • Key subdirectories:
    • /var/log - System and application log files
    • /var/mail - User mailboxes
    • /var/tmp - Temporary files preserved between reboots
    • /var/lib - Application state data
    • /var/cache - Application cache data

Temporary and Runtime Directories

/tmp - Temporary Files

  • Purpose: Temporary files for applications and users
  • Cleanup: Often cleared on system reboot
  • Access: World-writable with sticky bit set
  • Usage: Short-term storage during program execution

Boot and Hardware Directories

/boot - Boot Files

  • Purpose: Files required for system startup
  • Contents: Kernel images, initial RAM disk, bootloader configuration
  • Examples: vmlinuz, initrd.img, GRUB configuration

/dev - Device Files

  • Purpose: Special files representing hardware devices
  • Type: Character and block device files
  • Examples: /dev/sda (hard drive), /dev/null, /dev/random
  • Management: Usually managed automatically by udev

Virtual Filesystems

/proc - Process Information

  • Purpose: Virtual filesystem exposing kernel and process information
  • Contents: Process directories (numbered by PID), system information
  • Examples: /proc/cpuinfo, /proc/meminfo, /proc/1/ (init process)
  • Note: Files exist only in memory, not on disk

/sys - System Information

  • Purpose: Virtual filesystem for modern kernel object information
  • Contents: Hardware device information, kernel modules, power management
  • Usage: Used by modern system management tools
  • Note: More structured than /proc

Mount Point Directories

/mnt - Manual Mount Point

  • Purpose: Temporary mount point for manually mounted filesystems
  • Usage: System administrators mount filesystems here temporarily
  • Examples: Mounting external drives for maintenance

/media - Removable Media

  • Purpose: Automatic mount points for removable media
  • Management: Usually handled by desktop environments
  • Examples: /media/usb-drive, /media/cdrom

Quick Reference Summary

DirectoryPrimary PurposeKey Characteristics
/binEssential user commandsAvailable in single-user mode
/sbinSystem administrationRoot/admin tools
/usrUser programs and dataSecondary hierarchy
/optThird-party packagesSelf-contained installations
/etcSystem configurationText-based config files
/varChanging dataLogs, mail, temporary files
/homeUser directoriesPersonal user spaces
/tmpTemporary filesOften cleared on boot

Best Practices for Students

  1. Exploration: Use ls -la to explore directory contents and permissions
  2. Documentation: Check man hier for detailed filesystem hierarchy information
  3. Respect: Be cautious when working in system directories (especially as root)
  4. Understanding: Learn the logic behind the structure - it makes navigation intuitive
  5. Practice: Set up a virtual machine to safely explore the filesystem structure

Common Confusion Points

  • /usr vs /usr/local: /usr is for package-managed software, /usr/local is for manually compiled/installed software
  • /bin vs /usr/bin: /bin is for essential commands, /usr/bin is for additional user programs
  • /tmp vs /var/tmp: /tmp may be cleared on reboot, /var/tmp should persist across reboots
  • /opt vs /usr/local: Both for additional software, but /opt is for packaged applications, /usr/local follows standard hierarchy

This structure has evolved over decades and represents a balance between organization, tradition, and practical system administration needs.