Lathack

Jerarquía y Documentación en Linux

Jerarquía y Documentación en Linux

¿Qué es FHS?

Anteriormente estuvimos hablando sobre el objeto del sistema de archivo con respecto a los indos y directorios. En este apartado, vamos a desarrollar el tema de la estructura de archivos del sistema y algunos comandos básicos para poder encontrar archivos.

Sin embargo, antes de empezar a explicar, hay que introducir el término de FHS (Filesystem Hierarchy standard) . Un estándar a seguir para las distribuciones de Linux, que se refiere a la forma en que se utiliza el sistema de archivos en Linux.

Estructura básica

Hay dos grupos independientes de archivos, shareables/unshareables y variables/static.

Shareable

Los datos pueden ser usados por múltiples sistemas en una red. Los archivos que se pueden compartir y que son información de propósito general, en donde existe ninguna atadura en ningún host. Un ejemplo de estos archivos pueden ser archivos de datos, archivos de programas ejecutables y documentos del sistema.

Non-Shareable

Aquella información que no se puede compartir, dado que está atada a un equipo en particular, como por ejemplo, archivos de configuración (file system).

Variable

Los datos son considerados variables cuando estos cambian sin intervención del usuario /root. Ejemplo de estos pueden ser archivos de usuarios y/o registros de eventos del sistema (logs).

Ejemplo: /var/log/messages, /var/log/syslog

Static

Son aquellos archivos que no interactúan con nadie y permanecen siempre iguales durante todo el dia o años enteros. Un ejemplo pueden ser los binarios de determinados comandos (bash, ls) en donde solo cambian cuando se actualiza el sistema. Algunos directorios en el sistema de ficheros de Linux están destinados a contener los tipos específicos de datos. Por ejemplo, los archivos ejecutables en /usr rara vez cambian sin la intervención del administrador o usuarios con privilegios, por lo que pueden definirse como algo estático, debido a que son necesarios para todos los usuarios en una red.

Antes de que los discos fueran tan grandes como lo son hoy, los archivos que se encontraban comúnmente en /usr se montaban a menudo desde servidores remotos para conservar espacio en el disco local. Así, además de ser estático, /usr se dice que es compartible. Por tanto, mantener los archivos organizados con respecto a estos atributos puede simplificar el intercambio de archivos, administración de sistemas, y la complejidad de copia de seguridad, así como reducir los requerimientos de almacenamiento.

Organización de categorías de datos en FHS

Static:

Shareable:  

/usr 

/opt

Unshareabe:

 /etc 

/opt

Variable:

Shareable: 

/var/mail

/var/cache/fonts

/home

Unshareabe:

/var/run

/var/log

En algunas redes, /usr y /usr/local se montan por las estaciones de trabajo individuales de un servidor NFS. Esto puede ahorrar una cantidad considerable de almacenamiento local en dichos lugares. También es importante saber que, la colocación de estos directorios en otro sistema puede hacer que las actualizaciones y upgrades sean mucho más simples. Estos directorios suelen ser compartidos como sistemas de archivos de solo lectura porque no son modificados por la mayoría de usuarios finales.

 /var/mail y directorios /home, por el contrario, se comparten pero son cambiados regularmente por los usuarios.

 /etc y /boot contienen archivos que son estáticos en el sentido que sólo el administrador puede cambiarlo, pero el uso compartido de ellos no es necesario o aconsejado, porque son archivos de configuración local.

 /var/log y /proc son directorios muy dinámicos, pero también son solo de interés local.

Directorios Esenciales

El FHS ofrece un significativo nivel de detalle que describe la localización exacta de los archivos, utilizando la lógica derivada de la definición static/variable y shareable/unshareable.

Esta sección trata sobre las partes más importantes de la jerarquía de directorios FHS. El sistema de archivos raíz se encuentra en la parte superior de la jerarquía de directorios.

Según este estándar los objetivos para el sistema de archivos raíz es:

  • Arrancar el sistema, ya que debe estar el software y los datos suficientes en la partición raíz para montar otros sistemas de archivos. Los directorios /usr, /opt y /var suelen ubicarse en Otras particiones o sistemas de archivos.

  • Posibilitar la recuperación o reparación de un Sistema.

  • Restaurar un sistema, por ejemplo aquellas herramientas necesarias para recuperar backups.

  • Ni las aplicaciones y/o distribución deberían crear archivos o subdirectorios adicionales en el directorio raíz.

  • El sistema de archivos raíz debe contener sólo los esenciales directorios del sistema, junto con los puntos de montaje para otros sistemas de archivos.

Aunque en un sistema Linux con todo en una sola partición raíz se puede crear, el hacerlo así no cumpliría con estos objetivos.

En cambio, el sistema de archivos raíz debe contener sólo los esenciales directorios del sistema, junto con los puntos de montaje para otros sistemas de archivos.

Directorios No Esenciales

El resto de directorios de nivel superior en el sistema de archivos raíz se consideran no esenciales para los procedimientos que sean de emergencia:

  • /boot

  • /home

  • /opt

  • /tmp

  • /usr

  • /var

El directorio /usr

El sistema de archivos /usr contiene utilidades de sistema y programas que deben estar en la partición raíz. Por ejemplo, los comandos tales como less y la tail se encuentran en /usr/bin.

El directorio /usr/sbin contiene comandos de administración del sistema, tales como adduser y traceroute, y una serie de demonios sólo necesarios cuando el sistema funciona normalmente. No hay datos específicos del host o datos variables que se almacenen en /usr.

También es rechazada la colocación de directorios directamente en /usr para los paquetes de software grandes (a excepción de X11).

Los siguientes subdirectorios se encuentran en /usr :

  • /usr/bin

  • /usr/include

  • /usr/lib

  • /usr/local

  • /usr/sbin

  • /usr/share

El directorio /var

El sistema de archivos /var contiene datos tales como, el de la cola de impresión y los archivos de registro de bitácoras que varían con el tiempo.

Puesto que los datos variables siempre están cambiando y creciendo, /var es por lo general contenida en una partición separada para evitar el llenado de la partición raíz.

Los siguientes sub-directorios se requieren en /var :

  • /var/cache

  • /var/lib

  • /var/local

  • /var/lock

  • /var/log

  • /var/opt

  • /var/run

  • /var/spool

  • /var/tmp

Binarios

Los directorios bin y sbin, se llaman así porque poseen archivos ejecutables, los cuales se encuentran compilados como binarios.

Veamos sus directorios y el uso de cada uno:

Comandos del usuario:

  • Suministrados por la distribución /bin (sistema de archivos raíz)
  • Suministrados por la distribución /usr/bin/ (sistema de archivos /usr)
  • Suministrados localmente (por ejemplo, compilados a mano) /urs/local/bin. No son esenciales (sistema de archivos /usr/local)

Comandos de Administrador:

  • Suministrados por la distribución /sbin (sistema de archivos raíz)
  • Suministrados por la distribución /usr/sbin/ (sistema de archivos /usr)
  • Suministrados localmente (por ejemplo, compilados a mano) /urs/local/sbin son esenciales (sistema de archivos /usr/local)

Herramientas de Búsqueda

FHS sirve como una guía para ubicar y encontrar archivos y directorios. Sin embargo, eso no nos garantiza encontrar cualquiera de estos. Linux proporciona varias herramientas para buscar archivos, las principales son:

  • which muestra la ruta de los comandos usando la variable entorno PATH.

  • find busca archivos en un árbol de directorios.

  • whereis muestra la ruta de los comandos junto con las de sus páginas del manual.

  • locate ofrece busca archivos indexados en una base datos en lugar del propio sistema de archivos.

Recordar siempre que podemos saber las opciones de dichos comandos usando el manual. Es decir, abrimos una terminal y colocamos man comando (por ejemplo, man which) o también podemos usar: comando –help (por ejemplo, find –help).

Veamos sus detalles en profundidad

Comando whereis

Sintaxis

whereis (options) nombre de archivo

whereis localiza source/binarios y manuales para los archivos especificados.

Por ejemplo:

#whereis ls

ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz

Comando which

Determina la ubicación del comando y muestra la ruta completa del programa ejecutable que la shell lanzaría para ejecutarlo. Este sólo busca las rutas definidas en la variable PATH.

Ejemplo:

# which zhsh

/bin/zhsh

Comando find

El comando find es una herramienta muy usada y potente ya que permite buscar, entre otras cosas:

  • En la jerarquía del sistema de archivos, dentro de un determinado directorio.

  • Archivos por nombre y tipo

  • Archivos por marcas de tiempo y permisos

  • Archivos de acuerdo a su dueño

Sintaxis:

find (options) [path..] {expression or arguments}

-mount no seguirá buscando en forma recursiva por directorios que fueron montados. -maxdepth X se le indica cuál es la cantidad máxima de subdirectorios que deseamos que recorra. perm -m para buscar por permisos (-perm 667)

Tipo de búsquedas:

Buscar por nombre:

Jerarquía y Documentación en Linux

Siempre conveniente encerrar entre comillas para que la shell no reemplace automáticamente los metacaracteres en el directorio actual.

Buscar aquellos archivos que se hayan creado hace más de 5 días, y máximo un subdirectorio de profundidad:

Jerarquía y Documentación en Linux

Buscar archivos .tmp sin importar mayúsculas o minúsculas y ejecutar una acción sobre los archivos encontrados:

# find /home -iname «*.tmp» -exec rm -i ‘{}’ \;

La cadena de texto ‘{}’ es reemplazada por el archivo procesado por find, y el \; significa que no hay más argumentos para el comando después del exec (en este caso rm). Tanto las comillas simples como la contrabarra se ponen para que bash interprete de manera literal esos caracteres.

Buscar por tamaño:

Buscará los archivos mayores a 110MB. En este caso solo se encontró un archivo con esas características

Comando updatedb

Sintaxis:

updatedb (opciones)

Actualizar (o crear) la base de datos slocate en /var/lib/slocate/slocate.db.

Ejemplo para actualizar sólo el contenido en un grupo de directorios

# updatedb -e ”/dev /proc /home

Hay parámetros especiales, donde podemos hacer que realice la búsqueda por red o que no busque en determinados sistemas de archivos.

# cat /etc/updatedb.conf

PRUNEFS = «auto afs gfs gfs2 iso9660 sfs udf»

PRUNEPATHS = «/afs /media /net /sfs /tmp /udev /var/spool/cups /var/spool/squid /var/tmp«

Comando locate

Sintaxis locate (patrón)

La búsqueda se realiza en un índice, creado con el comando updatedb, busca los archivos cuyos nombres coincidan con uno o más patrones.

Buscar el patrón sh:

# locate zyxel

/usr/share/wireshark/radius/dictionary.zyxel

El comando locate debe tener una base de datos reciente para la búsqueda, y la base de datos debe ser actualizada periódicamente para incorporar los cambios en el sistema de archivos. Si dicha base de datos está demasiado desactualizada, el comando puede advertirnos como vemos a continuación:

# locate tcsh

locate: warning: database /var/lib/slocate/slocate.db’ is more than 8 days old

Para actualizarla hay que ejecutar el comando updatedb

Deja una respuesta

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

cinco + dieciocho =

Lathack
Scroll al inicio