Ya hemos comentado cómo ejecutar comandos básicos en Linux, y en Primeros pasos Linux en Pi (II) veíamos como listar ficheros y la forma en que se nos muestran sus atributos. Ahora vamos a ahondar un poco más en estos atributos y entender lo que Linux nos quiere indicar con cada uno de los parámetros que los conforman. Comenzamos viendo las posibilidades del comando ls , para continuar con los citados atributos.
Ya hemos visto que ls nos muestra los ficheros existentes en un directorio dado. Vamos a arrancar nuestra Raspberry y, una vez situados en el directorio por defecto ( /home/pi/ si usamos el usuario pi ), lanzar ls con diferentes opciones.
Usuarios, grupos y permisos
El sistema de directorios de Linux incorpora ciertos nombres únicos y que son imprescindibles para que el sistema sepa localizar cada cosa. Seguro que esto no nos sorprende. Lo que si que conviene saber es que cada usuario tendrá su directorio «base» bajo /home/ . Así, el usuario pi está en /home/pi/. Por cierto, cada usuario tendrá – en general – permisos sobre sus ficheros (digamos que es «propietario» de los mismos), menos en el caso del usuario root (administrador supremo del sistema) que tendrá potestad sobre todos los ficheros.
Además de esto conviene saber que en Linux existe la figura de los grupos, de forma y manera que un número de usuarios pertenecientes a un mismo grupo puedan compartir permisos homólogos, es decir, se facilita la otorgación (o denegación) de accesos a ciertos recursos a varios usuarios a un tiempo.
Vemos que al ejecutar ls se nos muestra una información básica del contenido del directorio (aquí no se muestran los atributos de fichero), mientras que el comando ls -l nos mostrará la versión extendida de la misma.
1 2 |
Nota: no olvidemos que en Linux "todo" se considera fichero, incluso los directorios. |
Por último, el comando ls -la nos muestra todos los ficheros del directorio, incluidos los ficheros ocultos.
1 2 |
Nota: en Linux los ficheros ocultos se nombran anteponiendo un punto (.) a su nombre. |
Para analizar en detalle el tema de los atributos vamos a crearnos 2 ficheros, a saber:
Fichero1 = fichero de texto plano (contendrá código C)
Fichero2 = fichero binario ejecutable (será el compilado resultante del anterior)
En Programación C para RasPi (I) tenemos las bases para crear estos archivos.
Vemos aquí el volcado (mediante comando more Fichero1.c) del contenido del fichero Fichero1.c (programa estándar donde los haya), así como el listado mediante el comando ls -l de nuestro directorio una vez creados ambos ficheros.
Para comentar en detalle los atributos de un fichero tomamos las líneas donde se muestran nuestros dos ficheros, así como la línea del directorio curso creado anteriormente. Los atributos de un determinado fichero se pueden dividir en «zonas», siendo estas:
Tipo/Usuario/Grupo/Otros
conteniendo 1 caracter la primera, y grupos de 3 caracteres las demás (rwx). En nuestro caso sería:
El primer carácter nos indicara con una letra «d» si el fichero listado corresponde a un directorio, mientras que los otros 3 grupos muestran los permisos otorgados al usuario, grupo, y otros respectivamente; y lo hacen en grupos de 3 letras (rwx). Cada posición puede establecer un permiso como activo o denegar dicho permiso, que es cuando se muestra el símbolo «–«.
Los permisos se tipifican en:
r – permiso de lectura (read)
w – permiso de escritura (write)
x – permiso de ejecución (execute)
Además de estos permisos, la línea listada por cada fichero muestra más información:
Codificación y modificación de permisos
Nada mejor que un ejemplo para ver la forma en que se opera en Linux con los permisos de fichero. Para ello vamos a tomar Fichero1.c e intentaremos que ya no pueda ser modificado, o en otras palabras, denegarle los permisos de escritura.
Lo primero que hemos de saber es que los 3 conjuntos wrx se codifican en formato de pesos binarios, o sea así:
r – valor 4
w – valor 2
x – valor 1
dicho de otro modo -> rwx = 421 = 7 (si los 3 atributos están activos).
Por lo que nuestro Fichero1.c que tiene como atributos -rw-r–r– corresponde en numérico a:
rw- r- – r- – => 420 400 400 => 644 (el usuario puede escribir en él)
así que cuando nos digan que un fichero Linux tiene unos permisos de 644 (Fichero1.c en este caso) ya sabemos lo que significa. Ahora vamos a intentar cambiar su nivel de permisos y prohibir su edición, por lo que le asignaremos un nuevo conjunto al usuario propietario (pi), pasando sus permisos a valer:
r– – r- – r- – => 400 400 400 => 444 (nadie podrá ya escribir en él)
Para efectuar el cambio ejecutaremos chmod 444 Fichero1.c y luego verificamos el cambio efectuado con ls -l
Si ahora intentamos editarlo (nano Fichero1.c) vemos un bonito aviso en la parte inferior del editor, por lo que la única forma de guardar el contenido de nuestra edición será hacerlo con otro nombre (usamos Fichero11.c en su lugar).
Comprobamos de nuevo lo que hemos hecho con ls -l , y vemos la diferencia entre el fichero «bloqueado» Fichero1.c y el fichero recién creado Fichero11.c que si puede ser escrito.
Continuará ….