En sistemas operativos como Linux, los archivos y directorios poseen atributos esenciales que gestionan el acceso y las operaciones. Estos incluyen el nodo inode, el tipo de archivo, los permisos de lectura, escritura y ejecución, así como la pertenencia a usuarios y grupos.
Atributos básicos de archivos
Al listar archivos con el comando ls -lh, se muestran detalles como el inode, tipo, permisos, enlaces duros, propietario, grupo, tamaño y fecha de modificación. Por ejemplo:
$ ls -lh ejemplo.txt
-rw-r--r-- 1 admin usuarios 45 12:30 ejemplo.txt
Esta salida indica que el archivo ejemplo.txt es un archivo regular, con permisos rw-r--r-- (lectura y escritura para el propietario, solo lectura para el grupo y otros), pertenece al usuario admin y al grupo usuarios, y tiene un tamaño de 45 bytes.
El concepto de inode
Cada archivo o directorio en Linux está representado por un inode, que almacena metadatos como permisos, propietario, tamaño y ubicación de bloques de datos. El inode actúa como un índice, permitiendo al sistema acceder rápidamente a la información del archivo. Se puede ver el inode con ls -i:
$ ls -i ejemplo.txt
12345 ejemplo.txt
Enlaces duros comparten el mismo inode, lo que significa que apuntan a los mismos datos en disco.
Enlaces duros y simbólicos
Enlaces duros se crean con ln y comparten el inode. Por ejemplo:
$ ln ejemplo.txt enlace_duro.txt
$ ls -i ejemplo.txt enlace_duro.txt
12345 ejemplo.txt
12345 enlace_duro.txt
Modificar uno afecta al otro, y eliminar uno no elimina los datos hasta que no queden enlaces.
Enlaces simbólicos (o soft links) se crean con ln -s y son referencias a la ruta del archivo original. Tienen su propio inode. Ejemplo:
$ ln -s ejemplo.txt enlace_simbolico.txt
$ ls -l enlace_simbolico.txt
lrwxrwxrwx 1 admin usuarios 12 12:30 enlace_simbolico.txt -> ejemplo.txt
Si el archivo original se elimina, el enlace simbólico queda roto.
Permisos de archivos y directorios
Los permisos se dividen en tres grupos: propietario (owner), grupo (group) y otros (others). Cada grupo tiene permisos de lectura (r), escritura (w) y ejecución (x). Para archivos:
- Lectura (r): Permite ver el contenido.
- Escritura (w): Permite modificar el contenido.
- Ejecución (x): Permite ejecutar el archivo como programa.
Para directorios:
- Lectura (r): Permite listar el contenido.
- Escritura (w): Permite crear, eliminar o renombrar archivos dentro.
- Ejecución (x): Permite acceder al directorio.
Los permisos se visualizan en formato octal o con caracteres. Por ejemplo, 755 en octal equivale a rwxr-xr-x.
Modificación de permisos con chmod
El comando chmod cambia permisos. Se puede usar notación octal o simbólica. Ejemplo con octal:
$ chmod 644 ejemplo.txt
$ ls -l ejemplo.txt
-rw-r--r-- 1 admin usuarios 45 12:30 ejemplo.txt
Con notación simbólica para añadir ejecución al propietario:
$ chmod u+x ejemplo.txt
$ ls -l ejemplo.txt
-rwxr--r-- 1 admin usuarios 45 12:30 ejemplo.txt
Para aplicar cambios recursivamente en directorios, usar -R.
Umask y permisos predeterminados
La umask establece permisos por defecto al crear archiovs o directorios. Se calcula restando la umask de los pemrisos base (666 para archivos, 777 para directorios). Ejemplo con umask 022:
Archivo: 666 - 022 = 644 (rw-r--r--)
Directorio: 777 - 022 = 755 (rwxr-xr-x)
Se puede ver la umask actual con umask y modificarla temporalmente.
Bits especiales: setuid, setgid y sticky bit
setuid permite ejecutar un archivo con los permisos del propietario. Se activa con chmod u+s o en octal 4000. Ejemplo:
$ chmod 4755 programa.bin
$ ls -l programa.bin
-rwsr-xr-x 1 root usuarios 1024 12:30 programa.bin
setgid hace que los archivos creados en un directorio hereden el grupo. Se activa con chmod g+s o en octal 2000.
Sticky bit restringe la eliminación de archivos en directorios compartidos. Se activa con chmod o+t o en octal 1000, como en /tmp.
Propiedad de archivos con chown y chgrp
chown cambia el propietario y grupo de archivos. Ejemplo:
$ chown nuevo_usuario:nuevo_grupo ejemplo.txt
$ ls -l ejemplo.txt
-rw-r--r-- 1 nuevo_usuario nuevo_grupo 45 12:30 ejemplo.txt
chgrp cambia solo el grupo. Ambos comandos soportan la opción -R para cambios recursivos.
Tiempos de modificación y acceso
Los archivos tienen marcas de tiempo: modificación, acceso y cambio de inode. Se pueden ver con stat:
$ stat ejemplo.txt
Fichero: ejemplo.txt
Tamaño: 45 Bloques: 8 Bloque E/S: 4096 fichero regular
Acceso: (0644/-rw-r--r--) Uid: ( 1000/ admin) Gid: ( 1000/ usuarios)
Cambiar: 2023-10-05 12:30:00.000000000 +0200
Modificar: 2023-10-05 12:30:00.000000000 +0200
Acceso: 2023-10-05 12:30:00.000000000 +0200
El comando touch puede actualizar estos tiempos.
Atriubtos del sistema de archivos
Algunos sistemas de archivos soportan atributos extendidos con chattr. Por ejemplo, el flag +i hace un archivo inmutable:
$ chattr +i ejemplo.txt
$ rm ejemplo.txt
rm: no se puede borrar 'ejemplo.txt': Operación no permitida
Estos atributos dependen del sistema de archivos subyacente.