Principales directorios Linux y que contienen

En Tutoriales y Guías por

Si has llegado hasta aquí es porque te gustaría examinar la estructura de directorios Linux que nos encontramos de forma generalizada en las diferentes distribuciones GNU/Linux. En este tutorial recogemos de forma detallada el árbol de directorios y al mismo tiempo explicaremos cuál es su contenido y función.

estructura directorios linux

No se trata de un tutorial técnico en el que profundizaremos en cada detalle, más bien consiste en una pequeña guía en la que haremos explicaciones sencillas y concisas para usuarios noveles y avanzados.

En un principio iba a ser un artículo corto, pero como hay bastantes carpetas que explicar, ha resultado un artículo un poco más extenso de lo esperado. Aquí os dejo un pequeño índice de contenidos para no perderse:

¿Qué es el Filesystem Hierarchy Standard o FHS?

El Filesystem Hierarchy Standard también es conocido por sus siglas en inglés FHS y consiste en un estándar que define y normaliza la jerarquía del sistema de archivos en sistemas Unix y derivados. Dicho de otro modo, este estándar nos dice como debe ser la estructura de directorios, definiendo los nombres y contenidos de cada directorio.

El estándar FHS ha sido creado por la fundación Linux y hay distribuciones que lo siguen de forma estricta y otras de forma no tan estricta. También hay distribuciones Linux que no siguen esta estructura y redefinen la jerarquía del sistema de archivos, por ejemplo GoboLinux.

¿Por qué existe el estándar FHS? ¿Qué ventajas tiene seguirlo?

Al tener una jerarquía normalizada del árbol de directorios, nos aseguramos de que programas y scripts funcionan en diferentes sistemas operativos. Además, aplicaciones y usuarios, pueden predecir la localización de programas, librerías, documentación, etc.

Este estándar permite definir los principios básicos de la estructura de directorios, al mismo tiempo que especifica los directorios y archivos mínimos requeridos.

Diferenciando los tipos de archivo según el FHS.

El estándar FHS clasifica los archivos en:

  • Estáticos y variables: esta clasificación diferencia directorios que contienen archivos que no varían a lo largo del tiempo, los llamados estáticos. Por otro lado, aquellos que sufren modificaciones a lo largo del tiempo se les llama variables.
  • Compartibles y no compartibles: esta clasificación permite distinguir los directorios compartibles, aquellos con archivos que se pueden usar en otros dispositivos. Por otro lado están los directorios no compartibles, que son aquellos que sólo se pueden usar en el dispositivo actual.

Un ejemplo de una estructura que cumple los requisitos anteriormente mencionados:

tipos de archivo fhs

Principales directorios en Linux: contenido y funciones.

Ahora que ya vimos que el objetivo de FHS es definir y normalizar una estructura de directorios, paso a mostrar un listado con los principales directorios en Linux, en el que iré señalando el contenido y funciones de cada uno.

El directorio raiz /.

En sistemas operativos UNIX, toda estructura de directorios parte de un directorio raíz que se suele representar con el carácter /. Este directorio raíz funciona como punto de montaje y de él «nacen» el resto de directorios y subdirectorios del árbol.

Para ver el contenido del directorio raíz, podemos emplear el comando ls -la /.

El directorio raíz debe tener las carpetas siguientes:

directorio raiz linux

Directiorio /bin: binarios de comandos esenciales a nivel usuario.

En el directorio /bin se almacenan todo los binarios de comandos esenciales que pueden ser usados por usuarios y por el administrador del sistema. Dicho de otra forma, en esta carpeta encontraremos las herramientas necesarias para utilizar el sistema operativo a nivel usuario.

El directorio /bin no puede contener subdirectorios. Las herramientas o comandos requeridos en /bin son: cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, false, hostname, kill, ln, login, ls, mkdir, mknod, more, mount, mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true, umount y uname.

Con el conjunto de estas herramientas esenciales podemos utilizar el sistema operativo y restaurar el sistema si así fuese necesario.

/boot la carpeta del cargador de arranque.

En el directorio /boot se almacena todo lo necesario para el arranque del sistema operativo. Todos los datos de esta carpeta serán usados antes de que el kernel ejecute los diferentes módulos y procesos del sistema.

En esta carpeta es habitual encontrar el gestor de arranque GRUB y las diferentes versiones del kernel Linux instaladas. En algunas configuraciones, el directorio /boot se ubica en una partición diferente.

Directorio /dev.

Dentro del directorio /dev nos encontramos los archivos de dispositivos conectados al sistema. Por ejemplo, los discos duros y particiones del sistema operativo tienen sus respectivos archivos en esta carpeta.

Puedes probar ejecutando el comando sudo fdisk -l que nos muestra las particiones presentes en el sistema. En la información de salida del comando verás que en la columna «Device» se hace referencia a los archivos /dev/sda de cada partición. En mi caso la salida es:

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 39845887 39843840 19G 83 Linux
/dev/sda2 39847934 41940991 2093058 1022M 5 Extended
/dev/sda5 39847936 41940991 2093056 1022M 82 Linux swap / Solaris

Si conectamos algún dispositivo de almacenamiento externo, el archivo que podremos ver con el comando fdisk -l y que hace referencia a este dispositivo, tendrá un nombre parecido a /dev/sdb.

/etc es el directorio de archivos de configuración.

El directorio /etc es uno de los más conocidos, en este encontramos los archivos de configuración de programas propios del sistema operativo y de programas instalados por el usuario.

En este directorio es donde solemos encontrar los archivos de configuración del servidor Apache, de los que ya hemos hablado en varias ocasiones. También encontraremos el famoso archivo passwd donde se almacena la información de los usuarios del sistema.

Para cumplir los requisitos de FHS, la carpeta /etc no puede contener archivos binarios.

Directorio /home.

Dentro del directorio /home se almacenan todos los archivos personales de los usuarios. Cada usuario tiene su propia carpeta dentro del directorio /home. Si por ejemplo existen los usuarios Juan, Manuel y Zeokat, tendrán sus respectivas carpetas personales en los directorios:

/home/Juan
/home/Manuel
/home/Zeokat

En la especificación FHS no se hace mención al directorio /home, aunque está presente en prácticamente todas las distribuciones Linux. Estas carpetas sirven para almacenar ficheros como fotos, videos, documentos, configuraciones personalizadas de usuario, etc.

En la mayoría de distribuciones Linux, podemos hacer referencia al directorio personal del usuario activo con el símbolo ~. Por ejemplo, si mi usuario es Zeokat, puedo comprobar que los comandos ls -la ~ y ls -la /home/Zeokat son equivalentes.

En algunas configuraciones personalizadas de la estructura de directorios, es muy habitual ubicar el directorio /home en una partición independiente. Así, en caso de fallo del sistema y que tengamos que recuperarlo, los archivos personales del directorio home permanecerán intactos.

Directorio /lib.

El directorio /lib está destinado a almacenar todas las librerías esenciales para arrancar el sistema operativo y para que funcionen los binarios de las carpetas /bin y /sbin. Dentro de esta carpeta también se encuentran los módulos del kernel.

Cuando un sistema operativo funciona bajo la arquitectura de 64 bits, existe el directorio /lib64 para almacenar las librerías específicas de esta arquitectura.

Contenido de la carpeta /lost+found.

Esta carpeta no la encontramos en la especificación FHS, pero hoy en día es muy habitual encontrarla en el directorio raíz, así que vamos a explicar cuál es su propósito. En la carpeta /lost+found se encuentran los archivos y carpetas que se han recuperado tras ejecutar la herramienta fsck.

Los archivos se almacenan en esta carpeta porque son datos que han tenido un nombre y una ubicación pero se han perdido. El contenido de estos archivos puede ser corrupto o incompleto, pero a veces podemos recuperar datos importantes.

Carpeta /media.

El directorio /media sirve como punto de montaje para los dispositivos extraíbles (memorias USB, discos duros externos, etc). Son dispositivos que se montan de forma temporal. Dentro de este directorio se suele crear un subdirectorio con el nombre del usuario que ha conectado el dispositivo extraíble.

Directorio /mnt.

Es un directorio vacío que sirve como punto de montaje para sistemas de archivos temporales. Leyendo la descripción anterior podemos pensar que es lo mismo que el directorio /media y en efecto son similares, pero no iguales.

La principal diferencias entre el directorio /media y /mnt, es que el primero lo utiliza el sistema de forma automática, mientras que el directorio /mnt lo suele usar el administrador del sistema para montar sistemas de archivos de forma temporal.

/opt.

Es un directorio en el que se almacenan los paquetes de software adicionales. Estos paquetes vienen ya pre-empaquetados con una estructura de directorios que no sigue los estándares establecidos por UNIX.

Son muchos los artículos que asemejan la carpeta /opt con la carpeta «Archivos de programa» de Windows. Dentro de esta carpeta, encontraremos cada paquete o aplicación representado por un subdirectorio.

Se dice que las aplicaciones instaladas en /opt son autocontenidas, porque cada paquete contiene todos los archivos y librerías necesarios para funcionar. Esto tiene la desventaja de que se puede llegar a malgastar espacio duplicando librerías y otros archivos. Por otro lado, ofrece la ventaja de que eliminar o instalar manualmente un programa resulta muy sencillo, aunque con los gestores de paquetes actuales no hay excusa.

/proc.

En el directorio /proc nos encontramos con archivos y carpetas en las que encontraremos información sobre el sistema operativo y sobre procesos que se están ejecutando. Todo el sistema de archivos de esta carpeta es virtual, lo crea el propio núcleo en la memoria, por lo que no existe físicamente en el disco.

/root.

En la carpeta /root encontramos el directorio especifico del usuario root o superusuario del sistema. Lo podemos asemejar con el directorio /home, pero en este caso está especialmente diseñado para el usuario root.

/run.

En la carpeta /run podemos encontrar archivos relativos a procesos que se han ejecutado o que pueden estar en ejecución. En los sistemas actuales la carpeta /run está reemplazando al directorio /var/run que se empleaba en el pasado.

/sbin.

Este directorio /sbin contiene todos los binarios de las herramientas de superusuario para la administración del sistema. Para acceder a estas herramientas necesitamos estar identificados como usuario root.

Los comandos disponibles en esta carpeta nos permiten gestionar aspectos tan importantes como el arranque del sistema operativo, restauración de archivos, reparación del sistema, etc.

/srv.

Dentro de la carpeta /srv encontramos los datos que pueden ser servidos por el sistema. Por ejemplo, si tenemos algún tipo de servidor instalado (web, ftp, dns, mail, etc), este puede servir datos desde su propia carpeta dentro de /srv.

/sys.

El directorio /sys se puede ver como una evolución del directorio /proc, ya que los contenidos son similares, es decir, información del sistema y sus procesos. Esta carpeta /sys también emplea un sistema de archivos virtual llamado sysfs, que representa la información de un modo más ordenado que su predecesor /proc.

/tmp.

Como ya podemos deducir de su nombre, en la carpeta /tmp se almacenan archivos de forma temporal. No podemos considerar que los archivos almacenados en esta carpeta se conserven en ningún plazo de tiempo, por muy corto que sea.

La recomendación general, es que en cada reinicio del sistema se borren de forma automática los archivos de esta carpeta.

/usr.

El directorio /usr toma su nombre de las siglas en inglés User System Resources. En esta carpeta encontraremos archivos de solo lectura que se corresponde con los comandos y herramientas de usuario.

Cuando instalamos un programa a través de un gestor de paquetes, por norma general se instala dentro de algún subdirectorio de esta carpeta. Los subdirectorios requeridos son:

subdirectorios usr linux

/var.

Dentro del directorio /var es donde encontraremos información relativa al sistema operativo y sus programas. Por ejemplo, podemos encontrar archivos de estadísticas, de registro de acciones, de registro errores, archivos de cache, etc. Los archivos de la carpeta /var contienen datos variables y que en ocasiones incluso se pueden almacenar de forma temporal.

Si tenemos algún problema con alguna aplicación, acudir a esta carpeta en busca de los registros de errores, suele ser de gran ayuda.

Para terminar.

Al final me he extendido más de lo que pretendía, pero creo que he dejado claro cómo se organizan las diferentes carpetas en sistemas operativos Linux. Si en algún punto no he sido lo suficientemente claro o detectáis algún error, os ruego que me lo comuniquéis.

Recordad que los directorios que os mostramos en este artículo son los más habituales y en algunas distribuciones se pueden organizar de otra forma. Por poner un ejemplo, en Ubuntu recientemente se ha incluido la carpeta /snap, donde se instalan todas las aplicaciones distribuidas como paquetes Snap.