Los archivos son otro tópico donde GNU/Linux difiere bastante de Windows y muchos otros sistemas operativos. Aquí cubriremos las diferencias más obvias, para más información lea el capítulo El sistema de archivos de Linux: ext2fs (EXTended 2 FileSystem) que ofrece mayor detalle.
La primera diferencia, y probablemente la más importante, justamente está ligada a la presencia de usuarios. Podríamos haber mencionado que cada usuario tiene su propio directorio (denominado su directorio personal, o home en inglés), pero esto no dice más que una parte de lo que ocurre realmente, a saber, que todo archivo en un sistema Unix es de la exclusiva propiedad de un usuario y un grupo. Por lo tanto, un usuario no sólo tiene su propio directorio personal, sino que también él es el dueño de sus archivos en el verdadero sentido de la palabra.
Es más, los permisos están asociados con cada archivo y sólo su dueño puede cambiarlos. 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.
Hay tres permisos diferentes:
Permiso de lectura (r por Read, Leer): Para un archivo, esto permite que se lea su contenido. Para un directorio, esto permite que se muestren los archivos que contiene, solamente si también está activo el permiso de ejecución sobre el mismo;
Permiso de escritura (w por Write, Escribir): Para un archivo, esto permite que se modifique su contenido. Para un directorio, esto permite que los archivos que contiene sean modificados y borrados, incluso si la persona no es el dueño de esos archivos;
Permiso de ejecución (x por eXecute, Ejecutar) Para un archivo, esto permite su ejecución (en consecuencia, normalmente sólo los archivos ejecutables tienen activo este permiso). Para un directorio, esto permite que un usuario lo recorra (lo que significa poder ingresar a, o pasar por, ese directorio).
Todas las combinaciones de estos derechos son posibles. Por ejemplo: Ud. puede autorizar la lectura de un archivo sólo a Ud. mismo y prohibirla a todos los demás, y prohibir el uso del archivo a todos los otros usuarios. También puede hacer lo contrario, aunque a primera vista no parezca lógico :-) Como dueño del archivo, también puede cambiar el grupo propietario (solamente si Ud. es miembro del grupo nuevo). Por supuesto, si Ud. mismo se priva del archivo perderá todos sus derechos sobre el mismo...
Tomemos el ejemplo de un archivo y un directorio. Abajo se muestra el resultado de ingresar el comando ls -l desde una línea de comandos:
$ ls -l total 1 -rw-r----- 1 reina users 0 Jul 8 14:11 un_archivo drwxr-xr-- 2 darth 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 sucesivamente el tipo de archivo y los derechos asociados al mismo. El primer carácter es el tipo del archivo: contiene un guión (-) si es un archivo regular, o una d si es un directorio. Hay otros tipos de archivos, que se tratan en el Manual de Referencia. Los nueve caracteres que siguen representan los permisos asociados con ese archivo para cada uno de los tres tipos de usuarios que mencionamos anteriormente. Aquí puede ver la distinción que se hace entre los diferentes usuarios: los primeros tres caracteres representan los derechos asociados con el dueño del archivo, los siguientes tres se aplican a todos los usuarios que pertenecen al grupo pero que no son el dueño, y los últimos tres se aplican a los otros. Un guión (-) significa que el permiso no está activo;
luego viene el número de vínculos del archivo. En el Manual de Referencia veremos que los archivos no sólo se identifican por su nombre sino también por un número (el número de i-nodo), y por lo tanto bajo Unix 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 veremos en el Manual de Referencia;
luego viene el nombre del dueño del archivo y el nombre del grupo dueño del mismo;
y finalmente, se muestra el tamaño del archivo (en bytes) y la fecha de su última modificación.
Ahora observemos en detalle los permisos asociados con cada uno de estos archivos: antes que nada, debemos quitar el carácter que representa el tipo, y para el archivo un_archivo obtenemos los derechos: 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 juan. El usuario juan ,entonces, 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 juan pero que es miembro del grupo users: dicho usuario podrá leer el archivo (r), pero no podrá modificarlo ni ejecutarlo (--);
y los tres restantes (---) se aplican a todo usuario que no es juan ni es miembro del grupo users: dicho usuario simplemente no tendrá derecho alguno sobre el archivo.
Para el directorio un_directorio, los derechos son rwxr-xr--, entonces:
pedro, 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 pedro 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 no tendrá derecho alguno sobre este directorio. Hemos visto que, sobre un directorio, el derecho de lectura por sí solo no permite que un usuario muestre los archivos que se encuentran en el mismo. Esto se debe a que, aunque el derecho de lectura esté activo, el derecho de ejecución no lo está (r--).
Recuerde, existe una excepción a esta regla, y es la siguiente: 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. Esto significa que él también puede garantizarse la propiedad. Él puede leer archivos sobre los que no tiene permisos, recorrer directorios a los que normalmente no tendría acceso, y así sucesivamente. Y si no tiene un derecho, sólo tiene que adjudicárselo él mismo...
Para finalizar, vale la pena mencionar otra diferencia sobre los nombres de los archivos. Los nombres son menos limitados que bajo Windows. En efecto, los nombres:
pueden contener cualquier caracter (excepto el caracter nulo y una /), incluso los no imprimibles. Una consecuencia de esto es que Ud. debe ser muy cuidadoso con la capitalización: los archivos leame y Leame son dos archivos diferentes, porque l y L son dos caracteres completamente diferentes;
como debe haber notado, un archivo no contiene extensión alguna a menos que Ud. lo prefiera así. Bajo GNU/Linux las extensiones no caracterizan el contenido de un archivo como en el caso de otros sistemas operativos.