ARCHIVOS Y DIRECTORIOS

 

El sistema operativo UNIX es un sistema jerárquico, en el encontramos los siguientes elementos :

 

  1. Archivos : (Estructura básica de almacenamiento de información)

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.

 

  1. Directorios : Un directorio es un tipo de archivo que contiene informació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.

 

 

  1. Metacaracteres : El SHELL de UNIX posee un conjunto de operadores

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 directorio

Shell ls

 

 

El asterisco es mucho más genérico que en MS-DOS :

 

    1. *n à camión
    2. *cion* à vacaciones
    3. * à nombre.ext

 

 

 

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 :

 

  1. Archivos ordinarios : Archivo convencional . Colección de palabras de memoria que contienen datos o código.
  2. Vinculos : Segundo nombre para un archivo ; permite la compartición de información. La existencia de vinculos es lo que convierte al arbos de UNIX un grafo acíclico.

 

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

 

 

 

  1. Vínculos SIMBÓLICOS : Amplia el concepto de vinculo permitiendo vincularse a directorios o ficheros desde la red. Un vinculo simbólico desde el punto de vista físico no es más que un archivo que contiene el nombre de otro. No se implementa un vínculo, sino que viene el archivo vinculado. Al hacer un vinculo, crea una entrada más en la tabla de directorios, y al mismo tiempo un archivo al que está vinculado.
  2. Directorios : Archivo que contiene información sobre otros archivos( es un fichero). Se puede tratar con las ordenes de tratamiento de archivos.

 

  1. Archivos especiales : (De dispositivos) Representas dispositivos, hardware de la máquina y se encargan de traducir las ordenes o las llamadas de los comandos UNIX a las secuencias especificas del hardware instalado. Realiza la ocultación de hardware al sistema. Hacen la traducción, funcionan independientemente del hardware en el que está instalado.

 

 

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

    1. w à escritura
    2. x à ejecución

 

Niveles : a. Propietario

    1. Grupo
    2. Resto de usuarios

 

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 à Directorios

7 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.

  1. [fichero] à Error en un fichero nuevo.

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 :

 

  1. Intercambio de mensajes entre los procesos implicados.
  2. Organización interna del sistema de ficheros. Cachos de bolques para mejorar las prestaciones y descripción del modo de acceso a ficheros.

 

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 :

 

  1. nº de nodos-i.
  2. nº de zonas de datos.
  3. nº de bloque del mapa de nodos-i.
  4. Posición de la primera zona de datos.
  5. Máximo tamaño de fichero(nº mágico).
  6. Punteros al bolque del mapa de nodos-i.
  7. nº dispositivo superbloque.
  8. nodo-i del sistema de ficheros montado.
  9. nodo-i del directorio en que se monta.
  10. Última actualización.
  11. Si es de solo lectura.

 

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 :

 

  1. Modo.(Tipo de fichero y bit de protección)
  2. Uid. (Identificador de usuario)
  3. Tamaño.(En bytes)
  4. Última modificación.(nº de dias transcurridos desde 1/1/1970)
  5. Enlaces | GID(Enlaces a directorios que contienen nodo-i)
  6. nº de zona 0
  7. ...
  8. nº de zona 9
  9. Puntero indirecto. Punteros a zonas de datos.
  10. Puntero indirecto doble.
  11. Puntero indirecto triple.

 

 

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 :

 

  1. Se escriben cuando son expulsador por la CPU.
  2. Cuando se ejecuta la orden SYNC(sync) que copia todos los bloques de la caché a disco. La orden sync se ejecuta aproximadamente cada 5 segundos (o más).

 

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.