Tipos de Archivos en Linux

Para Linux todo es un archivo (también para UNIX en general), es decir, más exactamente cualquier cosa se abstrae en forma de un archivo. En esta ocasión intentaré dar una versión comprensiva de los distintos tipos de archivos en linux, así como el modo de crear los distintos tipos de enlaces (simbólicos y duros) entre ellos.

Existen 4 tipos:

Archivos normales

Los archivos que consideremos “normales” pueden contener datos de usuario, pueden contener configuraciones del sistema, pueden ser scripts, binarios, ser ejecutables o no, en cualquier caso, el sistema operativo simplemente lee estos archivos y sin hacer suposiciones, muestra, aprovecha o ejecuta su contenido.

Directorios

Los directorios (a veces llamadas carpetas) también son archivos… Son unos archivos un tanto especiales, ya que lo que verdaderamente hacen es listar las localizaciones de otros archivos, o de otros directorios, son en realidad, pequeños índices que indican al sistema donde ha de ir a buscar para encontrar algo en concreto.

Enlaces duros

Para entender los enlaces duros, hay que entender primero qué es un inodo (también llamado i-nodo, nodo-i o simplemente nodo)

Los inodos almacenan metadatos de cada archivo y directorio, tales como, propietario, nombre de archivo, permisos, fecha de creación, etc (pero NO el nombre).

El término “inodo” refiere generalmente a inodos en discos (dispositivos en modo bloque) que almacenan archivos regulares, directorios, y enlaces. Son particularmente importantes para la recuperación de los sistemas de archivos dañados.

Cada inodo queda identificado por un número entero único dentro del sistema de ficheros, por lo que dos sistemas distintos (dos particiones, dos unidades de disco) pueden contener números de inodo semejantes. Sin embargo, cada archivo tiene un único numero de inodo, aunque pueda tener más de un nombre en distintos o incluso en el mismo directorio para facilitar su localización (es el caso de los enlaces duros). Los números de inodo se crean al crear el sistema de archivos (cuando por ejemplo, creamos la partición, le asignamos el sistema de archivos que usará y la formateamos)

Se puede deducir que cada archivo y directorio tiene asociado un numero de inodo. El inodo es un elemento fundamental de los sistemas de archivos en Unix/Linux. Muchos de estos sistemas, crean todos los inodos cuando el sistema es creado (como en el caso de Ext3), en estos casos, existe un numero limite de archivos y directorios (definido en la creación del sistema de archivos) que el sistema de archivos puede almacenar.

No está claro de donde salió la expresión i-nodo, Dennis Ritchie, uno de los padres de Unix decía al respecto:

>Realmente, tampoco lo sé. Era simplemente el nombre que comenzamos a utilizar. “Índice” es lo mejor que se me ocurre, debido a la estructura algo inusual de un sistema de ficheros que almacenaba la información del acceso a los archivos como una lista plana en disco, dejando al margen toda la información jerárquica de los directorios. Así el número “i'” es un índice sobre la lista, el nodo “i” es el elemento seleccionado de la lista. (En la primera edición del manual se empleó la notación “i-nodo”; el guión fue desapareciendo poco a poco)

Como decía, cada archivo en el sistema de archivos de GNU/Linux tiene su propio i-nodo. Un i-nodo guarda los atributos del archivo y su posición en el disco. Si necesita referirse a un archivo usando dos nombre s de archivos distintos, puede crear un enlace duro. El enlace duro tendrá el mismo i-nodo que el archivo original y guarda el mismo aspecto y comportamiento que el original. Con cada enlace duro creado, se incrementa la cuenta de referencia. Cuando se borra un enlace duro, sé decrementa la cuenta de referencia.

En la mayoría de los sistemas de archivos que permitan enlaces duros, se almacena un valor entero con cada sección física de los datos. Este número entero representa el número total de los enlaces duros que apuntan a los datos. Cuando se crea un nuevo enlace, este valor aumenta en uno. Cuando se quita un enlace, el valor disminuye en uno. El mantenimiento de este valor ayuda a los usuarios a prevenir las pérdidas de datos.

Es también la manera más simple para que el sistema controle el uso del disco duro, pues cuando el valor es cero indica que el espacio esta libre y los valores distintos a cero indican que el espacio está en uso.

De todo esto se destila que no pueden existir enlaces duros entre dos archivos de particiones separadas, ya que cada una de ellas tiene su propia tabla de inodos. Como ya hemos visto los enlaces duros se refieren a un archivo original por su i-nodo.

Enlaces simbólicos

Para entre, otras cosas, salvar la imposibilidad anterior, disponemos de otro tipo de archivos conocido como enlaces simbólicos. A diferencia de los enlaces duros, que apuntan a un archivo por su i-nodo, un enlace simbólico apunta a otro archivo por su nombre. Esto nos permite enlazar (apuntar) a otros archivos localizados en otras particiones, e incluso en otras unidades de red.

Comando: ln

ln nos permite establecer enlaces duros y enlaces simbólicos.

Opciones :

-v, –verbose

Modo verbose, muestra aquello que esta haciendo el comando. Es común en los comandos de Linux que tengan una opción Verbose.

-s, –symbolic

Como podemos suponer crea un enlace simbólico. Esta opción simplemente produce un mensaje de error en sistemas que no admitan enlaces simbólicos.

-d, -F, –directory

Permite al súper-usuario hacer enlaces duros a directorios.

-f, –force

Esta opción simplemente produce un mensaje de error en sistemas que no admitan enlaces simbólicos.

-i, –interactive

Pregunta antes de borrar ficheros de destino existente

-b, –backup

Hace copias de respaldo de ficheros que estén a punto de ser sobreescritos o borrados.

-n,
–no-dereference

El comportamiento predeterminado es tratar un destino que sea un enlace simbólico a un directorio como justamente un directorio. Se recomienda leer el man de este comando para mayores aclaraciones de esta opción.

-P, –physical

Crea enlaces duros directamente a los enlaces simbólicos

-L, –logical

Crea enlaces duros a referencias de enlaces simbólicos

Modo de uso: ln [opciones] origen destino

Para ver más claramente el funcionamiento de ln, vamos a crear un enlace simbolico y otro duro, y luego vamos a listar lo creado para que el sistema nos muestre la diferencia.

Ejemplo (en negrita y cursiva los comando introducidos y en cursiva la salida por pantalla):

1º Creamos un archivo cualquiera

touch MiArchivo

2º Comprobamos

ls -l MiArchivo

-rw-rw-r– 1 guillermo guillermo 0 jul 9 19:33 MiArchivo

3º Creamos un enlace simbolico y comprobamos

ln -s MiArchivo MiEnlaceSimbolico

ls -l MiEnlaceSimbolico

lrwxrwxrwx 1 guillermo guillermo 9 jul 9 19:35 MiEnlaceSimbolico -> MiArchivo

4º Creamos un enlace duro

ln -n MiArchivo MiEnlaceDuro

5º Comprobamos solicitando el numero de inodo.

ls -li MiEnlaceDuro

3279750 -rw-rw-r– 2 guillermo guillermo 0 jul 9 19:33 MiEnlaceDuro

6º Y volvemos a comprobar para conocer también el numero de inodo de MiArchivo.

ls -li MiArchivo

3279750 -rw-rw-r– 2 guillermo guillermo 0 jul 9 19:33 MiArchivo 

Hay que advertir que la opción por defecto de ln es -n, es decir, si no indicamos nada  ln creará un enlace duro.

Articulo Anterior: Comandos Básicos en Linux Siguiente Articulo: Estructura General de Directorios en Linux
Anuncios

Un pensamiento en “Tipos de Archivos en Linux

  1. Pingback: Linux, estructura general de directorios | El Enlace Entrópico

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s