top of page

Ficheros y directorios

Bajo la mayoría de sistemas operativos (incluyendo ), existe el concepto de fichero, que es simplemente un conjunto de información con un nombre (llamado nombre de fichero). Ejemplos de ficheros podrían ser su examen de historia, un correo electrónico (e-mail), o un programa que pueda ser ejecutado. Básicamente, cualquier cosa almacenada en el disco es guardado en un fichero individual.

Los ficheros se identifican por sus nombres de fichero. Por ejemplo, el fichero que contiene su examen de historia podría estar almacenado con el nombre de fichero history-paper. Estos nombres normalmente identifican el fichero y su contenido de una forma que tenga algún significado para usted. No existe ningún formato estándar para los nombres de fichero, al contrario de lo que ocurre bajo MS-DOS y algunos otros sistemas operativos; en general, un nombre de fichero puede contener cualquier caracter (excepto el carácter /--vea la discusión acerca de los nombres de las rutas, más adelante) y está limitado a 256 carácteres de longitud.

Junto con el concepto de ficheros tenemos el concepto de directorios. Un directorio es una colección de ficheros. Puede entenderse como una ''carpeta'' que contiene muchos ficheros diferentes. Los directorios tienen nombres, con los que se les identifica. Además, los directorios se mantienen en una estructura de tipo árbol; es decir, los directorios pueden contener otros directorios.

Por tanto, puede referirse a un fichero por su nombre de ruta, que está compuesto del nombre del fichero, precedido por el nombre del directorio que lo contiene. Por ejemplo, supongamos que Larry tiene un directorio llamado papers, que contiene tres ficheros: history-final, english-lit, and masters-thesis. Cada uno de estos tres ficheros contiene información para tres proyectos de Larry. Para referirnos al fichero english-lit, Larry puede especificar el nombre de la ruta del fichero:

 

Como puede ver, el directorio y el nombre del fichero están separados por una única barra (/). Por esta razón, los nombres de los ficheros no pueden contener el carácter /. Los usuarios de MS-DOS encontrarán familiar está convención, aunque en el mundo de MS-DOS se usa la barra invertida (\) en su lugar.

Como ya mencionamos, los directorios pueden anidarse unos en otros. Por ejemplo, supongamos que hay otro directorio en papers, llamado notes. El directorio notes contiene los ficheros math-notes y cheat-sheet. El nombre de la ruta del fichero cheat-sheet sería

 

Por tanto, el nombre de la ruta es realmente como la ruta hasta el fichero. El directorio que contiene un subdirectorio dado es conocido como directorio padre. En nuestro caso, el directorio papers es el padre del directorio notes.

​

Directorio de un solo nivel.

Todos los archivos están contenidos en el mismo directorio, el cual es fácil de soportar y entender sin embargo, cuando aumenta el número de archivos o cuando hay más de un usuario un directorio de un solo nivel tiene limitaciones considerables. Debido a que todos los archivos están en el mismo directorio deben tener nombres únicos.

La principal desventaja de un directorio de un solo nivel es la confusión de los nombres de archivos creados por usuarios diferentes. La solución estándar consiste en  crear un directorio distinto para cada usuario.

​

 

Jerarquía de directorios

Los archivos se agrupan en directorios, que a su vez se organizan en una jerarquía. En la cima de la jerarquía está el directorio "raíz", representado por "/". Un directorio puede existir adentro de otros directorios, los cuales se denominan subdirectorios o subcarpetas, todos los subdirectorios y nombres de archivo que incluya un directorio deben ser únicos. Sin embargo, los nombres pertenecientes a directorios diferentes pueden ser iguales. Para accesar a un directorio, se sigue una ruta (path) que nos permite conocer la ubicación exacta del directorio; debido a la estructura de directorios jerárquica, ramificada o "en árbol".

 

Los directorios y archivos de un sistema  tienen una estructura estándar, algunos de los directorios son:

/root.- Mantiene información de quien administra el sistema.

/bin.- Guarda los programas.

/boot.- Ficheros estáticos para arrancar el sistema

/etc.- Archivos de la configuración del sistema.

/dev.- Resguarda configuraciones de periféricos (impresoras, unidades extraíbles, etc).

/home.- Mantiene información de los usuarios.

/tmp. Directorio temporales creados por algunos programas, que serán borrados por el sistema operativo durante el arranque.

/usr.- Programas accequibles a usuarios finales y datos de estos programas; no requieren ser modificados (datos de sólo lectura). Se sub-divide en:

bin, games: Programas disponibles para todos los usuarios.

sbin: Herramientas para el administrador.

dict: Diccionarios.

share: Datos de diversos programas.

doc, info, man: Enlaces o complementos a la documentación disponible en /usr/share/doc, /usr/share/info y /usr/share/man.

lib: Librerías de funciones

include: Encabezados de algunos componentes del sistema y programas.

/floppy, /cdrom, /mnt.- Directorios para instalar disquettes, CD-ROMs y otros sistemas de archivos o dispositivos.

/proc.- Diversos canales de comunicación con algunos programas (por ejemplo con el kernel).

/lib.-  Librerías indispensables y módulos (requeridas durante el arranque del sistema).

/var.- directorio donde los programas requeridos deban modificarse frecuentemente. 

/proc.- "Directorio virtual", es creado por el sistema para intercambiar información con más facilidad.

  NOMBRE DE RUTA

​

Nombres de ficheros y rutas

Una vez sabemos el directorio actual en el que ejecutan los comandos, ¿cómo lo cambiamos? O más en general, ¿cómo se pueden referenciar ficheros y carpetas en el intérprete?

Linux organiza ficheros y carpetas en un estructura de árbol. Un fichero está siempre en una carpeta, y una carpeta puede contener ficheros y subcarpetas. La carpeta de más alto nivel en esta jerarquía en Linux siempre tiene el nombre “/”. Cuidado con la inclinación de esta barra, pues “\” tiene otro significado diferente.

Todo fichero o carpeta tiene una ruta absoluta que es la secuencia de carpetas que se atraviesan desde la raíz separadas por el símbolo “/” y que termina con su propio nombre. Por ejemplo, /dirA/dirB/dirC/fichero.txt es la ruta absoluta del fichero fichero.txt almacenado en la carpeta dirC que a su vez está contenida en la carpeta dirB, a su vez contenida en la carpeta dirA almacenada en la raíz del sistema de ficheros. El programa konsole que abre la ventana con el intérprete está configurado para mostrar la ruta absoluta del directorio actual en la barra de título de la ventana tal y como se muestra en la figura 13.1.

A todo usuario en Linux se le asigna una carpeta a partir de la cual puede almacenar sus ficheros. El intérprete permite abreviar su ruta con el símbolo “~”. El comando ls sin ningún dato adicional muestra los ficheros en el directorio actual, pero si tras el nombre del comando se escribe una ruta, muestra los ficheros en esa ruta. Por tanto, el comando ls ~ muestra los ficheros en la carpeta del usuario.

Además de las carpetas y ficheros creados por el usuario o los programas, toda carpeta Linux tiene dos subcarpetas definidas por defecto:

  • “..”: Es la carpeta del nivel superior en la jerarquía de ficheros que contiene a esta. Esta subcarpeta también esta presente en la raíz del sistema de ficheros (la carpeta con ruta absoluta “/”), pero apunta a si misma.

  • “.”: Es la propia carpeta que aparece como si fuese también una subcarpeta. Se puede considerar como una “autoreferencia” o apuntador a si misma.

Estas carpetas son a todos los efectos carpetas normales en el sistema; es decir, se pueden utilizar en las rutas. Por ejemplo, la ruta /dirA/dirB/dirC/../fichero2.txt se refiere al fichero que está almacenado en la carpeta dirB, pues desde dirC, la carpeta .. apunta a su predecesor, dirB. La siguiente figura muestra la interpretación de esta ruta así como el equivalente de las carpetas “..” y “.”.
 

Como consecuencia de la existencia de las carpetas “.” y “..”, un fichero puede tener múltiples rutas absolutas equivalentes. Por ejemplo, las siguientes rutas se refieren todas al fichero.txt de la figura 13.2: /dirA/dirB/dirC/../dirC/fichero.txt, /dirA/dirB/dirC/./././fichero.txt, /dirA/dirB/dirC/../../../dirA/dirB/dirC/./fichero.txt, etc. Utiliza el comando ls para mostrar por pantalla el contenido de las carpetas de los niveles superiores del directorio actual hasta la carpeta raíz.

La rutas absolutas identifican de manera única cualquier fichero o carpeta en el sistema, pero pueden llegar a ser muy largas y por tanto costosas para escribir en un comando en el intérprete. La alternativa es utilizar rutas relativas.

Una “ruta relativa” es una secuencia de nombres de carpetas separadas por “/” que no comienza por el símbolo “/” (si lo hiciera sería una ruta absoluta) y que se interpretan considerando como prefijo el directorio actual. Asumiendo que el directorio actual del intérprete es dirC la siguiente figura muestra la interpretación de diferentes rutas relativas. Nótese que ninguna de ellas comienza por el “/”.

​

Operaciones con directorios

Los directorios tienen un papel importantísimo en los sistemas de ficheros. Un directorio contiene varias entradas, una por archivo que contiene. Cada una de esas entradas contiene información relativa al fichero. Por ejemplo el nombre y sus atributos.

Cuando se solicita la apertura de un archivo a un sistema de ficheros, éste busca ese archivo en un determinado directorio indicado en la petición hasta encontrar el nombre del archivo y luego extraen los atributos y el contenido del mismo en disco.

El tener una jerarquía permite por ejemplo que varios usuarios puedan tener archivos con el mismo nombre ya que cada uno los tendrá en su directorio correspondiente.

Al hablar de los directorios, tenemos dos nuevos conceptos en los sistemas de ficheros. El de ruta relativa y el de ruta absoluta de un archivo. La ruta absoluta consiste en la ruta desde el directorio raíz hasta el archivo. Por ejemplo /bin/rc/termrc. La ruta relativa, por otro lado, se considera cuando el nombre de ruta no empieza por raíz, en cuyo caso se toma a partir del directorio actual en el que estemos. Por ejemplo, si estamos en /bin , la ruta al fichero del ejemplo anterior sería rc/termrc.

Al igual que con los archivos normales, con los directorios también se pueden realizar distintas operaciones.

Las más comunes son: Create, Delete, Opendir, Closedir, Readdir, Rename.

  • Create. Se crea un directorio, que este vacío con la excepción de punto y punto punto, que el sistema coloca automáticamente.

  • Delete. Se elimina un directorio. Solo puede eliminarse un directorio vacío. Un directorio que solo contiene punto y punto punto se considera vacío, ya que estos normalmente no pueden eliminarse.

  • Opendir. Los directorios pueden leerse. Por ejemplo, para listar todos los archivos de un directorio, un programa para emitir listados abre el directorio y lee los nombres de los archivos que contiene. Antes de poder leer un directorio, es preciso abrirlo, de forma análoga a cómo se abren y leen los archivos.

  • Closedir. Una vez que se ha leído un directorio, debe cerrarse para liberar espacio de tablas internas.

  • Readdir. Esta llamada devuelve la siguiente entrada de un directorio abierto. Antes, era posible leer directorios empleando la llamada al sistema Read normal, pero ese enfoque tiene la desventaja de obligar al programador a conocer y manejar la estructura interna de los directorios. En contraste, Readdir siempre devuelve una entrada en un formato estándar, sin importar cual de las posibles estructuras de directorios se esté usando.

  • Rename. En muchos sentidos, los directorios son iguales que los archivos y podemos cambiar su nombre tal como hacemos con los archivos.

Lo mismo que con las operaciones con ficheros, dependiendo del sistema operativo en el que estemos trabajando, podemos encontrarnos con más o con menos llamadas.

 

  • Implementación de sistemas de archivos

  • Los sistemas de archivos implementan el

  • almacenamiento persistente

  • los datos

  • creados por un programa persisten a la

  • finalización del mismo.

  • Los sistemas de archivos suministran una

  • versión mejorada de los dispositivos del

  • almacenamiento (discos, cintas, CD-ROM ...)

  • Existen sistemas de computación especiales

  • que no tienen, o no necesitan, sistema de

  • archivos. P. ej. un SO de un satélite, o en un  microondas

​

Distribución de los sistemas de archivos duplicados

La figura siguiente muestra una duplicación que copia el sistema de archivos raíz (/) en dos discos físicos. Las réplicas de bases de datos de estado (metadbs) se sitúan en ambos discos.

La Figura 10–2 muestra un sistema con la configuración siguiente.

  • El sistema de archivos raíz (/) de hdisk0 se incluye en la concatenación de un único segmento denominada d31.

  • Se crea una concatenación de un único segmento denominada d32 en el disco duro llamado hdisk1.

  • La duplicación que recibe el nombre de d30 consta de subduplicaciones llamadas d31 y d32.

  • La duplicación copia los datos en el sistema de archivos raiz de ambas subduplicaciones.

  • Las réplicas de las bases de datos se crean en ambos segmentos hdisk0 y hdisk1.

 

Implementación de Archivos

Se emplean diversos métodos en los diferentes sistemas operativos. Algunos de ellos son:

Asignación Continua: El esquema de asignación mas sencillo es almacenar cada archivo como un bloque contigua de datos en el disco. Este esquema tiene dos ventajas importantes:

                1. La implementación es sencilla porque para saber donde estan los bloques de un archivo basta con recordar un                             número, la dirección en disco del primer bloque.

 

                 2. El rendimiento es excelente porque es posible leer todo el archivo del disco en una sola operacion.   

Desventajas:

                 1. No es factible sino se conoce el tamaño máximo del archivo en el momento en que se crea el archivo.    

                     

                  2. Es la fragmentación del discoque resulta de esta política de asignación.

Implementación de Directorios

Antes de poder leer un archivo, éste debe abrirse. Cuando se abre un archivo, el sistema operativo utiliza el nombre de la ruta suministrado por el usuario para localizar la entrada de directorio. Esta entrada provee la información necesaria para encontrar los bloques de disco. Dependiendo del sistema, esta información puede ser la dirección de disco de todo el archivo (con asignación contigua), el número del primer bloque (ambos esquemas de lista enlazada) o el número del nodo-i. En todos los casos, la función principal del sistema de directorios es asociar el nombre ASCII del archivo a la información necesaria para localizar los datos.

 

ARCHIVOS COMPARTIDOS

Cuando se efectúan exploraciones de software, los agentes recopilan datos e informan de ellos al servidor. Si hay más de un agente explorando (recopilando datos) el mismo sistema de archivos, se obtendrá una exploración excesiva, lo que es poco eficiente, ya que se sobrecarga innecesariamente el disco y la red. Por consiguiente, para su mayor provecho, debe corregir este tipo de situaciones designando a un único agente para que explore un sistema de archivos determinado (directorio compartido). Lo mejor es designar el directorio superior para que lo examine un único agente (en vez de que varios agentes exploren todos los directorios internos). A continuación, el agente enviará el resultado de la exploración al servidor y, de este modo, se permitirá que todos los agentes vean la información necesaria para la supervisión del uso y del inventario. Como consecuencia, ningún otro agente podrá explorar el sistema de archivos compartidos de nuevo.

Tenga en cuenta que en una situación en la que un sistema de archivos compartido se monta más de una vez (en más de un directorio) es posible que el agente designado para explorar el sistema de archivos compartido no cargue los resultados de exploración de ese sistema o que tenga el estado Inventario antiguo. Por lo tanto, no debe explorar el sistema de archivos compartido que se ha montado más de una vez.

Cuando no se explora el sistema de archivos compartidos o algunas de sus partes se quedan sin explorar, el resultado será una insuficiencia de exploraciones. En la mayoría de los casos, esta situación debe corregirse para asegurarse de que se tiene en cuenta todo el software. No obstante, cuando se está seguro de que no hay software que deba tenerse en cuenta, estos sistemas de archivos específicos se pueden dejar sin explorar (designe agentes específicos para no explorar).

Sistemas de Archivos por Registros y Bitácoras

Aunque los sistemas de archivos estructurados por registro son una idea interesante, no se utilizan ampliamente, debido en parte a su alta incompatibilidad con los sistemas de archivos existentes. Sin embargo, una de las ideas inherentes en ellos, la robustez frente a las fallas, se puede aplicar con facilidad a sistemas de archivos más convencionales. La idea básica aquí es mantener un registro de lo que va a realizar el sistema de archivos antes de hacerlo, por lo que si el sistema falla antes de poder realizar su trabajo planeado, al momento de re-arrancar el sistema puede buscar en el registro para ver lo que estaba ocurriendo al momento de la falla y terminar el trabajo. Dichos sistemas de archivos, conocidos como sistemas de archivos por bitácora (Journaling files system, JFS), se encuentran en uso actualmente. El sistema de archivos NTFS de Microsoft, así como los sistemas ext3 y ReiserFS de Linux son todos por bitácora

 

Sistema de archivos virtual

Un sistema de archivos virtual (VFS) o conmutador de sistema de archivos virtual es una capa de abstracción encima de un sistema de archivos más concreto. El propósito de un VFS es permitir que las aplicaciones cliente tengan acceso a diversos tipos de sistemas de archivos concretos de una manera uniforme. Puede ser utilizada para tender un puente sobre las diferencias en los sistemas de archivos de Windows, de Mac OS y Unix, de modo que las aplicaciones pudieran tener acceso a archivos en los sistemas de archivos locales de esos tipos sin tener que saber a qué tipo de sistema de archivos están teniendo acceso.

Un VFS especifica una interfaz (o un contrato) entre el kernel y un sistema de archivos en concreto. Por lo tanto, es fácil agregar nuevos sistemas de archivos al kernel simplemente satisfaciendo el contrato. Los términos del contrato pueden volverse incompatibles de una versión a otra, lo que requeriría que sistemas de archivos concretos fuesen recompilados, y posiblemente modificados antes de la recompilación, para permitirles trabajar con un nuevo lanzamiento del sistema operativo; o el proveedor del sistema operativo pueda realizar solamente cambios retrocompatibles al contrato, de modo que un sistema de archivos concreto construido para un lanzamiento dado del sistema operativo trabaje con las versiones futuras del mismo sistema operativo.

​

Administración del Sistema de Archivos

Esta sección está dedicada a un nivel más complejo de los sistemas de archivos y a la forma de trabajar de un administrador de sistemas Unix respecto a ellos

Tiempo

4 horas

Nivel

Unixero profesional

Bibliografía

LSB

Prerrequisitos

Sistema de archivos

Linux Standard Base

La Base Estándar para Linux (Linux Standard Base, abreviado LSB), es un proyecto conjunto de varias Distribuciones de Linux bajo la estructura organizativa del Free Standards Group con el objeto de crear y normalizar la estructura interna de los sistemas operativos derivados de Linux. La LSB está basada en la Especificación POSIX, la Especificación Única de UNIX (Single UNIX Specification) y en varios otros estándares abiertos, aunque extiende éstos en ciertas áreas.

De acuerdo a la definición de la propia LSB:

El objetivo de la LSB es desarrollar y promover un conjunto de estándares que aumentarán la compatibilidad entre las distribuciones de Linux y permitirán que los programas de aplicación puedan ser ejecutados en cualquier sistema que se adhiera a ella. Además, la LSB ayudará a coordinar esfuerzos tendentes a reclutar productores y proveedores de programas que creen productos originales para Linux o adaptaciones de productos existentes.

Mediante un proceso de certificación es posible obtener la conformidad a la LSB de un producto. Dicha certificación la lleva a cabo el Open Group en colaboración con el Free Standards Group (Grupo de Estándares Libres).

Como ejemplo, la LSB específica: bibliotecas estándar, un conjunto de órdenes y utilerías que extienden el estándar POSIX, la estructura jerárquica del sistema de archivos, los niveles de ejecución, y varias extensiones al sistema gráfico X Window.

 

Administración del espacio en disco

Por lo general los archivos se almacenan en disco, así que la administración del espacio en disco es una cuestión importante para los diseñadores de sistemas de archivos.

Hay dos estrategias generales posibles para almacenar un archivo de n bytes: se asignan n bytes consecutivos de espacio en disco el archivo se divide en varios bloques (no necesariamente) contiguos.

 

Almacenar un archivo como una secuencia contigua de bytes tiene el problema obvio de que si un archivo crece, probablemente tendrá que moverse en el disco.

 

El mismo problema se aplica a los segmentos en memoria, excepto que la operación de mover un segmento en memoria es rápida, en comparación con la operación de mover un archivo de una posición en el disco a otra.

​

Tamaño de bloque

Dada la forma en que están organizados los discos, el sector, la pista y el cilindro son candidatos obvios para la unidad de asignación En un sistema de paginación, el tamaño de la página también es uno de los principales contendientes.

 

En un sistema de paginación, el tamaño de la página también es uno de los principales contendientes.

3
bottom of page