Linux tiene un único árbol de directorios que comienza en / (raíz), y cada disco, partición y sistema de archivos virtual se conecta en algún punto de él. No hay letras de unidad. El FHS (Filesystem Hierarchy Standard) describe qué va en cada lugar. Como casi todas las distribuciones lo siguen, conocer la estructura te dice dónde buscar un archivo de configuración, un log o un dispositivo en cualquier sistema al que inicies sesión, y te ayuda a planificar qué directorios merecen sus propias particiones.
/etc contiene la configuración específica del host, casi toda en texto plano: /etc/fstab, /etc/passwd, /etc/ssh/sshd_config, /etc/hosts. Si quieres cambiar cómo se comporta algo en esta máquina, el archivo probablemente está bajo /etc, y es el directorio más importante para respaldar. Muchos servicios también leen directorios drop-in como /etc/sysctl.d/ o /etc/sudoers.d/, de modo que los cambios locales viven en sus propios archivos pequeños. /var contiene datos variables que crecen mientras el sistema funciona: logs en /var/log, colas de correo e impresión en /var/spool, cachés de paquetes en /var/cache y el estado de las aplicaciones, como bases de datos y almacenamiento de contenedores, en /var/lib. Un /var lleno es una causa clásica de fallos en los servicios, por lo que los servidores a menudo le asignan una partición separada.
/usr contiene la mayor parte del software instalado y de los datos de solo lectura compartidos por los usuarios: programas en /usr/bin, programas de administración del sistema en /usr/sbin, bibliotecas en /usr/lib y /usr/lib64, y documentación y páginas de manual en /usr/share. El software que compilas tú mismo tradicionalmente va en /usr/local para que el gestor de paquetes nunca lo sobrescriba. En la mayoría de las distribuciones modernas, /bin, /sbin y /lib son enlaces simbólicos hacia /usr (la 'fusión de usr' o usr merge). /opt es para paquetes de software complementarios que se instalan como un conjunto autocontenido, como una aplicación de un proveedor en /opt/vendorapp con sus propios bin y lib dentro.
/home contiene los directorios personales de los usuarios, como /home/alice, mientras que el directorio personal del usuario root es /root, que se mantiene en el sistema de archivos raíz para que esté disponible incluso cuando /home no se puede montar. /boot contiene lo que necesita el gestor de arranque: imágenes del kernel (vmlinuz-*), imágenes initramfs y la configuración de GRUB; en sistemas UEFI, la ESP se monta debajo de él en /boot/efi. Si /boot se llena de kernels antiguos, las actualizaciones pueden fallar. Otros directorios que vale la pena conocer son /tmp para archivos temporales (a menudo se vacía al arrancar y a veces es un tmpfs respaldado en RAM), /var/tmp para archivos temporales que deben sobrevivir a un reinicio, /mnt para montajes manuales temporales, /media para medios extraíbles, /srv para datos que sirve el sistema y /run para datos de tiempo de ejecución como archivos PID y sockets, que reside en RAM.
Tres directorios son virtuales: no están en el disco en absoluto, sino que el kernel los genera en cada arranque. /proc es el sistema de archivos de procesos: cada proceso en ejecución tiene un directorio numerado como /proc/1234 que contiene su línea de comandos, su entorno y sus archivos abiertos, y archivos como /proc/cpuinfo, /proc/meminfo y /proc/sys/... exponen información del kernel y parámetros ajustables. /sys (sysfs) presenta una vista estructurada de dispositivos, controladores y objetos del kernel, y es de donde udev y herramientas como lsblk obtienen sus datos. /dev contiene archivos de dispositivo, gestionados por udev, que representan hardware y pseudodispositivos: /dev/sda y /dev/nvme0n1 para discos, /dev/null para descartar la salida, /dev/zero para un flujo de bytes cero y /dev/urandom para bytes aleatorios.
Veamos un ejemplo práctico. Un servidor web deja de aceptar cargas de archivos. Ejecutas df -h y ves que el sistema de archivos montado en /var está al 100 por ciento. du -sh /var/* | sort -h apunta a /var/log, y un segundo du muestra que el log de depuración de una aplicación ha crecido hasta muchos gigabytes. Rotas y comprimes el log, corriges su nivel de registro en la configuración de la aplicación bajo /etc, y las cargas vuelven a funcionar. Conocer la jerarquía te llevó directamente al lugar correcto en vez de buscar en todo el disco.
Errores comunes: colocar programas compilados localmente en /usr/bin, donde una actualización de paquetes puede sobrescribirlos, en lugar de /usr/local/bin; intentar liberar espacio en disco borrando archivos en /proc (no ocupan espacio y no se pueden eliminar); guardar en /tmp o /run datos que deben sobrevivir a un reinicio; y confundir /root (el directorio personal de root) con / (la raíz del árbol). Usa man hier o man file-hierarchy para ver la estructura documentada de tu propio sistema.
Las preguntas del examen suelen dar un tipo de archivo y preguntar dónde vive, o describir un síntoma y preguntar qué directorio revisar. 'Configuración de este host' significa /etc. 'Logs, colas, datos que crecen' significa /var. 'Aplicación autocontenida de terceros' significa /opt. 'Imágenes del kernel e initramfs' significa /boot. 'Ver detalles de CPU, memoria o procesos' o 'parámetros ajustables del kernel' apuntan a /proc, 'atributos de dispositivos y controladores' apuntan a /sys, y 'archivos de dispositivo como discos o /dev/null' apuntan a /dev.
Términos clave
- FHS
- Filesystem Hierarchy Standard (estándar de jerarquía del sistema de archivos): la convención que define el propósito de los directorios de nivel superior de Linux.
- /etc
- El directorio para los archivos de configuración específicos del host.
- /var
- El directorio para datos variables como logs, colas, cachés y estado de las aplicaciones.
- /usr/local
- El área reservada para el software instalado localmente, que el gestor de paquetes no tocará.
- /proc
- Un sistema de archivos virtual que expone información de procesos y del kernel, incluidos los parámetros ajustables bajo /proc/sys.
- /sys
- Sysfs, un sistema de archivos virtual que expone dispositivos, controladores y objetos del kernel.
- /dev
- El directorio de archivos de dispositivo, como /dev/sda y /dev/null, mantenido por udev.
Un servidor web deja de aceptar cargas de archivos. Ejecutas df -h y ves que el sistema de archivos montado en /var está al 100 por ciento. du -sh /var/* apunta a /var/log, donde el log de depuración de una aplicación ha crecido hasta muchos gigabytes. Rotar y comprimir ese log libera espacio, bajas el nivel de registro de la aplicación en su archivo bajo /etc y las cargas vuelven a funcionar.
Comprueba lo que sabes
¿Dónde esperarías encontrar un programa que compilaste tú mismo desde el código fuente, y por qué?
En /usr/local (por ejemplo /usr/local/bin), porque esa área está reservada para el software instalado localmente que el gestor de paquetes no sobrescribirá.
¿Qué directorio contiene las imágenes del kernel y los archivos initramfs?
/boot, que el gestor de arranque lee antes de que el resto del sistema esté disponible.
¿Para qué se usa /dev/null?
Es un archivo de dispositivo que descarta todo lo que se escribe en él; se usa comúnmente para desechar la salida no deseada de un comando.
Un proveedor distribuye una aplicación como un conjunto autocontenido con sus propias carpetas bin y lib. ¿Dónde dice el FHS que debe ir?
En /opt, por ejemplo /opt/vendorapp, que está destinado a paquetes de software complementarios.