Archivos, directorios y diferencias

Un archivo no es más que un conjunto de bytes relacionados que están en disco u otro medio, a los que se les asigna un nombre que se utilizara para referirse a este archivo. Un directorio no es más que un archivo común a los que se les a impuesto una estructura particular.

Esto tal vez llame la atención. En GNU/Linux y UNIX todo es archivo. Sí, todo es archivo. El teclado, el monitor, el disco rígido y hasta la memoria. El SO trata a los dispositivos como archivos y de esa manera utiliza los mismos métodos de apertura, escritura, lectura y cierre para todos ellos. La clase de archivos de los que estamos hablando se denomina archivo de dispositivo y es solo una de las clases de archivos que existen en GNU/Linux.

En DOS se acostumbraba a que solamente aquellos archivos con extensión .EXE .COM o .BAT se podían ejecutar. En GNU/Linux cualquier archivo puede llegar a ser ejecutable sin importar que extensión tenga. Los archivos ejecutables puede ser de dos clases: aquellos con formato binario ejecutable directamente por el kernel, y aquellos que tienen lo que se denomina un magic cookie, el cual determina la manera en que el sistema ejecutará dicho archivo (script). Un ejemplo de este tipo de ejecutable son los scripts de shell, que recuerdan a losarchivos .bat del DOS, pero que son mucho más poderosos.

Otro tipo de archivo es el de canalización. Esta clase de archivo sirve de canal donde los datos entran por un extremo y salen por el otro. Son creados por los procesos y desaparecen al morir el proceso, pero mientras tanto están ocupando un lugar físico en el disco. Cuando se trate el tema de pipes y canalización se entrará más en detalle.

La forma en que se puede nombrar un archivo no esta limitada como en DOS a 8 letras seguido de 3 caracteres de extensión. Los nombres pueden ser de 255 caracteres de longitud y pueden tener puntos, guiones y demás símbolos como separadores. Los únicos nombres que no están permitidos son los que contienen la / en su nombre debido a que este caracter se utiliza para indicar la ruta a directorios.

nota.txt
nota.textual
nota.para.julio
nota.julio.hoy

Si trabajáramos en un sistema DOS solamente el primer archivo seria un archivo reconocido como texto, en cambio en GNU/Linux cualquier archivo de estos podrá contener texto.

Los archivos que llevan un punto inicial, .nota.textual son denominados archivos de punto y el SO los pondrá de manera predeterminada como ocultos.

Organizar los archivos en directorios es la forma más útil de trabajar con ellos. Aunque pareciera que los directorios contienen a los archivos, esto no es verdad. En realidad los archivos están asociados a ese directorio, y solo son mostrados como si estuviesen dentro de él.

La forma de referenciar un archivo es ir poniendo los nombres de los subdirectorios seguido por una /, por ejemplo /home/shrek/cartas/carta_fiona.

A esto se le denomina ruta del archivo y establece una ruta única para determinado archivo ya que podría existir otro archivo con el mismo nombre pero con una ruta diferente, por ejemplo /home/fiona/carta_fiona, pero no seria el mismo, sino otro. A lo sumo podría ser un enlace a la carta del directorio /home/shrek/cartas, pero eso lo veremos luego.

Uno puede moverse de arriba abajo en un árbol de directorio por medio del comando cd (cambio de directorio) que forma parte del shell. El SO llevará cuenta del directorio en que estamos parados actualmente, denominado directorio de trabajo, cuando uno cambia de directorio, el SO verifica esta parte de memoria y si es posible efectúa el cambio actualizándola con el directorio de trabajo actual. No importa si nos movemos arriba o abajo del directorio de trabajo, solamente esta información es la que cambia para que tengamos la ilusión de que nos estamos moviendo a través del árbol de directorios.

Los directorios tienen información que apunta hacia la ubicación de los archivos reales. Esta información, tanto en los archivos y directorios y junto con el nombre del creador, tamaño permisos, etc, es guardada en lo que se denomina TABLA DE INODOS. Esta tabla se crea cuando se crea el sistema de archivos en GNU/Linux, comparable al formateo de una partición DOS. Se crea esta tabla que contendrá la mayoría de la información de los archivos. Entender lo que habíamos dicho en un principio de que todo es archivo en GNU/Linux puede resultar algo traumático, pero si vemos que esto resulta en un mejoramiento de cómo el sistema accede a sus recursos, vamos entendiendo que se establece una mayor sencillez. Al ingresar al sistema se abrirán 3 archivos. La entrada estándar (stdin) la salida estándar (stdout) y el error estándar (stderr). Cuando ingresamos datos por el teclado, estamos escribiendo en el archivo stdin y al verlos por la pantalla sé esta escribiendo el archivo stdout. Si en algún punto existiera un error saldría por la pantalla, pero se estaría escribiendo el archivo stderr.