Los archivos son otro tema donde GNU/Linux difiere bastante de Windows® y muchos otros sistemas operativos. Aquí cubriremos las diferencias más obvias. Para más información, por favor consulte Capítulo 9, El sistema de archivos de Linux.
Las diferencias mayores son consecuencia directa del hecho que Linux es un sistema multiusuario: cada archivo es de la exclusiva propiedad de un usuario y un grupo. Una de las cosas que no mencionamos acerca de los usuarios es que cada uno posee un directorio propio (denominado su directorio personal, o home en inglés). El usuario es el dueño de este directorio y de todos los archivos creados en dicho directorio. Note que estos también tienen un grupo asociado y que dicho grupo es el grupo primario al que pertenece el usuario. Como se mencionó en ???, un usuario puede ser miembro de más de un grupo a la vez.
Sin embargo, esto no sería muy útil si esa fuera la única noción de propiedad de archivos. Como dueño del archivo, un usuario puede configurar permisos sobre sus archivos. Estos permisos distinguen tres categorías de usuarios: el dueño del archivo, todos los usuarios que son miembros del grupo asociado al archivo (denominado también grupo dueño) pero no son el usuario dueño, y los otros, que son todos los usuarios que no son ni el dueño ni miembros del grupo dueño.
Permiso de
Lectura (r
por
Read, Leer): permite que un
usuario lea los contenidos de un archivo. Para un directorio, el
usuario puede listar el contenido del mismo (es decir, los
archivos en este directorio).
Permiso de
Escritura (w
por
Write, Escribir): permite la
modificación del contenido de un archivo. Para un directorio,
permite que un usuario agregue o quite archivos de este
directorio, incluso si no es el dueño de esos archivos.
Permiso de
Ejecución (x
por
eXecute, Ejecutar): permite
ejecutar un archivo (normalmente sólo los archivos ejecutables
tienen activo este permiso). Para un directorio, permite que un
usuario lo recorra, lo que significa
poder ingresar a, o pasar por, ese directorio. Note que esto es
diferente del acceso de lectura: bien puede ser que Usted pueda
recorrer un directorio, ¡pero no leer el contenido del
mismo!
Todas las combinaciones de estos permisos son posibles. Por ejemplo, puede autorizar la lectura de un archivo sólo a Usted mismo y prohibirla a todos los demás usuarios. Como dueño del archivo, también puede cambiar el grupo propietario (solamente si Usted es miembro del grupo nuevo).
Tomemos el ejemplo de un archivo y un directorio. Abajo se muestra el resultado de ingresar el comando ls -l desde la línea de comandos:
$ ls -l total 1 -rw-r----- 1 reina users 0 Jul 8 14:11 un_archivo drwxr-xr-- 2 peter users 1024 Jul 8 14:11 un_directorio/ $
Los diferentes campos de salida del comando ls -l son los siguientes (de izquierda a derecha):
Los primeros diez
caracteres representan el tipo de archivo y los permisos
asociados al mismo. El primer caracter es el tipo del archivo:
contiene un guión (-
) si es un archivo
regular. Contiene una d
si es un directorio.
Hay otros tipos de archivos, de los que hablaremos más adelante.
Los nueve caracteres que siguen representan los permisos
asociados con ese archivo. En realidad los nueve caracteres son
tres grupos de tres permisos. El primer grupo representa los
derechos asociados con el dueño del archivo; los siguientes tres
se aplican a todos los usuarios que pertenecen al grupo dueño
pero que no son el dueño; y los últimos tres se aplican al resto
de los usuarios. Un guión (-
) significa que el
permiso no está activo.
Luego viene el número de vínculos del archivo. Más adelante veremos que los archivos no sólo se identifican por su nombre, sino por un número (el número de i-nodo), y por lo tanto es posible que un archivo en disco tenga varios nombres. Para un directorio el número de vínculos tiene un significado especial, que también discutiremos un poco más adelante.
Luego viene el nombre del dueño del archivo seguido del nombre del grupo dueño.
Finalmente, se muestra el tamaño del archivo (en bytes) y la fecha de su última modificación, seguido por último por el nombre del archivo o directorio propiamente dicho.
Ahora observemos en detalle los permisos
asociados con cada uno de estos archivos: antes que nada, debemos
quitar el caracter que representa al tipo, y para el archivo
un_archivo
obtenemos los derechos siguientes:
rw-r-----
.
La interpretación de los mismos es la siguiente:
Los primeros tres
(rw-
) son los derechos del usuario dueño del
archivo, en este caso reina
. Por lo tanto,
el usuario reina
, tiene el derecho de leer
el archivo (r
), de modificarlo
(w
) pero no de ejecutarlo
(-
).
Los tres siguientes
(r--
) se aplican a todo usuario que no es
reina pero que es miembro del grupo users
.
Dichos usuarios podrán leer el archivo (r
),
pero no podrán modificarlo ni ejecutarlo
(--
).
Los tres restantes
(---
) se aplican a todo usuario que no es
reina
ni es miembro del grupo
users
: simplemente no tendrá derecho alguno
sobre el archivo.
Para el directorio
un_directorio
, los derechos son
rwxr-xr--
, entonces:
peter, como dueño del
directorio, puede listar los archivos que contiene
(r
), agregar o quitar archivos del mismo
(w
), y recorrerlo
(x
).
Cada usuario que no es peter
pero es miembro del grupo users
, podrá listar
los archivos de ese directorio (r
), pero no
podrá quitar ni agregar archivos (-
), y lo
podrá recorrer (x
).
Cualquier otro usuario sólo podrá
listar el contenido de este directorio
(r--
), y nada más. Incluso no
podrá ingresar al directorio.
Hay
una excepción a estas reglas:
root
. El usuario root
puede cambiar los
atributos (permisos, dueño, y grupo dueño) de todos los archivos,
incluso si no es el propietario de los mismos, y por lo tanto
¡puede garantizarse la propiedad del archivo! root
puede leer archivos sobre los que no tiene permisos, recorrer
directorios a los que normalmente no tendría acceso, y así
sucesivamente. Y si le falta un permiso, sólo tiene que añadírselo.
root
tiene control total sobre el sistema, lo cual
implica cierto nivel de confianza en la persona que tenga la
contraseña de root
.
Para finalizar, vale la pena mencionar otra diferencia entre los nombres de los archivos en el mundo de UNIX® y en el mundo de Windows®. UNIX® permite mayor flexibilidad y tiene menos limitaciones:
Un nombre de archivo
puede contener cualquier caracter, incluso los no imprimibles,
excepto el caracter ASCII 0, que es el fin de una cadena de
caracteres, y una barra (/
) que es el
separador de directorio. Es más, debido a que UNIX® distingue
entre mayúsculas y minúsculas, los archivos
leame
y Leame
son dos
archivos diferentes, porque l
y
L
son dos caracteres
diferentes bajo sistemas basados en
UNIX®.
Como debe haber
notado, un nombre de archivo no contiene extensión alguna a menos
que Usted prefiera nombrar así a sus archivos. Bajo GNU/Linux
las extensiones de los nombres de archivo no identifican al
contenido del archivo, y tampoco lo hacen bajo otros sistemas
operativos. No obstante, las así llamadas “extensiones del
archivo” siempre son bastante convenientes. El caracter
del punto (.
) bajo UNIX® es simplemente un
caracter entre otros, pero también tiene un sentido
especial. Bajo UNIX® los nombres de archivo que comienzan con
un punto son “archivos ocultos”[1], lo cual también incluye a los
directorios cuyo nombre comienza con un punto.
[1] De manera
predeterminada, los archivos ocultos no se mostrarán en un
administrador de archivos, a menos que Usted lo ordene. En una
terminal, debe teclear el comando ls -a para
ver todos los archivos ocultos además del resto de los
archivos. Esencialmente, los mismos contienen información de
configuración. Eche un vistazo a .mozilla
o
.openoffice
en su directorio personal, para
ver un ejemplo.