Sistema de Archivos UNIX

SISTEMA DE ARCHIVOS UNIX:

Todo en el sistema UNIX son archivos. El sistema de archivos es indispensable para el éxito y utilidad del sistema UNIX.

Un archivo es una secuencia de bytes. (Un byte es un pequeño trozo de información, normalmente compuesto por 8 bits. Para nuestro propósito, un byte es equivalente a un carácter.) El sistema no impone estructura alguna a los archivos, ni asigna significado a su contenido; el significado de los byte depende únicamente de los programas que interpretan el archivo. Además, esto es cierto no solo para archivos en disco sino también para dispositivos periféricos. Cintas magnéticas, mensajes de correo, caracteres de teclados, salidas de impresoras, datos que fluyen en interconexiones, cada uno de estos archivos no es mas que un secuencia de bytes desde el punto de vista del sistema y sus programas.

Cada byte de un archivo contiene un numero de tamaño suficiente para representar un carácter. El código empleado en la mayoría de los sistemas UNIX es ASCII (“Código Norteamericano Estándar para Intercambio de Información”), Pero algunas computadoras, entre las que sobresalen las IBM, usan un código llamado EBCDIC (“Código Extendido de Intercambio Decimal Codificado en Binario”).

Los programas obtienen los datos de un archivo por medio de una llamada al sistema (una rutina del núcleo) llamada read . Cada vez que se invoca a read , esta regresa la siguiente porción de un archivo, la siguiente línea de texto tecleada en la terminal , por ej. read también indica cuantos bytes trae el archivo, por lo que al final del archivo es identificado en el momento en que read dice “ se traen cero bytes”. Si se hubieran quedado algunos bytes en el archivó, read los hubiera leído. En realidad , tiene sentido no representar el final de un archivo con algún valor en especial, ya que, como se menciono anteriormente , el significado de los bytes depende de como se vaya a interpretar el archivo. Pero todos los archivos tienen un final, y como todos los archivos deben accesarse por medio de read , regresar un cero es una manera de representar el final de un archivo ( independientemente de cualquier representación ) sin introducir ningún carácter especial.

Cuando un programa lee de la terminal el núcleo envía al programa cada una de las líneas de entrada solo cuando se teclea su carácter de nueva-linea (es decir, cuando se oprime RETURN ). Por lo tanto si se comete un error mecanografico, uno puede corregirlo si es que se lo detecta antes de teclear el carácter de nueva-linea. Si no es así la línea ya ha sido leída por el sistema y no podrá corregirse.

¿ Que hay en un archivo ?
El formato de un archivo depende de los programas que lo usen ; existe gran variedad de estos de archivos, debido a que también existen muchos programas. Sin embargo, puesto que los tipos de archivos no son determinados por el sistema de archivos, el núcleo no puede decirnos cual es el tipo de un archivo: no lo conoce.

El sistema de archivos de Unix; esta basado en un modelo arborescente y recursivo, en el cual los nodos pueden ser tanto archivos como directorios, y estos últimos pueden contener a su vez directorios o subdirectorios. Debido a esta filosofía, se maneja al sistema con muy pocas órdenes, que permiten una gran gama de posibilidades. Todo archivo de Unix está controlado por múltiples niveles de protección, que especifican los permisos de acceso al mismo. La diferencia que existe entre un archivo de datos, un programa, un manejador de entrada/salida o una instrucción ejecutable se refleja en estos parámetros, de modo que el sistema operativo adquiere características de coherencia y elegancia que lo distinguen.

La gestión de archivos viene implementada por mecanismos propios de UNIX. Esta aproximación tiene consecuencias directas sobre la seguridad del sistema.

$ file /bin /bin/de /usr/ src/ cmd/ de.c/ usr/ man/ man1/ de.1

/bin : directory

/bin/ de : pure executable

/usr/ src/ cmd/ de.c : c program text

/usr/ man /,an.1/ de.1 : roff, nroff, or eqn input text


Estos son cuatro archivos típicos, relacionados todos con el editor : el directorio en el cual este se encuentra (/ bin), el programa mismo en su forma ejecutable o binaria (/ bin/ ed) , el o conjunto de instrucciones en C que definen el programa (/ usr/ src/ cmd/ de.c) y el manual (/ usr/ man/ man1/ de.1).

Para determinar los tipos, File no puso atención a los nombres (aunque podría hacerlo), ya que las convenciones con los nombres, por el echo mismo de no ser mas que convenciones, no son confiables. Por ejemplo, los archivos con sufijo .c son programas fuentes en C, pero nada impide al usuario crear un archivo .c con un contenido arbitrario. En vez de eso, el comando file lee unos cuantos cientos de bytes al principio del archivo y busca indicios que indiquen el tipo de archivo en cuestión.

Algunas veces los indicios para identificar un archivos son obvios. Un programa ejecutable se marca con un “numero mágico” binario al principio. El comando od sin ninguna opción vacía el archivo en palabras de 16 bits (o dos bytes) y hacen visible el numero mágico :


$ od /bin /de

0000000 000410 025000 000462 011444 000000 000000 000000 000001

0000020 170011 016600 000002 005060 177776 010600 162706 000004

0000040 016616 000004 005720 010066 000002 005720 001376 020076

El valor octal 410 “marca” un programa ejecutable puro, un programa cuyo código puede ser compartido por varios procesos. (los números mágicos específicos son dependientes del sistema). El patrón de bits representado por 410 no es un texto en ASCII, por lo que este valor no podría ser generado inadvertidamente por un programa tal como un editor. Sin embargo, el lector puede crear un archivo así ejecutando un programa propio, y el sistema entenderá la convención de que tales archivo son programas en binario.

Para archivos de texto, los indicios que indicar el tipo de archivo en cuestión pueden encontrarse mas escondidos en el. Por ejemplo, el comando file buscará palabras como #include para identificar programas fuente en C, o líneas que comiencen con un punto para identificar entradas para nroffo o troff.