Best Practices and Technical Differences Between /usr, /var, and /etc Directories in Unix/Linux Systems


7 views

The Unix filesystem follows a well-defined hierarchy where each directory serves specific purposes. Three critical directories often cause confusion:

/
├── etc/
├── usr/
└── var/

The /etc directory (et cetera) stores system-wide configuration files. These are static files that don't change during normal operation.

Example files:

/etc/passwd        # User account information
/etc/hosts         # Hostname to IP mapping
/etc/ssh/sshd_config # SSH server configuration

/usr (Unix System Resources) contains read-only user binaries, libraries, and documentation. Modern systems often follow these subdirectories:

usr/
├── bin/      # User commands
├── sbin/     # System admin commands
├── lib/      # Libraries
├── local/    # Locally installed software
└── share/    # Architecture-independent data

Example of checking installed software:

ls /usr/bin | grep python
dpkg -L python3 | grep ^/usr

/var contains files that change during system operation. Important subdirectories include:

var/
├── log/      # System logs
├── spool/    # Queued files (print, mail)
├── cache/    # Application cache
└── lib/      # State information

Example of checking log files:

tail -f /var/log/syslog
journalctl -xe

When installing a web server like Nginx:

# Configuration files
/etc/nginx/nginx.conf
/etc/nginx/sites-available/

# Binary and libraries
/usr/sbin/nginx
/usr/lib/nginx/

# Variable data
/var/log/nginx/
/var/www/html/
Directory Content Type Modification Frequency
/etc Configuration files Only during setup/changes
/usr Executables and libraries During software installation
/var Runtime data Constantly during operation

In Unix-like systems, three directories form the backbone of system organization:

/
├── etc/
├── usr/
└── var/

This directory stores system-wide configuration files. Unlike Windows' registry, Linux keeps configurations as plain text files here.

# Example: Viewing network configurations
cat /etc/network/interfaces
# Editing SSH configurations
sudo nano /etc/ssh/sshd_config

Key files typically found in /etc:

  • /etc/passwd - User account information
  • /etc/fstab - Filesystem table
  • /etc/hosts - Static hostname mappings

Originally for "user" programs, /usr now contains most application software. It's typically mounted read-only after installation.

# Common subdirectories:
/usr/bin/    # Most user commands
/usr/lib/    # Libraries
/usr/local/  # Locally installed software
/usr/share/  # Architecture-independent data

Example of installing to /usr/local:

./configure --prefix=/usr/local
make
sudo make install

This directory contains files that change during normal system operation:

/var/log/    # System logs
/var/www/    # Web server content (common location)
/var/spool/  # Queues for printing/mail
/var/tmp/    # Temporary files preserved between reboots

When setting up a web server:

# Configuration goes in /etc
/etc/nginx/nginx.conf

# Web content typically in /var
/var/www/html/index.html

# Logs go to /var/log
/var/log/nginx/access.log

For custom service management:

# Systemd unit files location
/etc/systemd/system/myapp.service

# Application binaries
/usr/local/bin/myapp

# Runtime data
/var/lib/myapp/

Proper permissions are crucial for security:

# Typical permissions for /etc
sudo chmod -R 755 /etc
sudo chown -R root:root /etc

# Web directory example
sudo chown -R www-data:www-data /var/www
sudo chmod -R 755 /var/www

Quick reference guide:

Directory Purpose Should Contain Shouldn't Contain
/etc Configuration Static config files Binaries, logs
/usr Software Installed programs User documents
/var Variable data Logs, databases Static configs