Estructura de directorios en Linux

Lo más llamativo de la estructura de directorios en Linux, especialmente para aquellas personas que vienen de Windows, es la inexistencia de letras de unidad. En Linux existe un directorio raíz (/) del cual se ramifican el resto de directorios y donde cada dispositivo de almacenamiento o partición se monta dentro de este directorio raíz. En este tutorial usted se familiarizada con la estructura de directorios en Linux, y además obtendrá una panorámica del contenido de estos directorios.

Historia
La estructura de directorios, así como la ubicación de los archivos, en Linux provienen en gran medida de 40 años de historia de Unix. En los comienzos de Linux no se siguió el mismo patrón organizativo lo que generó grandes problemas y bastante confusión. Para combatir este problema se desarrollo FSSTND (Estándar del sistema de ficheros).

FSSTND estandarizo los programas que se encontraban en /bin y /usr/bin, especifico que los ejecutables no debían estar en /etc (algo muy común hasta entonces), eliminó los archivos variables de /usr...Se publicarón varias versiones principales de FSSTND (1.0, 1.1 y 1.2). En 1995, con el apoyo de la comunidad BSD, se desarrollo una versión más amplia que pudiera ser usada por otros sistemas derivados de Unix, este estándar de mayor amplitud fue denominado FHS (Estándar de Jerarquía de Sistemas de Archivos), y es el que dirige en la actualidad a muchos sistemas nix, incluyendo a Linux y BSD.

FHS
FHS estructura el sistema de archivos de acuerdo a dos importantes distinciones: archivos compartibles/no compartibles y archivos estáticos/variables.

  • Archivos compartibles: son aquellos que pueden ser compartidos con otros ordenadores. Algunos ejemplos son los archivos contenidos en /usr, /opt...
  • Archivos no compartibles: son aquellos que contienen información específica del sistema, y por ello no deben ser nunca compartidos. Algunos ejemplos son los archivos contenidos en /etc, /root...
  • Archivos estáticos: son aquellos que no cambian normalmente, excepto intervención directa del administrador del sistema. Un buen ejemplo de ello son los archivos de configuración (/etc), las bibliotecas (/lib), los programas (/opt, /usr...)...
  • Archivos variables: son aquellos que pueden cambiar por intervención del usuario, scripts, taréas automatizadas, demonios activos... Un buen ejemplo son los directorios home de los usuarios (/home), los archivos de registro, colas de impresión, correo... (/var).
Por tanto FHS aísla cada directorio de acuerdo a una matriz de 2x2. En aquellos casos en que el directorio sea mixto, como /var, se intenta clasificar los subdirectorios de acuerdo a estos parámetros.
Compartible
No compartible
Estático
/usr /opt /bin /sbin /lib     /etc /boot
Variable  
/home /var/mail /tmp /var/run /var/lock /root
FHS depende de The Linux Foundation. La última versión de este estándar, publicada en enero de 2004, es FHS 2.3. Es importante conocer la estructura de directorio de Linux, así como el propósito de cada uno, para evitar problemas a largo plazo. Imagine que usted descarga una pequeña aplicación, ¿donde debería alojar la aplicación /bin, /sbin, /usr/bin, /usr/local/? A continuación podrá conocer los principales directorios definidos por FHS así como su propósito.
*Nota: En lugar de optar por una ordenación alfabético se ha tratado de seguir un orden lógico.
  • /: También conocido como directorio raíz. Es el más importante, ya que a partir de él se ramifican el resto de directorios.
  • /boot: Contiene los archivos requeridos en el arranque del sistema; como mínimo el kernel y los ficheros de configuración del cargador de arranque.
  • /bin: Contiene los comandos esenciales, accesibles por todos los usuarios, tales como lscprm, mkdir, loginpwdsumountumount.... No deben existir subdirectorios en /bin.
  • /sbin: Contiene los comandos esenciales, solo accesibles por el administrador del sistema, tales como fdisk, fsck, ifconfig, router...
  • /lib: Contiene las bibliotecas de los programas. El subdirectorio /lib/modules contiene los módulos del kernel.
  • /home: Contiene los datos de usuario. Según FHS el nombre de dicho directorio es opcional, sin embargo la denominación /home está ampliamente extendida.
  • /root: Es el directorio home del usuario root. De acuerdo al estándar FHS no es obligatoria esta ubicación, sin embargo es recomendable.
  • /usr: Es el segundo directorio más importante, alberga el grueso de los programas Linux. De acuerdo al estándar FHS se estructura de la siguiente forma:
    • /usr/bin: Contiene la mayoría de comandos no esenciales, accesible por todos los usuario. En este directorio se aloja, entre otros, alsamixer, cdrdao, chroot, lp, locale, java, man, nice, perl, python, ssh... Así como todos los programas instalados por el administrador, y que no precisan privilegios de root, tales como entornos gráficos, procesadores de texto, reproductores multimedias, juegos...
    • /usr/sbin: Contiene la mayoría de comandos no esenciales, accesible solo por el administrador del sistema, tales como cron, fancontrol, lspci, lsusb, mkfs.ntfs, mkfs.vfat, ntpdate, parted, useradd, userdel...Así como todos los programas instalados por el administrador, y que precisan privilegios de rot, tales como gparted o demonios como bluetoothd, ntpd, cupsd, sshd, smbd...
    • /usr/lib: Al igual que /lib, contiene las bibliotecas de los programas alojados en /usr.
    • /usr/include: Contiene los archivos de cabecera de los programas en C.
    • /usr/share: Contiene datos que pueden ser compartidos entre distintas plataformas (i386, alpha, PPC, amd64...), como por ejemplo fuentes de letras, plantillas, páginas del manual man, diccionarios, imágenes, sonidos... 
    • /usr/local: Contiene los programas instalados localmente por el administrador del sistema. El objetivo de este directorio es tener un área que este a salvo durante las actualizaciones del sistema. Tras la instalación del SO /usr/local debería estar vacío
  • /opt: Es un directorio similar a /usr/local, pero está pensado para paquetes precompilados opcionales de aplicaciones estáticas, tales como flash-player, IcedTea (máquina virtual de Java)...
  • /tmp: Contiene los archivos temporales generados por los programas. Estos archivos y/o directorios es probable que no sean conservados entre dos ejecuciones del mismo programa. Las distribuciones incluyen rutinas que limpian de forma periódica /tmp.
  • /var: Contiene archivos de datos variables, muchos de ellos efímeros tales como colas de impresión, archivos de bloqueo, información relevante sobre procesos en ejecucción... Se estructura de la siguiente forma:
    • /var/cache: Funciona como memoría cache para las aplicaciones en ejecución.
    • /var/lib: Contiene información de estado de los procesos en ejecución.
    • /var/local: Contiene los datos variables de /usr/local.
    • /var/lock: Contiene archivos de bloqueo de dispositivos y otros recursos compartidos.
    • /var/log: Cotiene archivos de registro (logs).
    • /var/opt: Contiene los datos variable de /opt.
    • /var/run: Contiene datos relevantes sobre demonios en ejecución, usuarios logeados en el sistema...
    • /var/spool: Contiene las colas de datos (spool) en espera de ser procesadas tales como colas de impresión, emails...
    • /var/tmp: Contiene archivos temporales que aun siendo prescindibles no son eliminados como ocurren con los temporales de /tmp.
  • /mnt: Proporciona al administrador del sistema un punto donde montar temporalmente sistemas de archivos.
  • /media: Contiene subdirectorios que son usados para montar sistemas de archivos removibles, tales como unidades de CD, discos usb, tarjetas de memoria...
  • /dev: Es un sistema de archivos virtual que contiene punteros hacia los dispositivos físicos. El kernel Linux crea el sistema de archivos virtual /dev automáticamente en cada inicio, y es poblado con los dispositivos de hardware a través de udev. 
  • /proc: Es un sistema de archivos virtual, creado dinámicamente para proporcionar acceso a determinada información acerca de los dispositivos, y que no es accesible a través de /dev. Un ejemplo de ello lo obtendrá escribiendo cat /proc/cpuinfo.
Si usted ha leído, y asimilado, esta información no debería tener problemas para resolver la pregunta que se le formulo en el parrafo anterior: Imagine que usted descarga una pequeña aplicación, ¿donde debería alojar la aplicación /bin, /sbin, /usr/bin, /usr/local/? Lo correcto sería hacerlo en /usr/local/, ya sea /usr/local/bin o /usr/local/sbin en función de los privilegios que sean necesarios para ejecutarlo. De esta forma, nos aseguramos que el programa que hemos descargado e instalado manualmente no es sobrescrito por el administrador de paquetes en una actualización del sistema.

1 comentarios:

#
Unknown dijo...

Navegando me encontré con una entrada de linuxconfig, titulada Filesystem Basics, donde utilizan una imagen para explicar la estructura del sistema de archivos de linux.

Sencillamente genial.

Publicar un comentario

Recuerde que puede utilizar algunos códigos HTML como <b>para negrita</b>, <i>para cursiva</i> y <a href="URL">para enlaces</a>.