ARCHIVOS Y DIRECTORIOS
El sistema operativo UNIX es un sistema jerárquico, en el encontramos los siguientes elementos :
Desde un punto de vista físico es una secuencia de bytes.
Los nombres de los archivos pueden tener hasta 256 caracteres y pueden incluir una extensión.
Tienen que ser una secuencia que no incluya el carácter ‘ / ’.
Tampoco es recomendable incluir los siguientes caracteres :
‘ ! ’, ‘ # ’, ‘ ( ‘, ‘ ) ’, ‘ ‘ ’, ‘ " ’, ‘ ; ’, ‘<’, ‘>’, Tab,
‘ $ ’, ‘ ^ ’, ‘ { ‘, ’ } ’, ‘ * ’, ‘ ? ’, ‘ \ ‘, Espace, Backspace
Solo admiten una extensión.
acerca de otros archivos. Se dice que estos otros archivos están dentro del directorio .
La información que contiene es sobre otros archivos. Un directorio puede contener subdirectorios.
El sistema de directorios de UNIX tiene forma de grafo acíclico.
sobre caracteres que permite especificar más de un valor. Lo más habitual son : ‘ * ’(combinación de caracteres) y ‘ ?’ (cualquier único carácter)
Los metacaracteres son traducidos por el SHELL de forma que la orden no tiene constancia de su existencia.
Ej :
ls
à (lista el contenido de un directorio)
ls a*
à ls avion_adios_...etc à si avion y adios están en el directorioShell ls
El asterisco es mucho más genérico que en MS-DOS :
Tipos de archivos :
Todo lo que trata con información, UNIX lo trata como un archivo.
Para distinguir unas clases de tratamiento de información con otras, UNIX establece los siguientes tipos de archivos :
El vínculo es un enlace con el fichero físico, para la compartición de un archivo para varios usuarios.
No se puede crear un archivo vínculo de la nada, es necesario que exista el archivo físico al cual está vinculado.
Ej.
Al realizar un
ls el vinculo viene representado como :
clase - > / etc / passwd
VINCULO Archivo Físico
Para saber el tipo de un archivo : ls -l à Muestra información larga sobre ficheros .
Indica al principio del todo con una letra, el tipo de archivo :
d à Directorio
l à linker (vinculo)
- à Archivos ordinarios
s à Archivos especiales
Y muestra más información : Tamaño...etc.
PERMISOS Y PROPIETARIOS DE ARCHIVOS :
Es aplicable a los cinco tipos de archivos.
#El borrado de directorios es diferente al borrado de archivos.
En UNIX todos los archivos pertenecen al propietario del proceso que los creó, los archivos del sistema se distribuyen entre varios usuarios del sistema, cada uno de ellos destinado a una labor distinta.
En vez de haber una única cuenta de administrador existen varias cuentas de sistema. Nos podemos conectar como diferentes usuarios que realizan una tarea diferente. Los archivos pertenecen a la cuenta en la han sido creados.
Para cambiar el propietario de un archivo hay que ser el propietario y ejecutar CHOWN (chown) el cual regala el archivo. Un no propietario no puede regalar un archivo que no es suyo.
El cambio de propietario no supone cambio de grupo. El fichero sigue perteneciendo al grupo de su creador. Para cambiar el grupo se utiliza CHGRP(chgrp).
Los permisos en UNIX son de tres tipos y se establecen a tres niveles :
Tipos :
a. r à lectura
Niveles :
a. Propietario
El único que puede cambiar los permisos es el dueño y lo hace mediante la orden CHMOD(chmod).
Existen 9 posibilidades distintas que se representan mediante 9 bits
r w x r w x r w x
Empezando por la izqda: 3 de resto, 3 de grupo y 3 de propietario.
Los permisos de un fichero se representan mediante tres números en octal.
Ej
. 7 7 7 (Acceso a cualquier usuario)
También es posible indicar los permisos existentes para un fichero en el momento de la creación. Esto se llama máscara de permisos y se establece mediante la orden UMASK (umask). UMASK establece la máscara hasta que termine la sesión de conexión.
Si no hay UMASK
à 6 6 6 à Directorios7 7 7
à Ficheros
Para que la orden UMASK este al iniciar una sesión debemos meterla en el .profile (Archivo de configuración del SHELL)
KSHELL CASHELL ? ?
DIRECCIONAMIENTO DE ENTRADA/SALIDA :
El sistema operativo UNIX permite redireccionar tanto la entrada como la salida de cualquier orden sobre ficheros. En realidad un redireccionamiento modifica los valores de los descriptores de archivos sobre los que escriben o leen las ordenes.
Los descriptores de archivos existentes son :
|
Número |
Nombre |
Definición |
|
0 |
Entrada |
/dev/tty |
|
1 |
Salida |
/dev/tty |
|
2 |
Error |
/dev/tty |
Por defecto están asignados a /dev.
Un redireccionamiento asigna a 0,1,2 un archivo distinto.
Una orden en UNIX lee del descriptor 0, escribe en el descriptor 1, y manda los errores al 2.
Si queremos que escribe lea, o mande los errores a otro sitio se modifica la tabla de descriptores.
El encargado de gestionarlo es el SHELL. El SHELL se encarga de asignar cada número de descriptor al archivo que corresponda.
Los caracteres de redireccionamiento son los siguientes :
>
[fichero] à Creo fichero y lo lleno con la salida.>>
[fichero] à Añade la salida al archivo.<
[fichero] à Toma la entrada del fichero.2>>
[fichero]à Añade la salida de error a un fichero.
Ejercicio : Si el comando who me indica quien está conectado y el comando sort ordena un fichero ; ¿Como obtendríamos la lista ordenada de los usuarios conectados ?
UNIX permite también modificar de una sola vez el descriptor de salida de esa orden y encauzarlo hacia el descriptor de entrada de otra para ello se utiliza el ‘pipe’ ‘ | ’.
Encauzo una orden con otra mediante esta tubería. La tubería crea un archivo temporal que sigue un esquema y sobre el que se garantiza la exclusión mutua.
Ejercicio : Sacar por pantalla el numero de archivos que contiene un directorio.
# wc -l à Cuenta el numero de líneas que escribe.
# ls | wc -l
à Encauzo un listado hacia un contar líneas.
ESTRUCTURA DE LA LÍNEA DE ORDENES :
La sintaxis general de una orden UNIX es :
<comando> [<opciones>] [<fichero_entrada>] [<fichero_salida>]
-letra ó +letra
Muchas ordenes UNIX no admiten ficheros de entrada o/y salida y todos escriben el fichero de entrada o de salida.
Se pueden redireccionar descriptores también con esto.(Todos menos el de errores).
ESTRUCTURA JERÁRQUICA DE FICHEROS :
Como ya hemos dicho, el sistema de directorios de UNIX es de la forma grafo acíclico. Dentro del sistema de ficheros hay dos formas de referenciar un archivo. Llamamos nombre_absoluto al nombre único que se forma siguiendo la estructura de directorios desde la raíz hasta el archivo.
Llamamos nombre_relativo al recorrido desde el directorio actual.
.. Directorio superior
. Directorio actual
Para cambiar directorios utilizo la orden CD (cd) <directorio>
à tiene que existir un espacio entre cd y el nombre del directorio..Para ver el directorio actual : PWD (pwd)
Dentro del tipo de fichero hay un tipo que se llama fichero tubería que es cuando el usuario gestiona el fichero temporal creado para comunicación en una tubería.
MONTAJE DEL SISTEMA DE FICHEROS :
La estructura de directorios de UNIX gestiona los directorios de todos los sistema de ficheros en un único grafo acíclico (Algo del estilo de Windows 95 )
El usuario cuando accede a un fichero no tiene constancia de la unidad física del sistema de ficheros físico donde se almacena ese archivo. La ruta de acceso es igual para archivos de todos los sistema de ficheros existentes.
En Windows 95 se conoce aún tratándose como un árbol, dónde se encuentra un fichero.
UNIX posee un sistema de ficheros raíz (root file system) que se corresponde con la unidad principal del sistema. Cuando desea añadir otro sistema de ficheros (administrador) selecciono un directorio dentro de ese sistema de ficheros raíz y sobre él monto mediante MOUNT(mount) el árbol de directorios del nuevo sistema de ficheros. Se superpone la raíz del nuevo árbol sobre el directorio seleccionado.
Se puede seleccionar un sistema de ficheros y montar algo sobre él.
Cuando se monta un sistema de ficheros sobre un directorio, los accesos al directorio se redirigen hacia el nuevo sistema de ficheros con lo que el directorio anterior queda oculto. Por ello es conveniente que el subdirectorio elegido esté vacío.
Para desmontar un sistema de ficheros se usa la orden UNMOUNT(unmount), la cual solo la puede utilizar el administrador.
No sabemos a que fichero estamos accediendo, para saber los ficheros y directorios a los que estamos accediendo utilizamos la orden UNMOUNT(unmount) sin parámetros.
ÁRBOL DE DIRECTORIOS DE UNIX :
/ varà
Contiene archivos que varían entre las diferentes versiones de UNIX y archivos cuyo tamaño cambia en función del instante. Ej. Archivo de correo, archivos temporales de usuario y archivos de registro y contabilidad (Contenidos en /mail, /tmp y /adm respectivamente)./ dev
à Contiene los archivos especiales o de dispositivos, control de disco, impresoras, terminales...etc.
/ etc à
Contiene archivos de administración y bases de datos de configuración. Son archivos de texto, Ej. passwd, shadow..etc.
/ home
à A partir de este directorio, se encuentran los subárboles de usuario ; los directorios de conexión. En algunos sistemas se llama / users. Nosotros estaremos en / home / alumnos / FM-23 / 951081
/ spool
à Archivos temporales de gestión del sistema, Backup, impresión ...etc.
/ tmp
à Archivos temporales que necesitan las ordenes de UNIX. Los que se crean con tuberías ( | )...etc.
/usr
à Contiene los directorios globales que utiliza el usuario en la máquina. Es todo lo que hemos visto hasta ahora /home. (Cualquier editor suele crear un temporal).
/ usr / bin à Contiene los comandos del sistema y utilidades.
/usr/sbin à Contiene comandos del sistema destinados a administración ; para el susario son solo de consulta.
/ usr / lib à Bibliotecas de lenguajes programación.
/usr/includeà Contiene archivos de cabecera del lenguaje de programación C.(.h)
/usr/share/man à Contiene los ficheros del manual.
SISTEMA DE FICHEROS DESDE EL PUNTO DE VISTA DEL SISTEMA OPERATIVO UNIX :
El sistema de ficheros interacciona con los procesos de usuario y con el gestor de memoria para realizar su labor.
El diseño de un sistema de ficheros requiere el planteamiento de lassiguientes partes :
INTERCAMBIO DE MENSAJES :
Una petición comienza con una solicitud por parte del proceso de usuario (open / close ..etc) à cualquier tipo de llamada que accede al sistema.
Llega un petición, el sistema de ficheros se comunica con el núcleo para ver como es la petición, el núcleo con el sistema de ficheros para devolver el resultado, el sistema de ficheros con el gestor de memoria y el gestor de memoria de nuevo al sistema de ficheros...à un tratamiento complejo en el que intervienen hasta 29 procesos diferentes.
El sistema de ficheros realiza un bucle de espera de mensajes, y cuando se produce alguna solicitud comienza el tratamiento de las mismas.
ORGANIZACIÓN DEL SISTEMA DE FICHEROS :
El sistema de ficheros está formado por bloques de organización, mapas de bits, nodos-i, directorios y bloques de datos. Estos elementos se organizan según el siguiente esquema :
|
AUTO ARRANQUE 1 BLK |
SUPER BLOQUE 1 BLK |
Mapa de bits de nodos-i N BLK´S |
NODOS-I
N BLK´S |
BLOQUES DE DATOS N BLK´S |
Autoarranque
à El bloque de autoarranque contiene software encargado de cargar el sistema operativo en memoria y empezar a ejecutarlo ; este bloque es al que accede la ROM del ordenador para comenzar a funcionar.
Super Bloque à
Contiene una descripción de la estructura del sistema de ficheros. Sus campos son :
Mapa de bits (n-i) à
Un nodo-i representa un fichero en UNIX. Existe uno por cada archivo. El mapa de bits de nodos-i, indica si la entrada para ese archivo está libre u ocupada.Cuando creo un archivo se busca un nodo-i cuyo bit esté a 0 y se le asigna ese archivo.El borrado de archivos se hace de forma lógica poniendo a 0 el bit del nodo-i del archivo que acabamos de borrar.
Nodos-i à
Hay un nodo-i por archivo, y puesto que el número de nodos-i es limitado, también lo es el de archivos. Puedo no llenar el disco, pero quedarme sin nodos-i, y puedo tener mas nodos-i de lo que permite mi disco. Cada nodo-i tiene una estructura de 64 bytes de 16 bits cada uno ; de tal forma que tendremos una estructura de 16x64 bits.Los campos contienen :
CACHÉ DE BLOQUES :
UNIX mantiene una caché con los últimos bloques accedidos que se organizan en forma de tabla
hash y las colisiones se tratan mediante listas doblemente enlazadas.La salida de bloques de la caché sigue un algoritmo LRU para cada entrada de la tabla hash.
Los bloques de la caché se escriben en disco en dos momentos :
Existen bloques especiales que se copian a disco directamente.
DECRIPCIÓN DEL MODO DE ACCESO A FICHEROS :
¿Cómo se realiza una búsqueda de un fichero en una ruta ?
Accederemos a los nodos-i de los directorios existentes en la ruta y a los bloques de datos que contienen información sobre cada directorio.
Un directorio en sus bloques de datos contiene una lista de entradas de 16 bytes, de los cuales 2 corresponden al número de nodo-i, y los otros 14 al nombre de fichero correspondiente a ese nodo-i ; cada entrada de la lista se corresponde con un fichero contenido en el directorio.
Ej. Para acceder a /users/practicas.txt
En cualquier acceso se comienza leyendo el nodo-i número 1 que se corresponde con el directorio origen del árbol de directorios. En este nodo-i seleccionamos el puntero a zona de datos que nos indica la zona donde está la información del directorio.
Una zona tiene como mínimo 1024 bytes, si cada entrada es de 16 bytes, nos salen 64 entradas de directorio en cada bloque o zona. Los directorios que tengan menos de 64 fichero ocuparán un bloque(zona).
Supongamos que 120 es un bloque de datos de directorios :

Para acceder a los archivos, accedemos a los nodos-i.
Para saber si una zona de datos es un directorio o un fichero hay que ver el modo en el nodo-i.