En este momento estás viendo Shell 3 El sistema de ficheros

Shell 3 El sistema de ficheros

El sistema de ficheros

En los sistemas operativos UNIX y Linux, todo son ficheros. Los ficheros (archivos), los directorios (carpetas) y los dispositivos (discos, DVDs, Pendrives, etc..) todo son ficheros. Y ,aunque a los dispositivos se les llame nodos, siguen siendo ficheros.

El sistema de ficheros es la forma en que el sistema operativo organiza los ficheros en el disco duro, de manera que los datos estén estructurados y sin errores.

Estos ficheros se organizan en una estructura jerárquica en forma de árbol invertido. El nivel más alto es «/» (raiz) y de él cuelgan todos los demás ficheros.

Para establecer la posición de un fichero se utilizan las rutas, por ejemplo, «/home/javier/Documentos/documento.txt» nos indica como hemos de descender desde la raiz «/» hasta el «documento.txt». Esto es la ruta absoluta, siempre empezará por «/» o por «~/». La ruta relativa se refiere a la ruta desde el directorio en el que nos encontremos, así siempre empezara por «./», o «../».

Colgando del directorio raiz «/», en la mayoría de distribuciones GNU/Linux, tenemos una serie de directorios que son comunes a todas ellas. Veamos algunos de los directorios más importantes de Linux y lo que contienen:

  • / – directorio raiz
    • /bin – aplicaciones binarias importantes (comandos)
    • /boot – Ficheros de configuración del arranque, núcleos y otros ficheros necesarios para el arranque (boot) del equipo.
    • /dev – los ficheros de dispositivo
    • /etc – ficheros de configuración, scripts de arranque, etc.
    • /home – directorios personales (home) para los diferentes usuarios.
    • /initrd – para crear un proceso de arranque initrd personalizado.
    • /lib – librerías del sistema
    • /lost+found – proporciona un sistema de «perdido+encontrado» para los ficheros que existen debajo del directorio raíz (/)
    • /media – particiones montadas automáticamente en el disco duro y medios (media) extraíbles como CDs, cámaras digitales, etc.
    • /mnt – sistemas de archivos montados manualmente en el disco duro.
    • /opt – proporciona una ubicación donde instalar aplicaciones opcionales (de terceros)
    • /proc – directorio dinámico especial que mantiene información sobre el estado del sistema, incluyendo los procesos actualmente en ejecución
    • /root – directorio personal del usuario root (superusuario); también llamado «barra-root».
    • /sbin – binarios importantes del sistema (comandos)
    • /srv – puede contener ficheros que se sirven a otros sistemas como Servidores.
    • /sys – ficheros del sistema (system)
    • /tmp – ficheros temporales. «temporary files«
    • /usr – aplicaciones y ficheros a los que puede acceder la mayoría de los usuarios
    • /var – ficheros variables como ficheros de registros y bases de datos

Este árbol de directorios lo encontraremos en la mayoría de distribuciones, pero en algunas veremos que hay algunas diferencias. Por ejemplo, en Fedora la estructura cambia un poco.

  • / es el directorio raíz. Dentro del directorio raíz encontramos varios subdirectorios importantes:
    • /bin contiene ficheros de comandos ejecutables utilizables por todos los usuarios. Aquí tenemos los programas que pueden lanzar todos los usuarios del sistema.
    • /sbin es para ejecutables de uso exclusivo por el superusuario. Son los necesarios para arrancar y montar el directorio /usr.
    • /home es un directorio donde se encuentran los directorios personales de los usuarios del sistema.
    • /usr contiene utilidades y programas generales de usuario:
      • /usr/bin contiene programas de uso general.
      • /usr/share contiene ficheros compartibles, independientes de la arquitectura.
        • /usr/share/doc contiene cierta documentación del sistema.
        • /usr/share/man contiene los manuales.
      • /usr/etc contiene ficheros de configuración de uso global.
      • /usr/include contiene las cabeceras de C y C++.
      • /usr/lib contiene las bibliotecas de nuestros programas.
      • /usr/sbin contiene los programas de administración del sistema.
      • /usr/src contiene los códigos fuente de nuestros programas.
    • /dev contiene ficheros especiales de bloques y caracteres asociados a dispositivos hardware. Aquí encontramos todos los dispositivos físicos del sistema (todo nuestro hardware).
    • /lib contiene librerías y compiladores del sistema.
    • /proc contiene los ficheros que reciben o envían información al núcleo.
    • /etc contiene los ficheros de configuración y utilidades para la administración.
    • /var contiene ficheros para el administrador. Este directorio contiene información variable, como registros, datos de los servidores, etc.
    • /boot contiene los ficheros de configuración del arranque del sistema, como por ejemplo GRUB.
    • /media contiene todas las unidades físicas que tenemos montadas: discos duros, unidades de DVD, pen drives, etc.
    • /opt sirve para admitir ficheros nuevos creados tras la modificación del sistema. Es un punto de montaje desde el que se instalan los paquetes de aplicación adicionales. Podemos usarla para instalar aplicaciones que no vienen en los repositorios, por ejemplo, aquellas que compilamos a mano.
    • /tmp es donde se almacenan los ficheros temporales.

Además de los directorios que acabamos de ver, hay 2 directorios especiales:

  • Directorio actual (.): es un directorio especial que hace referencia al directorio en el que estamos. Si apuntamos al directorio «.», nos estaremos refiriendo al directorio actual.
  • Directorio padre (..): es un directorio especial que hace referencia al directorio padre del directorio en el que estamos. Si apuntamos al directorio «..» nos estaremos refiriendo al directorio padre del actual. El único directorio que no tiene directorio padre es el directorio raíz «/».

Estos directorios son muy útiles a la hora de hacer referencia a rutas relativas.

Tipos de fichero en Linux

En Linux existen básicamente 5 tipos de ficheros:

  • Ficheros ordinarios. Son los ficheros con los que trabaja cualquier usuario.
  • Enlaces físicos o duros (hard links). No son ficheros en si, sino un segundo nombre que se le da a un fichero. Por ejemplo, dos usuarios están trabajando con un mismo fichero, si cada uno tiene una copia diferente del mismo fichero, no podrán visualizar los cambios que el otro usuario realice. Sin embargo, si creamos un enlace duro al fichero para cada usuario, cada vez que uno de ellos haga modificaciones en el fichero original, el otro lo podrá ver modificado, puesto que realmente están viendo y modificando el mismo fichero. El enlace apunta al fichero en su ubicación real, pero no es un fichero real. Así se puede compartir un mismo fichero entre varios usuarios sin necesidad de hacer copias del fichero.
  • Enlaces simbólicos. Tampoco son ficheros en si. También son enlaces a otro fichero. La diferencia con los enlaces duros estriba en que los enlaces simbólicos solamente hacen referencia al nombre del fichero original, mientras que los duros hacen referencia al inodo en el que están situados los datos del fichero original. Por lo tanto, si tenemos un enlace simbólico y borramos el fichero original perderemos los datos, mientras que si tenemos un enlace duro los datos no se borrarán hasta que se hayan borrado todos y cada uno de los enlaces duros que existen hacia ese fichero. El conteo del número de enlaces duros que tiene un fichero se realiza, en el inodo correspondiente a los datos del fichero.
  • Directorios. Son ficheros especiales (carpetas) que contienen otros directorios y ficheros.
  • Ficheros especiales. Entendemos como tales los dispositivos físicos, como unidades de almacenamiento, impresoras, terminales, etc. En Linux, todo dispositivo físico que se conecte al ordenador será reconocido como un fichero. Linux trata los ficheros especiales como ficheros ordinarios.

Linux admite nombres de fichero largos y podemos usar cualquier carácter excepto «/». De todas maneras, por tener un significado especial en Linux, no deberíamos utilizar los siguientes caracteres:

\ ^ ~ ! # ? & ( ) ´ " ` ; · $ = ¿ ¡ < > @ { } * + -

Otra característica de Linux es que distingue mayúsculas y minúsculas, por lo que los ficheros «fichero1.txt» y «Fichero1.txt» son ficheros distintos.

Con el sistema de ficheros de Linux podemos, como usuarios, crear, borrar y acceder a los ficheros sin necesidad de conocer su ubicación exacta.

Inodos

El sistema de ficheros de Linux consta de varias partes importantes:

  • Superbloque
  • Tabla de inodos
  • Bloques de datos

En Linux cada bloque es de 512 bytes o de múltiplos de 512. Al igual que el cluster era la unidad del sistema de ficheros FAT, en ext4 es el bloque.

En la siguiente tabla podemos ver un esquema del sistema de ficheros de Linux:

El bloque de carga o bloque cero de cada sistema está reservado para almacenar un programa que utiliza el sistema para gestionar el resto de las partes del sistema de ficheros.

El superbloque o bloque uno contiene la información sobre el sistema de ficheros.

La tabla de inodos es el equivalente a las entradas de la FAT. En Linux cada fichero tiene asociado un elemento en esta tabla que contiene un número (inodo). Este número identifica la ubicación del fichero dentro del área de datos.

Cada inodo contiene la información de un fichero o directorio que a continuación vemos,

  • El identificador de dispositivo del dispositivo que alberga al sistema de ficheros.
  • El número de inodo que identifica al fichero dentro del sistema de ficheros.
  • La longitud del fichero en bytes.
  • El identificador de usuario del creador del fichero o un propietario del fichero con derechos diferenciados.
  • El identificador de grupo de un grupo de usuarios con derechos diferenciados.
  • El modo de acceso, la capacidad de leer, escribir, y ejecutar el fichero por parte del propietario, del grupo y de otros usuarios.
  • Las marcas de tiempo con las fechas de última modificación (mtime), acceso (atime) y de alteración del propio inodo (ctime).
  • El número de enlaces (hard links), esto es, el número de nombres (entradas de directorio) asociados con este inodo. Si múltiples nombres están enlazados, es decir, asociados a un mismo inodo (enlaces duros o simplemente enlaces), entonces todos los nombres son equivalentes entre sí. El que fue creado en primer lugar no tiene ningún estatus especial, al contrario de lo que ocurre con los enlaces simbólicos o con los denominados accesos directos de Windows, donde todos dependen del nombre original. El número de enlaces es usado por el sistema operativo para eliminar el fichero del sistema de ficheros, tanto el inodo como el contenido, cuando se han borrado todos los enlaces y el contador queda a cero.

El área de datos ocupa el resto del disco y es equivalente a la zona de datos en FAT y es en esta zona donde se almacenan los ficheros y directorios de nuestro sistema.

El área de datos

Un directorio no es más que un fichero que tiene los nombres de los ficheros y directorios que contiene, junto con el número del inodo con la información de cada uno de estos ficheros o directorios.

Linux soporta gran variedad de sistemas de ficheros, desde sistemas basados en discos, como pueden ser ext2, ext3, ext4, ReiserFS, XFS, Btrsf, JFS, UFS, ISO9660, FAT, EXFAT, FAT32 o NTFS, a sistemas de ficheros que sirven para comunicar equipos en la red de diferentes sistemas operativos, como NFS (utilizado para compartir recursos entre equipos Linux) o SMB (para compartir recursos entre máquinas Linux y Windows).

Los sistemas de ficheros establecen la forma en que se gestionan los ficheros dentro de las particiones. Según tipos, proveen características como previsión de apagones, posibilidad de recuperación de datos, indexación para búsquedas rápidas, minimalización de la fragmentación para agilizar la lectura de los datos, etc.

Tipos de sistemas de ficheros

Suelen estar asociados a sistemas operativos concretos. Vamos a ver los más comunes:

  • ext2: Fue el sistema estándar de Linux. Supuso una evolución del sistema de ficheros ext, implementado en 1992 e integrado en Linux0.96. Tiene una fragmentación muy baja, aunque es algo lento manejando archivos de gran tamaño. Las principales ventajas que tenía sobre ext eran las siguientes:
    • Compatible con sistemas de ficheros grandes, admitiendo particiones de disco de hasta 4TB y ficheros de hasta 2GB de tamaño.
    • Proporciona nombres de ficheros largos, de hasta 255 caracteres.
    • Tiene una gran estabilidad.
  • ext3: Es una versión mejorada de ext2, proporciona previsión de pérdida de datos por fallos del disco o apagones. No obstante hay que señalar que es totalmente imposible recuperar los datos borrados. Es compatible con su antecesor el sistema de ficheros ext2 ya que comparten formato, permitiendo una actualización de ext2 a ext3, incluso con sistema ext2 montado.
  • ext4: Es la última versión de la familia de sistemas de ficheros ext. Sus principales ventajas radican en su eficiencia (menor uso de CPU, mejoras en la velocidad de lectura y escritura) y en la ampliación de los límites de tamaño de los ficheros, ahora de hasta 16TB, y del sistema de ficheros, que puede llegar a los 1024PB (PetaBytes) o 1.024.000 TB.
  • ReiserFS: Es la última generación del sistema de ficheros para Linux. Organiza los ficheros de manera muy eficiente lo que permite que se agilicen mucho las operaciones con estos. El problema que le encontramos es que muchas herramientas (por ejemplo, para recuperar datos) no lo soportan todavía.
  • swap: Es el sistema de ficheros para la partición de intercambio de Linux. Es un espacio de memoria que los sistemas Linux utilizan como complemento a la RAM para cargar los programas y no saturar la memoria RAM cuando se excede su capacidad. En Windows, esto se hace con el archivo pagefile.sys (Archivo de paginación) en la misma partición de trabajo, con los problemas que esto conlleva.

Además de estos sistemas de ficheros, Linux también ofrece soporte para sistemas de ficheros de Windows, como FAT, FAT32 y NTFS. Tanto para FAT como para FAT32, Linux tiene soporte completo y estable de escritura y lectura, mientras que para NTFS, y con las últimas versiones del kernel, solo se puede acceder de manera estable en modo lectura. En modo escritura todavía está en fase experimental y no es estable.

Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.

Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.

Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.