In Unix systems, the /etc
directory name originally stood for "et cetera" (Latin for "and other things"). This reflects its purpose as the catch-all location for system configuration files that didn't belong elsewhere. Some examples:
# Common /etc files
/etc/passwd
/etc/hosts
/etc/ssh/sshd_config
The /opt
directory (short for "optional") stores add-on application software packages, typically those not managed by the system's package manager. Commercial software often installs here:
# Typical /opt structure
/opt/google/chrome
/opt/oracle/java
While the original meanings remain, modern Linux distributions follow the Filesystem Hierarchy Standard (FHS):
- /etc: Host-specific system-wide configuration files
- /opt: Static application software packages
Example of querying these directories programmatically in Python:
import os
# List contents of /etc
etc_files = os.listdir('/etc')
print(f"/etc contains {len(etc_files)} configuration files")
# Check if software exists in /opt
if os.path.exists('/opt/myapp'):
print("Application found in /opt")
When writing installation scripts or system utilities, follow these conventions:
# Bash example for config file handling
CONFIG_DIR="/etc/myapp"
if [ ! -d "$CONFIG_DIR" ]; then
sudo mkdir -p "$CONFIG_DIR"
sudo chmod 755 "$CONFIG_DIR"
fi
For package maintainers, the FHS specifies that /opt
should contain one subdirectory per package, following the format /opt/<provider>/<package>
.
For completeness, here are some other common Unix directory abbreviations:
Directory | Meaning | Contents |
---|---|---|
/usr | Unix System Resources | Read-only user utilities |
/bin | Binaries | Essential command binaries |
/var | Variable | Files that change frequently |
/tmp | Temporary | Temporary files |
Understanding these conventions helps when debugging issues or designing system software. The standardized locations make scripts and tools more portable across Unix-like systems.
Every Unix/Linux user encounters these fundamental directories:
/
├── bin # Essential command binaries
├── usr # User programs and utilities
└── sbin # System binaries
Contrary to popular belief, /etc
doesn't stand for "electronic configuration." It originates from early Unix at Bell Labs where it was literally "et cetera" - the catch-all directory for miscellaneous system files.
Today, it's the primary location for system configuration files:
/etc/
├── passwd # User account information
├── hosts # Hostname to IP mappings
├── fstab # Filesystem table
└── nginx/ # Web server configs
Your guess about /opt
being "optional" is correct. This directory holds:
- Third-party applications
- Large software packages
- Self-contained programs
Example structure:
/opt/
├── google/
│ └── chrome/ # Chrome browser files
└── jetbrains/
└── toolbox/ # JetBrains IDE manager
When writing scripts that interact with these directories:
#!/bin/bash
# Read from /etc
if [[ -f "/etc/os-release" ]]; then
source /etc/os-release
echo "Running $NAME $VERSION"
fi
# Check for /opt programs
if [[ -d "/opt/google/chrome" ]]; then
echo "Chrome is installed in /opt"
fi
While these directories remain standard, some modern systems use alternatives:
/usr/local/etc
for local configurations/usr/local/opt
in Homebrew (macOS)- AppImage/Snap packages that don't require /opt