Unix sistema de archivos

Un pilar básico del Sistema UNIX es el sistema de archivos jerárquico, con estructura de árbol. El sistema de archivos proporciona una forma potente y flexible de organizar y gestionar los datos contenidos en el ordenador. Aunque muchas de las características del sistema de archivos se inventaron originalmente para el Sistema UNIX, su estructura ha resultado ser tan útil que se ha adoptado por muchos otros sistemas operativos.

Introducción.

Un pilar básico del Sistema UNIX es el sistema de archivos jerárquico, con estructura de árbol. El sistema de archivos proporciona una forma potente y flexible de organizar y gestionar los datos contenidos en el ordenador. Aunque muchas de las características del sistema de archivos se inventaron originalmente para el Sistema UNIX, su estructura ha resultado ser tan útil que se ha adoptado por muchos otros sistemas operativos.
Un archivo es la estructura básica utilizada para almacenar información en el Sistema UNIX. El nombre de archivo identifica de manera unívoca al archivo. El sistema operativo UNIX conoce dónde está localizado el archivo y guarda además otro tipo de información sobre el archivo. Se puede definir formalmente el término archivo como un conjunto de datos con un nombre asociado. En cierto modo, se puede entender un archivo como una extensión del conjunto de datos asociados a un proceso, pero el hecho de que estos datos continúen existiendo aunque el proceso haya terminado, los hace especialmente útiles para el almacenamiento de información a largo plazo.
Todo el trabajo de los usuarios de un Sistema UNIX está almacenado en archivos. En algunos sistemas podría ser difícil e incluso imposible encontrar un archivo. El Sistema UNIX tiene varias capacidades que facilitan mucho este trabajo. Algunas de estas capacidades tienen que ver con la naturaleza básica del sistema de archivos. Otras tienen que ver con los programas de utilidad disponibles en el Sistema UNIX.
Algunos sistemas operativos imponen a todos sus archivos una estructura determinada bien definida. En UNIX un archivo no es más que una secuencia de bytes (8 bits). Algunos programas esperan encontrar estructuras de diferentes niveles, pero el núcleo (kernel) no impone ninguna estructura sobre los archivos. Por ejemplo, los editores de texto esperan que la información guardada en el archivo se encuentre en formato ASCII, pero el núcleo no sabe nada de eso.
Un sistema de archivos se puede definir como aquella parte del sistema responsable de la administración de los datos en dispositivos de almacenamiento secundario. El sistema de archivos debe proporcionar los medios necesarios para un almacenamiento seguro y privado de la información y, a la vez, la posibilidad de compartir esa información en caso de que el usuario lo desee.

Principales características del sistema de archivos UNIX.

A modo de resumen, las principales características del sistema de ficheros de UNIX son las siguientes:
  • Los usuarios tienen la posibilidad de crear, modficar y borrar archivos y directorios.
  • Para cada archivo se definen tres tipos de acceso diferentes: acceso de lectura, acceso de escritura y acceso de ejecución. Estos tres tipos de acceso se le aplican al creador del archivo, al grupo al que pertenece y al resto de los usuarios del sistema; con esto los archivos se pueden compartir.
  • Proteger los datos de los archivos. Cada archivo tiene una serie de derechos asociados, los cuales determinan y limitan los posibles accesos por parte de otras personas.
  • Cada usuario puede estructurar sus archivos como desee, el núcleo de UNIX no impone ninguna restricción, ya se encargan los programas de darle un sentido a los ficheros.
  • UNIX ofrece herramientas para realizar copias de seguridad de ficheros para prevenir la pérdida de la información.
  • Proporciona la posibilidad de cifrado y descifrado de información. Eso se puede hacer para que los datos sólo sean útiles para las personas que conozcan la clave de descifrado.
  • El usuario tiene una visión lógica de los datos, es el sistema el encargado de manipular correctamente los dispositivos y darle el soporte físico deseado ala información. El usuario no tiene que preocuparse por los dispositivos físicos, es el sistema el que se encarga de la forma en que se almacenan los datos en los dispositivos y de los medios físicos de transferencia de datos desde y hacia los mismos.
  • Tratar a los dispositivos de entrada salida como si fuesen archivos. En UNIX todo es un archivo.
  • Tiene una estructura jerárquica en forma de árbol invertido.
  • Es un sistema de archivos dinámico porque permite crear, modificar y eliminar ficheros. Los archivos aumentan su tamaño dinámicamente, no teniendo el usuario que especificar previamente un tamaño.
  • En UNIX los archivos están organizados en lo que se conoce como directorios. Un directorio no es más que un archivo algo especial, el cual contiene información que permite localizar otros archivos. Los directorios pueden contener, a su vez, nuevos directorios, los cuales se denominan subdirectorios.
En los siguientes apartados desarrollamos con mayor detalle todas estas características.

Estructura de "árbol invertido".

A la estructura resultante de la organización en directorios de UNIX, que pueden contener otros directorios o ficheros, existiendo un directorio raíz se la conoce con el nombre de estructura en árbol invertido.
En el árbol, todos los archivos y directorios dependen de un único directorio denominado directorio raíz o root, el cual se representa por el símbolo slash "/". En caso de que tengamos vatios dispositivos físicos de almacenamiento secundario en el sistema (normalmente discos o particiones de disco), todos deben depender del directorio raíz, y el usuario tratará cada uno de los discos como un subdirectorio que depende, directa o indirectamente.

Modo de asignación de espacio en disco.

Al almacenar los datos de un fichero en un disco existen dos fórmulas:
  • Asignación continua: Se colocan los k bytes que ocupa un fichero consecutivamente en el disco, Esta solución tiene el problema de que si el fichero crece será necesario mover el fichero a otra ubicación, es decir, tendremos fragmentación externa.
  • Asignación discontinua: Los k bytes que ocupa el fichero se dividen en x bloques de un tamaño z y se colocan de forma no contigua en el disco en bloques. Esto tiene el problema que si el tamaño del bloque es muy grande se produce fragmentación interna y si el tamaño del bloque es muy pequeño se aumenta el tiempo de acceso. Generalmente, el tamaño del bloque es de 512, 1024 o 2048 bytes.
Unix utiliza asignación discontinua

Nomenclatura de los archivos.

Un nombre de archivo puede ser casi cualquier secuencia de caracteres (generalmente dos nombres de archivos se consideran el mismo si coinciden en los primeros catorce caracteres, de manera que se debe tener cuidado si se excede en este número de caracteres. Sin embargo, esto sólo ocurre para ciertos tipos de archivos).
El Sistema UNIX coloca pocas restricciones sobre cómonombrar archivos.. Se pueden utilizar caracteres ASCII, aunque es muy necesario no incluir caracteres no imprimibles (tecla ctrl., alt, etc), espacios en blanco, tabulador, y los meta caracteres del shell.
En cuanto a la extensión de los archivos decir que UNIX es indiferente a la extensión, aunque es recomendable darle la extensión que espera la aplicación que trata el fichero, por ejemplo el compilador de java espera un .java. Es recomendable evitar utilizar caracteres en los nombres de archivos que tengan significado especial para el intérprete de órdenes shell.

Tipos de archivos.

Tal y como se comentó con anterioridad, UNIX realiza el tratamiento de todos los dispositivos de entrada y salida de idéntica forma: como si fueran archivos de disco (En UNIX todo es un fichero).
UNIX distingue cinco tipos de archivos: archivos sencillos, directorios, enlaces simbólicos o vinculos, archivos de dispositivos, y tuberías (pipes) con nombre.

Archivos ordinarios.

Se utilizan para almacenar información en dispositivos de almacenamiento secundario como discos duros, disquetes, cdrom, etc. Los archivos ordinarios pueden almacenar datos, imágenes, código, ejecutables. UNIX no asocia ninguna estructura ni ningún significado al contenido del archivo, ya que para él un archivo no es mas que una ristra de bytes. La encargada de darle un significado a esa ristra de bytes es la aplicación que maneja el fichero. Por ejemplo el editor de textos vi espera que el contenido de un fichero sea caracteres ASCII, un navegador web espera que el contenido sea una pagina html, etc.

Vínculos.

Un vínculo no es una clase de archivo, sino un segundo nombre para un archivo. Si dos usuarios necesitan compartir la información de un archivo, ellos pueden tener copias separadas de este archivo. Un problema al mantener copias separadas es que las dos copias pueden rápidamente perder la consistencia. Por ejemplo, un usuario puede realizar cambios que el otro podría no conocer. Un vínculo proporciona la solución a este problema. Con un vínculo, dos usuarios pueden compartir un único archivo. Ambos usuarios parecen tener copias del archivo, pero solamente existe un archivo con dos nombres. Los cambios que cualquier usuario realiza tienen lugar sobre la versión común. Este vínculo no solamente ahorra espacio al tener una única copia de un archivo, sino que asegura que la copia que cada uno utiliza es la misma. A este tipo de vínculo también se le denominavínculos duros (hard links).
Sin embargo, existen un tipo especial de vínculos denominado “Vínculos simbólicos”: Los vínculos se pueden utilizar para asignar más de un nombre a un archivo. Pero tienen algunas limitaciones importantes. No se pueden utilizar para asignar a un directorio más de un nombre. y no se pueden utilizar para vincular nombres de archivos sobre computadoras diferentes. Esto es un fallo importante de los vínculos, ya que la Versión 4 proporciona dos sistemas de archivos distribuidos, NFS y RFS, que hacen posible la compartición de archivos entre computadoras. Estas limitaciones pueden eliminarse utilizando vínculos simbólicos, introducidos en el UNIX Sistema V Versión 4 procedente de BSD. Un vínculo simbólico es un archivo que sólo contiene el nombre de otro archivo. Cuando el sistema operativo opera sobre un vínculo simbólico, éste se dirige al archivo al que apunta el vínculo simbólico. Los vínculos simbólicos no sólo se pueden utilizar para asignar más de un nombre a un archivo, sino que pueden usarse para asignar más de un nombre a un directorio. Los vínculos simbólicos también pueden ser utilizados por vínculos que residen en sistemas de archivos físicos diferentes. Esto hace posible que un árbol de directorio lógico incluya archivos que residen sobre computadoras diferentes que están conectadas a través de una red. Es análogo a lo que Microsoft Windows® denomina accesos directos.

Directorios.

Un directorio es un archivo que contiene información sobre las localizaciones y atributos de otros archivos. Básicamente un directorio es un contenedor de un grupo de archivos organizados de la forma deseada. Es el concepto de carpetas de otros sistemas operativos. Sobre el Sistema UNIX, un directorio también puede contener otros directorios. Un directorio dentro de otro directorio se denomina subdirectorio. Se puede subdividir un directorio en tantos subdirectorios como desee, y cada uno de ellos puede contener tantos subdirectorios como quiera.
La estructura del directorio es la siguiente: Cada entrada en el directorio contiene el nombre del archivo y su número de inode. La cantidad de bytes reservada para el nombre del archivo suele ser 256 caracteres. Toda la información relativa al archivo está almacenada en su inode. Todos los directorios en UNIX son archivos y pueden contener cualquier número de entradas, además no existe limitación en el número de archivos o subdirectorios que se pueden almacenar en un directorio.

Archivos de dispositivos.

UNIX se comunica con los dispositivos periféricos por medio de los archivos de dispositivo, por lo tanto se puede ver un archivo de dispositivo como un archivo especial que representa un dispositivo fisico. Puede ser un terminal, un tarjeta de red, disco duro SCSI o IDE, etc, es decir, es el medio utilizado para acceder a dispositivos hardware, estando por tanto, cada hardware asociado a un archivo especial.
Desde la perspectiva del usuario, el Sistema UNIX trata los archivos especiales como archivos ordinarios; esto es, puede leer o escribir los dispositivos exactamente como lee y escribe los archivos ordinarios. Sin embargo no contienen datos sino información de la ubicación del dispositivo y de cómo se va a comunicar UNIX con el mismo. Esta forma de tratar el hardware del sistema tiene una consecuencia importante para los usuarios del Sistema UNIX. Puesto que UNIX trata casi todo como si fuese un archivo, no se necesita aprender las particularidades del hardware de la computadora. Una vez que se aprende a manejar los archivos del Sistema UNIX, se sabe cómo manejar todos los objetos del Sistema UNIX.
Los archivos de dispositivos se almacenan en un directorio especial de UNIX: /dev pudiendo ser de dos tipos:
  • Archivos de dispositivo en modo carácter
  • Archivos de dispositivo en modo bloque.

Archivos de dispositivo en modo bloque

Los archivos de dispositivo modo bloque son aquellos que manejan dispositivos en modo bloque. Los dispositivos modo bloque transfieren datos en bloques de longitud fija a través de buffers de entrada salida. Los dispositivos que usan estos archivos son dispositivos de almacenamiento y acceso aleatorio, es decir, discos, cdroms, etc Para crear este tipo de archivos se utiliza el comando mknod

Archivos de dispositivo en modo carácter

Los archivos de dispositivo en modo carácter son aquellos que manejan dispositivos en modo carácter. Los archivos de dispositivo de tipo carácter son aquellos que la entrada salida se realiza carácter a carácter no necesitando de ningun tipo de sistema de archivos en especial, por lo tanto no se utilizan los buffers. Algunos ejemplos de este tipo de archivos son: monitores, impresoras, etc. Al igual que los archivos de dispositivo modo bloque, estos archivos se crean mediante la llamada al sistema mknod
Algunos de los archivos de dispositivos más relevantes son:
  • /dev/dsk Archivo de dispositivo modo bloque de las unidades de disco duro. En Linux los discos duros tienen como archivo de dispositivo IDE el archivo /dev/hdxy, donde “x” es una letra que varia en función de la interfaz IDE a la que este conectado el dispositivo en placa y a la configuración de este (maestro y esclavo):
    • a para el dispositivo conectado al IDE 1 como maestro
    • b para el dispositivo conectado al IDE 1 como esclavo
    • c para el dispositivo conectado al IDE 2 como maestro
    • d para el dispositivo conectado al IDE 2 como esclavo
    • e “y” es un numero que indica la partición del disco hdb1 partición primera del disco duro conectado al IDE1 como esclavo. hdb2 partición secundaria del disco duro conectado al IDE1 como esclavo.
  • /dev/sdxy Archivo de dispositivo modo bloque para los discos de tipo SCSI (Small Computer Standard Interface). xy identifica el número de disco y su partición correspondiente.
  • /dev /fdx Archivo de dispositivo correspondiente al disco flexible x.
  • /dev /ttyNN Archivo correspondiente al terminal NN.
  • /dev/lpx Archivo correspondiente a la impresora x.
  • /dev/cdrom Archivo de dispositivo asociado al CD-ROM.
Estos archivos, al hacer un listado del directorio /dev, se identifican por su nombre y por dos números, llamados número mayor y número menor. El primero de ellos coincide para todos los dispositivos del mismo tipo y con el segundo se diferencia entre distintos dispositivos de la misma familia. Ambos números son empleados por el núcleo.

Tuberías con nombre (pipes)

Son mecanismos de comunicación que permiten la transferencia de datos entre dos procesos. A continuación se vera como crear archivos de dispositivo, pipes o sockets. Tanto los ficheros especiales orientados a caracter como los orientados a bloque, y tambien los pipes, se crean con la orden mknod (MaKe NODe).
La sintaxis básica de mknod es la siguiente:
mknod  [tipo] major minor
donde:
  • nombre que queremos asignarle al archivo.
  • [tipo] Contiene los valores:p (pipe), c (character), b (block),
  • major corresponden a lo que se denomina major number, número principal de un archivo de dispositivo y designa un tipo de periférico (impresoras, discos duros, terminales…),
  • minor corresponden a lo que se denomina minor number, número secundario de un archivo de dispositivo hace referencia a un elemento de dicha clase de dispositivo (la impresora conectada a lp0, la terminal número 3…).

Creación de un sistema de archivos en UNIX.

Para crear un sistema de archivos se utiliza la orden mkfs cuya sintaxis es la siguiente
mkfs [-vct] dispositivo tamaño
Siendo:
  • Dispositivo es el archivo de dispositivo utilizado para acceder al periférico
  • Tamaño indica el número de bloques que tiene el sistema de archivos
  • Las opciones vct significan:
    • v modo verbose (salida por pantalla de mensajes de log).
    • c indica que se realice una comprobación con objeto de verificar que todos los bloques son correctos.
    • t sirve para indicar el tipo de sistema de archivos que desamos crear.
Una vez creado el sistema de ficheros, hay que incorporarlo a la estructura jerárquica de Unix, lo que habitualmente se denomina montar un sistema. Para ello, utilizaremos la orden mount. Hay que montar los sistemas de archivos en directorios que tienen que estar vacios y a ese directorio se le llama punto de montaje. La sintaxis básica es la siguiente:
mount –tahvrw dispositivo directorio
  • t indica el tipo de sistema de archivos que montamos
  • a monta todos los sistemas de archivos incluidos en el fichero /etc/fstab
  • h ayuda
  • v modo verbose
  • r monta el sistema de archivos en modo lectura
  • w monta el sistema de archivos en modo lectura-escritura.
Una vez que se acaba de trabajar con un sistema de archivo previamente montado hay que desasociarlo de la estructura jerarquica, a esto se le llama desmontarlo y para ello se utiliza la orden umount, que recibe como parámetro bien el directorio a desmontar o bien el dispositivo asociado a ese directorio.

Estructura Interna del Sistema de Archivos de UNIX.

En la estructura del sistema de archivos de un UNIX versión System V (el UNIX original de los laboratorios Bell) se distinguen cuatro partes:
  • El bloque de arranque.
  • El super bloque.
  • La lista de nodos índice
  • Los bloques de datos.
Vamos a describir a continuación cada una de estas partes.

El bloque de arranque.

Se sitúa al comienzo del sistema de archivos, en el primer sector, y contiene el código de arranque que es un programa que se encarga de buscar el sistema operativo y cargarlo en memoria para iniciar la máquina.

El super bloque.

El súper bloque ocupa el primer bloque lógico del disco y describe el estado de un sistema de archivos. El súper bloque es la pieza mas importante en cualquier sistema de archivos, tanto que si se daña se pierden todos los datos almacenados en el: sistema de archivos que representa. Para evitar esto, el superbloque es redundante, es decir, existen varias copias del mismo, distribuidas por el disco para evitar los inconvenientes de su pérdida. En el súper bloque se almacena la siguiente información del sistema de archivos:
  • Tamaño de cada bloque de disco.
  • Lista de bloques libres.
  • Índice del siguiente bloque libre en la lista de bloques libres.
  • Tamaño de la lista de inodes.
  • Número de inodes libres
  • Lista de inodes libres
  • Índice del siguiente inode libre en la lista de inodes libres
  • Bandera (flag) que indica si el super bloque se ha modificado o no.

La lista de i-nodes (nodos índices).

Se encuentra a continuación del super bloque. Esta lista tiene una entrada (denominada inode) por cada archivo del sistema de archivos donde se guarda la descripción del mismo. Durante el arranque del sistema, el núcleo lee la lista de inodes del disco y carga una copia en memoria conocida como tabla de inodes. Los inodes contienen toda la información acerca del archivo que representan. Esta información incluye propietario, derechos de acceso, tamaño, localización en el sistema de archivos, etc. A continuación se muestran aquellos campos componentes de un inode más relevantes:
  • Identificador del propietario del archivo y del grupo al que pertenece.
  • Tipo de archivo.
  • Derechos de acceso. Se reservan nueve bits para representar los derechos de lectura, escritura y ejecución (rwx) para el propietario, el grupo y el resto, y otros tres bits para definir si están o no activas las banderassetuid, setgid y sticky bit.
  • Fecha de la última modificación.
  • Contador de enlaces (links).
  • Tamaño del archivo.
  • Entradas para los bloques de dirección. Las entradas que apuntan a los bloques de datos son 13. Los 10 primeros punteros apuntan a bloques directos; así, los datos de archivos pequeños (a lo sumo 10 bloques de disco) pueden ser referenciados inmediatamente, puesto que mientras el archivo esta abierto se mantiene una copia de su inode en memoria principal. Los tres apuntadores siguientes apuntan a bloques indirectos.
    • El primero de ellos es un puntero indirecto simple,
    • El segundo un puntero indirecto doble
    • El tercero es un puntero indirecto triple.

Bloques de datos.

Comienzan a continuación de la lista de nodos índice y ocupan el resto del sistema archivos. En los bloques de datos se almacena el contenido de los archivos referenciados por un inode.

Estructura externa del sistema de archivos de UNIX.

La estructura externa del sistema de archivos de Unix es jerárquica en forma de árbol invertido. Al directorio raíz se le denomina con el símbolo “/” y dentro de el puede haber tantos archivos como directorios se quiera. Se puede observar que de esta forma se da una relación padre-hijo, al igual que en cualquier árbol.
Todos los directorios tienen dos entradas especiales que son:
  • El punto . denota al propio directorio
  • El doble punto .. que denota al directoro padre.
Al abrir una sesión en UNIX, nos colocamos en un directorio especial denominado directorio de recepcion o de partida, este directorio no se debe de confundir con el directorio donde se trabaja en un momento dado, al cual se le llama directorio de trabajo. En esta estructura, todo archivo o directorio se define por una ruta, por lo tanto la ruta no es mas que la forma de localizar un archivo o directorio en el sistema de archivos. Existen dos tipos de rutas:
  • Rutas absolutas: son aquellas que siempre parten del directorio raiz
  • Rutas relativas: son aquellas que parten del directorio de trabajo.

Directorios y archivos estándar de UNIX.

En los sistemas operativos tipo UNIX existen una serie de archivos y directorios estándar, que siempre deben aparecer con independencia de la versión de UNIX de que se trate. Los directorios estándar contienen archivos concretos.
  • Directorio raíz ( / ) es el origen de la jerarquía del sistema de archivos. Contiene algunos archivos y directorios estándar.
  • /bin es el directorio donde se encuentran los ejecutables de la mayoría de las órdenes de UNIX, entre las cuales se cuentan cat, chmod, cp, csh., date, echo, kill, ksh, In, Is, mail, mkdir, more, mv, ping, ps, pwd, rm, rmdir, sh, stty, tar, vi, y zcat. Todos los archivos de este directorio son archivos ejecutables, o bien vínculos simbólicos que llevan a archivos ejecutables ubicados en otros directorios.
  • /dev Es el directorio de dispositivos, y contiene archivos que corresponden a los dispositivos del sistema (terminales, unidades de disco, lector de CD-ROM, impresora, etc.) Entre los archivos de este directorio están:
    • cdrom: el lector CD-ROM
    • fd: la unidad de disquete
      • hd: dispositivo IDE
      • /dev/null es usado como "agujero negro"_ cualquier dato enviado a este dispositivo desaparece. ¿Para qué puede ser útil esto?. Si desea suprimir la salida por pantalla de una orden, podría enviar la salida a /dev/null.
  • /etc contiene archivos para la administración y configuración del sistema, estando restringidos su utilización a los usuarios. Entre los archivos residentes en este directorio están:
    • inetdconf
    • passwd
    • printcap
    • profile
    • services
    • shadown
  • /lib contiene las imágenes de las librerías compartidas. Estos ficheros contienen código que compartirán muchos programas. En lugar de que cada programa contenga una copia propia de las rutinas compartidas, estas son guardadas en un lugar común, en /lib. Esto hace que los programas ejecutables sean menores y reduce el espacio usado en disco.
  • /lost+found contiene todos los archivos que no están relacionados con ningún directorio. Estos archivos se buscan mediante una herramienta de UNIX, fsck (chequeo del sistema de archivos), que se emplea para comprobar sistemas de archivos.
  • tmp Usado por distintas órdenes y aplicaciones, el directorio /tmp contiene archivos temporales. Todos los archivos de este directorio se borran periódicamente, para que el disco no se llene de archivos temporales. La duración de los archivos residentes en el directorio /tmp será establecida por el administrador del sistema.
  • /users Dotado de un cierto tipo de organización, el directorio /users se utiliza normalmente para almacenar los directorios iniciales de todos los usuarios del sistema.
  • /usr Contiene una serie de subdirectorios que contienen a su vez algunos de los más importantes y útiles programas y ficheros de configuración usados en el sistema. Algunos de estos subdirectorios son:
    • /usr/X386 contiene el sistema X Window. El sistema X Window es un entorno gráfico que proporciona un gran número de utilidades y programas gráficos, mostrados en "ventanas" en su pantalla. El directorio /usr/X386 contiene todos los ejecutables de X Window, ficheros de configuración y de soporte.
    • /usr/bin es el almacén real de programas del sistema UNIX. Contiene la mayoría de los programas que no se encuentran en otras partes como /bin.
    • /usr/etc Como /etc contiene diferentes ficheros de configuración y programas del sistema, /usr/etc contiene incluso más que el anterior. En general, los ficheros que se encuentran en /usr/etc/ no son esenciales para el sistema, a diferencia de los que se encuentran en /etc, que si lo son.
    • /usr/include contiene los ficheros de cabecera para el compilador de C.
    • /usr/g++-include contiene ficheros de cabecera para el compilador de C++ (muy parecido a /usr/include).
    • /usr/lib contiene las librerías equivalentes "stub" y "static" a los ficheros encontrados en /lib. Al compilar un programa, este es "enlazado" con las librerías que se encuentran en /usr/lib, las cuales dirigen al programa a buscar en /lib cuando necesita el código de la librería. Además, varios programas guardan ficheros de configuración en /usr/lib.
    • /usr/local es muy parecido a /usr contiene programas y ficheros no esenciales para el sistema, pero que hacen el sistema más divertido y excitante. En general, los programas que se encuentran en /usr/local son específicos de su sistema, esto es, el directorio /usr/local difiere bastante entre sistemas UNIX.
    • /usr/man Este directorio contiene las páginas de manual. Hay dos subdirectorios para cada página "sección" de las páginas (use la orden man man para más detalles). Por ejemplo, /usr/man/man1 contiene los fuentes (es decir, los originales por formatear) de las páginas de manual de la sección 1, y /usr/man/cat1 las páginas ya formateadas de la sección 1.
  • /unix contiene la imagen binaria del núcleo de UNIX que se carga al arrancar el sistema. El UNIX BSD tiene la imagen en /vmunix.
  • /etc/passwd Es un fichero que contiene la información anterior acerca de los usuarios. Cada línea del fichero contiene información acerca de un único usuario; el formato de línea es:
nombre:clave encriptada:UID:GID:info_usuario:dir_inicio:shell
Siendo:
  • nombre: es el login del usuario que introduce para conectarse.
  • clave: contiene la contraseña encriptada en los sistemas antiguos de UNIX; actualmente la clave encriptada aparece en /etc/shadow, con lo que este campo del fichero /etc/passwd aparece en blanco. (esto es una buena práctica de seguridad. El fichero shadow tiene una mayor seguridad).
  • UID: numero asignado al usuario; su rango está entre 0 y 65535, estando reservado el 0 al root y del 1 al 99.
  • GID: numero asignado al grupo al que pertenece el usuario; su rango está entre 0 y 65535, estando reservado del 0 al 99.
  • Info_usuario: contiene información relativa al usuario: nombre, telefono, etc.
  • Dir_inicio: contiene la ruta absoluta del directorio de recepción del usuario.
  • Shell: contiene la ruta absoluta del shell de conexión.

Creación de particiones de intercambio.

El comando utilizado para preparar una partición de intercambio es mkswap, con la sintaxis:
mkswap -c  
  • es el nombre de la partición de swap
  • es el tamaño de la partición, en bloques.
  • La opción -c indica a mkswap que compruebe si hay bloques erróneos en la partición mientras la crea.
Después de preparar el área de swap, hay que decirle al sistema que la use. Normalmente, el sistema comienza a usarla automáticamente durante el arranque.

Permisos y control de acceso a ficheros en UNIX

Al ser UNIX un sistema multiusuario, para proteger ficheros de usuarios particulares de la manipulación por parte de otros, UNIX proporciona un mecanismo conocido como permisos de ficheros. Este mecanismo permite que ficheros y directorios "pertenezcan" a un usuario en particular. Por ejemplo, como Larry creó ficheros en su directorio "home", Larry es el propietario de esos ficheros y tiene acceso a ellos. UNIX también permite que los ficheros sean compartidos entre usuarios y grupos de usuarios.
Como hemos explicado arriba, cada fichero pertenece a un usuario en particular. Por otra parte, los ficheros también pertenecen a un grupo en
particular, que es un conjunto de usuarios definido por el sistema. Cada usuario pertenece al menos a un grupo cuando es creado. El administrador del sistema puede hacer que un usuario tenga acceso a más de un grupo.
Los grupos usualmente son definidos por el tipo de usuarios que acceden a la máquina. Por ejemplo, en un sistema UNIX de una universidad, los usuarios pueden ser divididos en los grupos estudiantes, dirección, profesores e invitados. Hay también unos pocos grupos definidos por el sistema (como bin y admin) los cuales son usados por el propio sistema para controlar el acceso a los recursos muy raramente los usuarios nomales pertenecen a estos grupos.
Los permisos están divididos en tres tipos: lectura, escritura y ejecución. Estos permisos pueden ser fijados para tres clases de usuarios: el propietario del fichero, el grupo al que pertene el fichero y para todos los usuarios independientemente del grupo.
El permiso de lectura permite a un usuario leer el contenido del fichero o en el caso de un directorio, listar el contenido del mismo (usando ls). El permiso de escritura permite a un usuario escribir y modificar el fichero. Para directorios, el permiso de escritura permite crear nuevos ficheros o borrar ficheros ya existentes en dicho directorio. Por último, el permiso de ejecución permite a un usuario ejecutar el fichero si es un programa o guión del intérprete de comandos. Para directorios, el permiso de ejecución permite al usuario cambiar al directorio en cuestión con
cd.

Interpretando los permisos de ficheros

Veamos un ejemplo del uso de premisos de ficheros. Usando el comando ls con la opciónn -l se mostrará un listado "largo" de los ficheros, el cual incluye los permisos de ficheros.
/home/larry/foo# ls -l stuff
-rw-r--r-- 1 larry users 505 Mar 13 19:05 stuff
/home/larry/foo#
  • El primer campo impreso en el listado representa los permisos de ficheros.
  • El tercer campo es el propietario del fichero (larry), y el cuarto es el grupo al cual pertenece el fichero (users).
  • El último campo es el nombre del fichero (stuff).
Este fichero pertenece a larry y al grupo users. Echemos un vistazo a los permisos. La cadena -rw-rr nos informa, por orden, de los permisos para el propietario, el grupo del fichero y cualquier otro usuario.
El primer carácter de la cadena de permisos ("-") representa el tipo de fichero. El "-" significa que es un fichero regular.
Las siguientes tres letras ("rw-") representan los permisos para el propietario del fichero, larry. El "r" para "lectura" y "w" para escritura. Luego Larry tiene permisos de lectura y escritura para el fichero stuff.
Como ya mencionamos, aparte de los permisos de lectura y escritura está el permiso de "ejecución", representado por una "x". Como hay un "-" en lugar del "x", significa que Larry no tiene permiso para ejecutar ese fichero.
Esto es correcto, puesto que stuff no es un programa de ningún tipo.
Los siguientes tres carácteres, r— representan los permisos para los miembros del grupo. El grupo al que pertenece el fichero es users. Como solo aparece un "r" cualquier usuario que pertenezca al grupo users puede leer este fichero. Las últimos tres carácteres, también r—, representan los permisos para cualquier otro usuario del sistema (diferentes del propietario o de los pertenecientes al grupo users). De nuevo, como solo está presente el "r", los demás usuarios pueden leer el fichero, pero no escribir en él o ejecutarlo.
Aquí tenemos otros ejemplos de permisos de grupo.
-rwxr-xr-x
El propietario del fichero puede leer, escribir y ejecutar el fichero. Los usuarios pertenecientes al grupo del fichero, y todos los demás usuarios pueden leer y ejecutar el fichero.
-rw-------
El propietario del fichero puede leer y escribir. Nadie mas puede acceder al fichero.
-rwxrwxrwx
Todos los usuarios pueden leer, escribir y ejecutar el fichero.

Dependencias de permisos.

Es importante darse cuenta de que los permisos de un fichero también dependen de los permisos del directorio en el que residen. Por ejemplo, aunque un fichero tenga los permisos -rwxrwxrwx, otros usuarios no podrán acceder a él a menos que también tengan permiso de lectura y ejecución para el directorio en el cual se encuentra el fichero. Si Larry quiere restringir el acceso a todos sus ficheros, podría simplemente poner los permisos de su directorio "home" /home/larry a - rwx--. De esta forma ningún usuario podrá acceder a su directorio ni a ninguno de sus ficheros o subdirectorios.
En otras palabras, para acceder a un fichero, debes de tener permiso de ejecución de todos los directorios a lo largo del camino de acceso al fichero, además de permiso de lectura (o ejecución) del fichero en particular. Habitualmente, los usuarios de un sistema UNIX son muy abiertos con sus ficheros. Los permisos que se dan a los ficheros usualmente son -rw-rr, lo que permite a todos los demás usuarios leer los ficheros, pero no modificarlos de ninguna forma. Los directorios, usualmente tienen los permisos -rwxr-xr-x, lo que permite que los demás usuarios puedan moverse y ver los directorios, pero sin poder crear o borrar nuevos ficheros en ellos. Muchos usuarios pueden querer limitar el acceso de otros usuarios a sus ficheros. Poniendo los permisos de un fichero a -rw-— no se permitirá a ningún otro usuario acceder al fichero.
Igualmente, poniendo los permisos del directorio a -rwx-- no se permitirá a los demás usuarios acceder al directorio en cuestión.

Cambiando permisos

El comando chmod se usa para establecer los permisos de un fichero. Solo el propietario puede cambiar los permisos del fichero. La sintaxis de chmod es:
chmod {a,u,g,o}{+,-}{r,w,x} 
Brevemente, indicamos a que usuarios afecta all, user, group o other. Entonces se especifica si se están añadiendo permisos (+) o quitándolos (-). Finalmente se especifica que tipo de permiso read, write o execute. Algunos ejemplos:
chmod a+r stuff
Da a todos los usuarios acceso al fichero.
chmod +r stuff
Como arriba_ si no se indica a, u, g o o por defecto se toma a.
chmod og-x stuff
Quita permisos de ejecución a todos los usuarios excepto al propietario.

Bibliografía.

  • Guía del Usuario de Linux, de Larry Greenfield . Traducción del libro Linux User's Guide. Proyecto TDLP-es. Hispalinux.
  • Guía Para Administradores de Sistemas GNU/Linux , de Lars Wirzenius, Joanna Oja, Stephen Stafford, Alex Weeks. Proyecto TDLP-es. Hispalinux.



Si te ha gustado esta entrada, suscríbete para recibir las próximas entradas por correo electrónico. Por favor, apoya este blog.

1 comentarios:

Andres - Servidores hp dijo...

Los Sistemas Unix ya sean Linux- Mac están basados en este sistema y por lo tanto son sistemas de las mismas familias, las ventajas que poseen ambos sistemas son muchas y variadades dependiendo de la dedicación del servidor y uso que se le dará siendo estas sistemas operativos muy utilizados como las de Windows pero es mas común ver un Servidor con Sistemas basados en Linux por las ventajas y gamas que presenta.

Publicar un comentario en la entrada

top