LPIC-1 Tema 104.7: jerarquía FHS y localización de ficheros y directorios

Nueva entrada sobre las certificaciones LPIC-1, con lo que debes saber sobre el tema 104.7. Es decir, sobre la jerarquía FHS (Filesystem Hierarchy Standard), incluyendo la localización típica de los ficheros y directorios más importantes del sistema operativo, así como la clasificación de los mismos.

El futuro administrador de sistemas GNU/Linux que se enfrente a las preguntas de estas certificaciones referentes a este tema, deberá contestar adecuadamente preguntas sobre la jerarquía típica FHS, usar comandos para localizar ficheros y directorios, así como saber la localización y propósito de los ficheros y directorios más importantes definidos por el estándar.

FHS

FHS jerarquía

FHS (Filesystem Hierarchy Standard) es un estándar de jerarquía del sistema de archivos. Un esfuerzo para estandarizar la localización y ayudar a los administradores y desarrolladores. Ha habido varias revisiones, como la 3.0 de 2015.

El estándar FHS es el modelo que siguen muchas distribuciones, pero no todas. Por tanto, encontrarás algunas variaciones. Lo mismo ocurre en otros sistemas Unix y Unix-likes, en los que hay discrepancias en la forma de alojar los datos.

Dentro de la jerarquía puedes encontrar directorios compartidos y restringidos, así como estáticos y dinámicos o variables. Por ejemplo:

  • /opt y /usr: serían de tipo compartido y estático.
  • /var/mail y /var/spool/nes: serían compartidos y dinámicos o variables.
  • /etc y /boot: serían restringidos y estáticos.
  • /var/run y /var/lock: son restringidos y dinámico o variables.

Otro estándar es el LSB (Linux Standard Base), que se ha basado en las especificaciones POSIX y registrado bajo norma ISO. Impulsado por la comunidad de desarrollo para poner orden y normalidar la estructura interna de los sistemas operativos basados en Linux.

Tanto FHS como LSB han sido pensados para facilitar el trabajo de usuarios y mejorar la compatibilidad, pero LSB va más allá al normalizar también el funcionamiento, bibliotecas, niveles de ejecución, extensiones del sistema gráfico, etc., así como los propios directorios. Así cualquier software debería funcionar adecuadamente sin importar el sistema.

Jerarquía y directorios

  • /: el directorio raíz o root. El más importante y de jerarquía primaria. De él cuelgan el resto de diretorios, independientemente de si se encuentran en otros medios de almacenamiento o particiones.
  • /bin: donde se almacenan los binarios esenciales disponibles en el sistema. Por ejemplo: bash, mv, pwd, ping, cat, ls, cd, cpu, chmod, rm, mkdir, etc.
  • /boot: contiene los directorios y ficheros necesarios para el proceso de arranque. Es decir, las imágenes del kernel, el boot loader, etc.
  • /dev: donde se encuentran los dispositivos. Recuerda que en Unix/Linux todo es un archivo, por tanto, las unidades de hardware se representan también como archivos. Encontrarás ficheros especiales de bloques, de caracteres, etc. Por ejemplo: mouse, urandom, random, null, cpu, cdrom, mmcblk0, etc.
  • /etc: almacena la configuración del sistema y algunos programas esenciales. Por ejemplo: sudoers, securetty, exports, bash.rc, passwd, shadow, groups, fstab, services, resolv.conf, etc.
  • /lib o /lib32 y /lib64: contiene bibliotecas compartidas necesarias para el sistema y el software, así como /lib/modules donde están los módulos del kernel. En sistemas de 64-bit se incluye uno para este tipo de bibliotecas y las de 32 para retrocompatibilidad.
  • /media: anclaje de los puntos de montaje de medios de almacenamiento extraíbles o temporales.
  • /mnt: similar al anterior.
  • /opt: contiene paquetes de algunos programas grandes de terceros, como algunos navegadores web, software antivirus, software propietario, etc. Dentro de él existe una subjerarquía similar al nivel superior, por lo que puedes encontrar subdirectorios como /opt/bin, /opt/lib, /opt/sbin, /opt/share, etc., para cumplir la misma función que sus homónimos superiores, pero para este software de terceros.
  • /proc: es un directorio virtual que contiene información sobre los procesos en marcha. ¿Lo recuerdas? Ya hablamos de él y seguiremos hablando…
  • /root: es el home del root.
  • /run: es más reciente que otros, y sustituye a /var/run en algunas distros, usando enlaces simbólicos para que todo siga funcionando adecuadamente.
  • /sbin: son los System BINaries, es decir, los binarios del sistema. Similar a bin pero se encuentran herramientas de administración del sistema como: shutdown, udev, iptables, route, init, fstab, sulogin, tune2fs, etc.
  • /sys: otro sistema de ficheros virtual como /proc, por tanto, otra de esas inferfaces que tanto «molan» en el mundo *nix. Una forma de exportar objetos del kernel.
  • /swap: aunque algunas no tengan /swap, sino que tengas un swapfile, pero es un directorio o partición para la memoria de intercambio. Sirve para alojar todos esos procesos que no caben en la RAM y que el planificador del sistema operativo va subiendo o descargando de la RAM en función de las prioridades de ejecución. Si existe otro sistema operativo instalado de tipo Unix podrían compartir la SWAP, por ejemplo con Solaris. Incluso se podría hacer con pagefile.sys de Windows…
  • /tmp: para almacenar temporales que usan ciertos programas en tiempo de ejecución.
  • /usr: son las siglas Unix Specific Resources, y en un principio se usaba como directorio personal para los usuarios, pero luego se movieron a /home/. Ahora se usa para otro objetivo, con una jerarquía secundaria donde se instala la mayoría de software del sistema que no es esencial. Por eso encontrarás subdirectorios que nuevamente imitan la jerarquía superior: /usr/bin, /usr/lib, /usr/sbin, /usr/share, /usr/src (para el código fuente de los paquetes, como /usr/src/linux para el código fuente del kernel), etc.
  • /var: destinado para datos de tamaño variable como bases de datos, logs o registros del sistema, datos de servidores, emails, ficheros spool, etc. Uno importante es /var/log, donde se almacenan los registros.

Podría haber otros, como /srv, un directorio especial para los datos servidos por el sistema. No es parte del FHS, al igual que tampoco lo es /lost+found, que contiene ficheros y fragmentos rescatados durante un fsck.

Herramientas

Las herramientas que deberías conocer y saber utilizar para este tema son bastante sencillas, aunque find puede ser algo más compleja debido a la cantidad de opciones que puede aceptar.

find

El comando find, como indica su nombre, sirve para encontrar ficheros y directorios que estás buscando. Acepta gran cantidad de opciones, por lo que te recomiendo leer el manual y practicar. Pero aquí tienes algunos ejemplos destacados:

#Encontrar un nombre determinado en el directorio actual con case sensitive y sin ella respectivamente
find . -name "nombre"
find . -iname "nombre"

#Para buscar en otro directorio, por ejemplo, en el raíz, es decir, en todo el sistema
find / -name "nombre"

#Buscar los que no coincidan con nombre
find /etc -not -name "nombre"

#Se puede buscar por tipo, si recuerdas en los artículos anteriores sobre LPIC ya lo expliqué. Por ejemplo, un directorio, un fichero normal y un enlace simbólico respectivamente:
find . -type d -name "nombre"
find . -type f -name "nombre"
find . -type l -name "nombre"

#Buscar por tiempo de acceso (atime), tiempo de modificación (mtime), etc. Por ejemplo, modificado hace más de 2 días
find / -type f -mtime +2 -name "nombre"

#Por su tamaño con size (k, M, G,...). Por ejemplo, un fichero de 10MB o de más de 4GB sin importar el nombre:
find . -type f -size 10M
find . -type f -size +4G 

#Encontrar por usuario, grupo o permisos (muy útil para seguridad). Por ejemplo:
find /home -user isaac
find /media -group root
find .  -perm -644

#Encontrar directorios y ficheros vacíos
find / -empty

#Para más opciones ver manual
man find

locate

Es una alternativa a find y más rápido, aunque locate no sea tan poderoso como el anterior. Y es que depende de una base de datos indexada y por ello, a veces puede no localizar ciertos ficheros o directorios e incluso mostrar búsquedas de algunos que ya fueron eliminados. Todo dependerá de lo actualizada que esté la bbdd de la que depende. Ahí radica su rapidez, pero también su mayor debilidad…

#Encontrar un nombre 
locate sysctl.conf

#Más información
man locate

#Para localizar la bbdd de la que depende locate puedes usar 
updatedb

Para configurar esta basde de datos, puedes modificar el fichero /etc/updatedb.conf donde están los parámetros.

whereis

Es un comando muy sencillo. Esta herramienta whereis puede localizar un binario, código fuente y página del manual relacionada con el nombre de un programa especificado.

#Buscar un binario
whereis ls

#Buscar solo el código fuente
whereis -b pwd

#Buscar solo el código fuente
whereis -s cd

#Buscar solo la página del manual
whereis -m systemctl

which

Similar al anterior, en el caso de which muestra dónde se encuentra un binario o ejecutable correspondiente al nombre especificado.

#Buscar un ejecutable
which find

#Buscar todas las coincidencias
which -b firefox

type

Es muy útil para identificar comandos o el path del mismo. Por ejemplo:

#Muestra ruta y coincidencias
type -Pa apt

Con esto pongo fin al 104.x y pasamos al 105.x en los futuros artículos de esta serie…

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar