Linux #02.06 Sistema de Ficheros en Linux

QU脡 ES UN SISTEMA DE FICHEROS

Un sistema de ficheros es el responsable de los siguientes aspectos relacionados con los ficheros:

  • Organizaci贸n (secuencias de bytes, registros, …)
  • Almacenamiento (contiguo, enlazado, …)
  • Recuperaci贸n (tablas de ficheros, caches, …)
  • Denominaci贸n (nombres de los ficheros)
  • Compartici贸n (enlaces)
  • Protecci贸n (mecanismos de protecci贸n)

ESTRUCTURA DE UN SISTEMA DE FICHEROS

  • La capa de conexi贸n puede ser:
  • Memoria compartida > En los sistemas operativos tradicionales
  • Una red de alta velocidad > En los sistemas operativos en red
  • Los servicios de directorios y ficheros est谩n en el n煤cleo. En la actualidad no siempre es as铆.
  • Los directorios se implementan como ficheros, aunque algunos sistemas los implementan de forma independiente.

CONCEPTO DE FICHERO

Los usuarios ven un fichero como una recopilaci贸n de informaci贸n almacenada en un dispositivo secundario. Cada fichero tiene un nombre.

Sin embargo, para los programadores un fichero es un tipo abstracto de datos, usado mediante una serie de operaciones.

Y para los implementadores un fichero es una colecci贸n de bloques de disco, donde cada fichero tiene un identificador binario.

Sistemas de Ficheros en un Sistema Gnu/linux

Linux aporta una gran cantidad de sistemas de ficheros. Ejemplos: ext, ext2, ext3, reiserfs, msdos, vfat, xia, minix, umsdos, proc, smb, ncp, iso9660, sysv, hpfs, affs y ufs.

El sistema de ficheros propio de Linux es el ext2 y m谩s recientemente, el ext3. Los elementos de dicho sistema de ficheros se pueden clasificar en:

  • Ficheros
  • Directorios
  • Enlaces simb贸licos
  • Dispositivos de caracteres y de bloques
  • Tuber铆as (pipes) y sockets

Un fichero no se almacena de forma continua en los dispositivos f铆sicos. Aunque Linux en la medida de lo posible, procura hacerlo as铆, a veces existen ficheros que se ven fragmentados en diferentes bloques. Debido a esta posible fragmentaci贸n, es necesaria una estructura que direccione los bloques de los ficheros. Es lo que se conoce en Linux como al estructura i-nodo, almacena las direcciones f铆sicas de los bloques que forman un fichero. Cada i-nodo ocupa 4K, peque帽a y continua, identificada a trav茅s de un n煤mero entero. La estructura de un i-nodo es la siguiente:

  • Tipo del fichero y sus permisos.
  • Identificador del usuario due帽o y del grupo del fichero.
  • Cantidad de bytes del fichero.
  • Tiempos de: 煤ltimo acceso al fichero (lectura o ejecuci贸n), 煤ltima modificaci贸n del fichero (escritura), 煤ltima modificaci贸n del i-nodo.
  • Direcciones de los 20 bloques directos del fichero, del indirecto de primer nivel, del indirecto de segundo nivel y del indirecto de tercer nivel. (Ver聽fotograf铆a)聽Ver聽imagen

El sistema de ficheros de Linux tiene una estructura de 谩rbol, donde la ra铆z es 煤nica y es representada por. La figura se muestra un esquema general de los principales directorios del sistema de ficheros de Linux.

Para nombrar los ficheros se puede emplear hasta 256 caracteres, pudiendo ser de cualquier tipo con excepci贸n de /, por ser el separador de caminos. Linux es un sistema case sensitive, es decir, diferencia entre may煤sculas y min煤sculas. Los ficheros 芦ocultos禄 en Linux son aquellos cuyo nombre comienza con el car谩cter 鈥.鈥 (punto).

Los directorios siempre tienen dos ficheros ocultos representados por 鈥.鈥 y 鈥…鈥 representa el directorio actual y el directoriopadre.

Una de las configuraciones posibles de Linux es tener dos particiones, una Linux Swap, memoria de intercambio y otra con nuestro sistema GNU/Linux, pudiendo ser el sistema ext2, o el mejorado ext3, este es una mejora del ext2 compatible con journaling.

Otra posible configuraci贸n ser铆an tres particiones: swap, /home (dedicada a las cuentas de usuarios) y la ra铆z.

Ya por ultimo, otro ejemplo muy utilizado de configuraci贸n es separar las partes est谩ticas del sistema de las partes din谩micas. En un partici贸n pondremos la raiz con la parte est谩tica (/bin, /sbin y /usr en algunos casos) y en la otra la parte din谩mica (/var , /tmp, /home).

Puntos de montaje

Adem谩s del sistema de ficheros ra铆z y sus posibles particiones, se tendr铆a en cuenta posibilidad de otros puntos de montaje preparados para otros posibles sistemas de ficheros, particiones o cualquier otro dispositivo de almacenamiento.

En las maquinas que se comparten varios sistemas operativos, se suele asignar a casa uno de estos una partici贸n.

A veces es necesario e interesante compartir datos de un sistema a otro, a diferencia de otros sistemas operativos, GNU/Linux posee un gran n煤mero de sistemas de ficheros y es capaz de compartir informaci贸n con otros sistemas operativos.

GNU/Linux es capaz de leer datos de todos los sistemas de ficheros y escribir en la mayor铆a de ellos. En el caso de NTFS,existen ciertas incompatibilidades, a煤n no solucionadas, que podr铆an hacer los datos corruptos o provocar errores en el sistema. En las pr贸ximas versiones del kernel se espera que Linux tenga soporte para dicho sistema de ficheros, siempre y cuando, Windows no siga haciendo modificaciones.

Recuerda: Para que se puedan leer o escribir los datos, la partici贸n tiene que estar disponible dentro de nuestro sistema de ficheros ra铆z (/). Por lo tanto, hay que llevar a cabo un proceso de 鈥渕ontaje鈥 del sistema de ficheros en alg煤n punto de nuestro 谩rbol de directorios. Se seguir谩 el mismo proceso si se trata de un dispositivo de almacenamiento, ya sea disquete o floppy.

Dependiendo de la distribuci贸n, hay unos u otros puntos de montaje. Normalmente suelen existir o bien como subdirectorios de la ra铆z, por ejemplo /cdrom /win /floppy, o bien son subdirectorios dentro de /mnt, el punto est谩ndar de montaje (aparecen como /mnt/cdrom /mnt/floppy…).

PROCESO DE MONTAJE DE DISPOSITIVOS.

Se realiza mediante la orden mount con el siguiente formato:

mount -t filesystem-type device mount-point

  • El filesystem puede ser msdos (fat), vfat (fat32), ntfs (ntfs lectura), iso9660 (para cdrom), …
  • El dispositivo es la entrada correspondiente en el directorio /dev a la localizaci贸n del dispositivo, los IDE ten铆an /dev/hdxy donde x es a,b,c, o d (1 master, 1 slave, 2 master, 2 slave) e y, el n煤mero de partici贸n, los SCSI (/dev/sdx) donde x es a,b,c,d … (seg煤n el ID SCSI asociado 0,1,2,3,4 …).

Nota: man mount , para m谩s informaci贸n.

Ejemplos:

Mount -T Iso9660 /Dev/Hdc /Mnt/Cdrom

Montar铆a el CD-ROM (si es el IDE que est谩 en el segundo IDE de forma master) en el punto /mnt/cdrom.

Mount -T Iso9660 /Dev/Cdrom /Mnt/Cdrom

Montar铆a el CD-ROM; /dev/cdrom se usa como sin贸nimo (es un link) del dispositivo donde est谩 conectado.

Mount -T Vfat /Dev/Fd0h1440 /Mnt/Floppy

Montar铆a el disquete, /dev/fd0H1440. Ser铆a la disquetera A en alta densidad (1.44 MB), tambi茅n puede usarse /dev/fd0.

Mount -T Ntfs /Dev/Hda2 /Mnt/Winxp

Montar铆a la segunda partici贸n del primer dispositivo IDE (la C:),

de tipo NTFS (por ejemplo un Windows XP).

Si queremos hacer las particiones fijas en el sistema, podemos hacerlo mediante la configuraci贸n del fichero /etc/fstab:

Ejemplo:

# /etc/fstab: Informaci贸n est谩tica del sistema de ficheros

#

/dev/hda2 / ext3 errors = remountro 0 1

/dev/hdb3 none swap sw 0 0

proc /proc proc defaults 0 0

/dev/fd0 /floppy auto user,noauto 0 0

/dev/cdrom /cdrom iso9660 ro,user,noauto 0 0

/dev/sdb1 /mnt/usb vfat user,noauto 0 0

Nota: El fichero /etc/fstab Indica los dispositivos que est谩n preparados para montarse en el arranque o los extra铆bles que podr谩n ser montados.

Nota: man /etc/fstab, para m谩s informaci贸n.

Con esta informaci贸n en el fichero, el proceso de montaje se simplifica, ya que se har谩 o bien en ejecuci贸n o bien bajo demanda (para los noauto). Y puede hacerse ahora simplemente pidiendo que se monte el dispositivo o el punto de montaje:

Mount /Mnt/Cdrom

Mount /Dev/Fd0

dado que el sistema ya tiene el resto de la informaci贸n.

El desmontaje, es bastante sencillo, el comando umount con punto o dispositivo:

Umount /Mnt/Cdrom

Umount /Dev/Fd0

Nota: man umount , para m谩s informaci贸n.

En el caso de medios extra铆bles, tipo CD-ROM (u otros), puede usarse eject para la extracci贸n del medio:

eject /dev/cdrom o, en este caso, s贸lo: eject

Nota: man eject , para m谩s informaci贸n.

Los comandos de montaje y desmontaje se pueden encontrar en todos los sistemas. En el fichero /etc/mtab encuentras la lista de los sistemas montados o ejecutar mount sin par谩metros para obtener esta informaci贸n.

Permisos

Cada elemento del sistema de ficheros de Linux tiene permisos de acceso de acuerdo a tres tipos de usuarios:

  • Su due帽o (casi siempre el creador) representado por la letra u (user).
  • Su grupo representado por la letra g (group).
  • El resto de los usuarios que no son el due帽o ni pertenecen al grupo. Se representa con o (other).

Para cada grupo de usuarios existen tres tipos de permisos:

  • r: read (lectura). Podr谩 si es un directorio, listar los recursos almacenados en 茅l, y leer el contenido de un fichero.
  • w: write (escritura). Podr谩 modificar un fichero. Para un directorio podr谩n crear y borrar ficheros en su interior.
  • x: execute (ejecuci贸n). Permitir谩 ejecutar el fichero desde la l铆nea de comandos y para los directorios, tendr谩 accesopara realizar el resto de las funciones permitidas mediante los otros permisos (lectura y/o escritura).

Para determinar los permisos se deben tener en cuenta:

  • Para poder realizar operaciones sobre cualquier directorio es necesario tener el permiso de ejecuci贸n.
  • Para acceder a un recurso de cualquier forma (ejecuci贸n, lectura o escritura) hay que poseer todos los permisos de ejecuci贸n de cada uno de los directorios.

Los tipos de permisos tienen su representaci贸n num茅rica, basada en un sistema octal, representado como 鈥1鈥 los permisos dados y 鈥0鈥 los no dados. Luego transforma dicha representaci贸n en octal, con los siguientes valores:

r– = 100 (4 en octal)

–w = 100 (2 en octal)

–x = 001 (1 en octal)

La combinaci贸n oscila desde cero (ning煤n permiso) hasta siete (todos los permisos).

Ejemplos:

rw- = 110 (6 en octal)

rwx = 111 (7 en octal)

r-x = 101 (5 en octal)

Los permisos 鈥渢otales鈥 de un recurso constan de nueve indicadores, los tres primeros pertenece a los permisos asociados al due帽o, los otros tres, al grupo y el resto a los usuarios.

Ejemplos: Due帽o Grupo Usuario

rwx r-x — = 111 101 000 (750 en octal)

rw- r– r– = 110 100 100 (644 en octal)

S贸lo el due帽o de un recurso siempre tendr谩 derecho a cambiar sus permisos, adem谩s de root.

Existen otros tipos de permisos m谩s complejos:

  • s y S: este permiso puede provocar problemas de seguridad si no se utiliza correctamente. Se utiliza en lugar del permiso de ejecuci贸n. La s incluye el permiso de ejecuci贸n y la S no lo incluye.

Puede ser asociado al due帽o o al grupo. Cuando se le da a un fichero el usuario que acceda al fichero, tendr谩 todos los permisos del due帽o o grupo. Un ejemplo de fichero con dicho permiso es el passwd.

Para el caso de un directorio solo tiene validez para el grupo permitiendo a los ficheros y a los subdirectorios que hereden el permiso s.

  • t y T: cuando esta asignado a un directorio con permiso de escritura, le da permiso a los usuarios para que creen ficheros en dicho directorio, pero solo podr谩n ser borrados por root o el due帽o. Para un fichero, el texto se almacena en memoria swap para ser accedido con rapidez. Se emplea el bit correspondiente al de ejecuci贸n para su asignaci贸n. t significa que adem谩s tiene el permiso de ejecuci贸n y T que no lo tiene. Un ejemplo de directorio con este permiso es el /tmp.

Para representar estos permisos se utilizan tres bits adicionales: el primero para s en el due帽o, el segundo para s en el grupo y el tercero para t. Se colocan al inicio de la cadena num茅rica de nueve bits vista anteriormente. En la cadena de caracteres se mezclan con el permiso de ejecuci贸n y de ah铆 la necesidad de emplear las may煤sculas y min煤sculas.

Ejemplos:

rws rwS r– = 110 111 110 100 (6764 en octal)

rwx rws -wT = 011 111 111 010 (3772 en octal)

Posiblemente el comando m谩s empleado en Linux es el que muestra el contenido de un directorio, llamado ls. Este comando con la opci贸n -l permite observar los permisos que tienen asociados los recursos listados, adem谩s de otras caracter铆sticas. Los permisos vienen representados a trav茅s de una cadena de 10 caracteres donde el primero indica el tipo de recursoque es:

  • d : directorio
  • l : enlace simb贸lico
  • b : dispositivo de bloque
  • c : dispositivo de caracteres
  • s : socket
  • p : tuber铆a (pipe)
  • -: fichero regular

Los otros nueve caracteres representan los permisos del recurso. El resto de las columnas de la salida representan:

  • El n煤mero de enlaces duros que posee.
  • El identificador del due帽o.
  • El identificador del grupo.
  • El tama帽o en bytes si es un fichero y si es un directorio el tama帽o en bloques que ocupan los ficheros contenidos en 茅l.
  • La fecha y hora de la 煤ltima modificaci贸n.
  • El nombre del recurso.

Ejemplos:

drwx—r-x 3 alina alina 4096 Oct 11 12:52 doc

-rw-r–r– 1 alina alina 330106 Sep 7 08:39 tesis.tgz

drwxrwxrwt 5 root root 1024 Nov 15 10:40 tmp

lrwxrwxrwx 1 alina alina 21 Oct 1 09:46 curso -> ../documentaci贸n

brw-rw—- 1 root disk 3, 1 Fri Mar 23 2001 /dev/hda1

Para cambiar los permisos de un recurso se utiliza el comando chmod.

Sintaxis: chmod [opciones]

Ejemplos:

$ chmod u+x clase.txt

# a帽ade el permiso de ejecuci贸n al due帽o

$ chmod g=rx program.sh

# asigna exactamente los permisos de lectura y ejecuci贸n al grupo

$ chmod go-w profile

# elimina el permiso de escritura en el grupo y en otros

$ chmod a+r,o-x *.ts

# adiciona el permiso de lectura para todos los usuarios y elimina el de ejecuci贸n

para nosotros

$ chmod +t tmp/

# adiciona el permiso especial t

$ chmod 755 /home/pepe/doc/

# asigna los permisos con representaci贸n octal 755 (rwxr-xr-x)

$ chmod -R o+r apps/

# adiciona el permiso de lectura a otros para un directorio de forma recursiva

incluyendo todo su contenido

$ Chmod +X ./Bin/*

# adiciona el permiso de ejecuci贸n a todos los usuarios que les corresponde por

defecto

# chmod 4511 /usr/bin/passwd

# asigna los permisos con representaci贸n octal 4511 (r-s–x–x)

Para asignar permisos por defecto, tanto a ficheros como a directorios, cada usuario posee una m谩scara de permisos. Se expresa en formato octal. La mascara representa los permisos que se le quiere asignar al recurso. Por defecto es 002 para los usuarios comunes y 022 para root.

Se calculan los permisos finales que se tienen dado en la m谩scara 022:

Ficheros = totales_para_ficheros – m谩scara = 666 – 022 = 644 = -rw-r–r–

Directorios = totales_para_directorios – m谩scara = 777 – 022 = 755 = drwxr-xr-x

Para realizar operaciones en la m谩scara se emplea el comando umask.

Sintaxis: umask [-S] [m谩scara]

Ejemplos:

$ umask

# sin argumentos muestra la m谩scara actual en formato num茅rico 022

$ umask -S

# muestra el complemento de la m谩scara en formato de caracteres u=rwx,g=r,o=r

$ umask -S 037

# asigna la m谩scara 037 (niega permisos de ejecuci贸n y de escritura para el grupo,

u=rwx,g=r,o= y todos los permisos para el resto de los usuarios). Se muestra

el resultado en formato de caracteres

$ umask g=rx,o=

# especifica el complemento la m谩scara utilizando el formato de caracteres

Para ser bien restrictivos se recomienda hacer: $ umask 077

Los nuevos directorios tendr谩n el permiso: 700 = drwx——

Los nuevos ficheros tendr谩n el permiso: 600 = -rw——-

Nota: Existen comandos para modificar los permisos de ficheros y/o directorios:

鈥 chown: cambiar propietario de los ficheros.

鈥 chgrp: cambiar grupo de los ficheros.

鈥 chmod: cambiar permisos espec铆ficos (rwx) de los archivos.

Permiten la opci贸n 鈥揜, que es recursiva si se trata de un directorio. Consultar el man para m谩s informaci贸n.

Enlaces

En Linux es posible definir enlaces a sistemas de ficheros, para que sean accesible desde cualquier punto de la jerarqu铆a, tenemos dos tipos de enlaces:

  • Fuertes o duros: no se diferencian en nada del fichero original. Un fichero existe f铆sicamente y su nombre no es m谩s que un enlace fuerte a 茅l. Cuando se crea un enlace fuerte se esta apuntando a la misma zona f铆sica. De esta forma se obtendr铆an dos o m谩s copias l贸gicas de un fichero, pero solo habr铆a una copia f铆sica. Por lo que el fichero no desaparece f铆sicamente hasta que el enlace no deje de apuntar a 茅l.
  • Simb贸licos o d茅biles: apuntan al nombre del fichero, no a su contenido. Si desaparece el fichero original (todos los enlaces duros a este) los enlaces simb贸licos correspondientes quedan inconsistentes.

No se pueden crear enlaces fuertes a directorios, ni a ficheros en particiones distintas. Para crear enlaces:

Sintaxis:

ln [opciones] <fichero|directorio>[nombre_del_enlace]</fichero|directorio>

ln [opciones]

ln [opciones] <fichero|directorio>[nombre_del_enlace]</fichero|directorio>

Opci贸n: -s se utiliza para crear enlaces simb贸licos

Ejemplos:

$ln-s /home/pepe/public_html/raiz.html index.html

$lndoc/important.docclases/*backup/

# ln -s /usr/bin /binarios

Resumen

  • Un sistema de ficheros es aqu茅l componente del sistema operativo responsable de los siguientes aspectos relacionados con los ficheros: organizaci贸n (secuencias de bytes, registros,…), almacenamiento (contiguo, enlazado,…), recuperaci贸n (tablas de ficheros, caches,…), denominaci贸n (nombres de los ficheros), compartici贸n (enlaces), protecci贸n (mecanismos de protecci贸n).
  • Para los usuarios: Un fichero es una colecci贸n de informaci贸n que se encuentra en un dispositivo de almacenamiento secundario. Cada fichero tiene un nombre, en forma de cadena de caracteres.
  • El sistema de ficheros propio de Linux es el conocido como ext2 y m谩s recientemente, el ext3. Los elementos de dicho sistema de ficheros se pueden clasificar en: ficheros, directorios, enlaces simb贸licos, dispositivos de caracteres y de bloques, tuber铆as (pipes) y sockets.
  • Para que se puedan leer o escribir los datos, la partici贸n tiene que estar disponible dentro de nuestro sistema de ficheros ra铆z (/). Por lo tanto, hay que llevar a cabo un proceso de 鈥渕ontaje鈥 del sistema de ficheros en alg煤n punto de nuestro 谩rbol de directorios. Se seguir谩 el mismo proceso si se trata de un dispositivo de almacenamiento, ya sea disquete o floppy.
  • El fichero /etc/fstab Indica los dispositivos que est谩n preparados para montarse en el arranque o los extra铆bles que podr谩n ser montados.
  • Cada uno de los elementos del sistema de ficheros de Linux posee permisos de acceso de acuerdo a tres tipos de usuarios: due帽o, grupo y el resto. Para cada uno de estos tres grupos de usuarios existen tres tipos de permisos fundamentales: lectura (read), escritura (write), ejecuci贸n (execute).
  • Los tres tipos de permisos poseen una representaci贸n num茅rica basada en el sistema octal que parte de representar como 鈥1鈥’ los bits de los permisos otorgados y 鈥0鈥 para los negados.
  • No se pueden crear enlaces fuertes No se pueden crear enlaces fuertes distintas.
  • Para crear enlaces se emplea el comando ln.