" />
ZOOM
GALERÍA
0 COMENTARIOS

Curso de Bash (2) – Controlando los archivos

En la primera entrega del curso vimos cómo acceder al terminal y aprendimos el uso muy básico de algunos comandos. En esta segunda entrega vamos a centrarnos en el manejo de archivos, algo fundamental para poder trabajar con el terminal y hacer un poco de magia con nuestro sistema.

Linux, como Unix, organiza prácticamente todo como un archivo. Desde un documento de texto, un directorio o una aplicación hasta los procesos en ejecución o los dispositivos del sistema tienen su reflejo en el sistema de archivos. Por eso, las herramientas que permiten utilizarlos nos permiten mucho más que copiar imágenes o crear carpetas.

Listados de directorios

En la primera entrega vimos que la orden ls permite ver el contenido del directorio actual. ¿Qué pasa si queremos ver qué contiene otro directorio sin movernos a este? Pues que podemos especificar la ruta que queremos ver a continuación del comando. En este ejemplo, vamos a ver qué guarda la carpeta /var/log, que contiene los logs del sistema:

Captura de pantalla 2016-02-08 a las 20.02.27
Sin especificar más parámetros, vemos que ha organizado los archivos en columnas y los ha coloreado para que sepamos si son directorios (en azul) o archivos comprimidos (en rojo). En ocasiones, luego veremos por qué, es interesante listar un archivo por fila, sin columnas. Para conseguirlo usamos el parámetro -1

Captura de pantalla 2016-02-08 a las 20.04.21

Otros parámetros importantes son -a y -l, el primero muestra también archivos ocultos por el sistema (cuyo nombre empieza por un punto) y el segundo muestra más información útil como el tamaño del archivo. Si vas a usar varios parámetros no es necesario que los escribas todos precedidos por un guión. Basta con que escribas un guión y seguidamente los parámetros que quieras aplicar. En este caso, para obtener un listado largo (-l) con archivos ocultos si los hubiera (-a) lo haremos así:

Captura de pantalla 2016-02-08 a las 20.08.05

Como has visto, en esta carpeta hay un archivo oculto y dos visibles. Vemos la fecha de creación, el usuario y grupo al que pertenece, su tamaño y una lista incomprensible de letras tipo -rw-rw-r–. Son los permisos del archivo, que explicamos a continuación.

Permisos de archivo en Unix y Linux

Aunque los permisos de archivo pueden variar de un sistema a otro, cuanto más “cerca” están de ser un sistema Unix o Linux convencional, más se parecen a lo que vamos a explicar. En Mac OS X, el sistema es muy parecido, aunque tienen alguna particularidad, y lo mismo sucede con sistemas como Android o iOS. El más rarito en ese aspecto es Windows, cuyo sistema de permisos es muy diferente al del resto.

No entraremos en profundidad en los permisos de archivo, pero sí te vamos a contar lo fundamental. En la mayoría de sistemas operativos hay diferentes usuarios. Cada uno de esos usuarios puede pertenecer a uno o a varios grupos. Un archivo (o un directorio) pertenecerá a un usuario que, habitualmente, es el que lo ha creado.

Cada archivo recibe un conjunto de permisos para su propietario, para el grupo al que está asignado (por defecto, el primer grupo al que pertenece el usuario) y para el resto de usuarios. Además, hay tres permisos básicos: lectura (r, de Read en inglés), escritura (w, de Write) y ejecución (x de eXecution, porque a alguien le debió parecer que utilizar vocales es cutre).

Ahora, cuando ves -rw-rw-r– te puedes imaginar lo que quiere decir. El primer guión significa que no es un directorio (que aparecen indicados ahí con la letra d) y los siguientes bloques quieren decir que el dueño del archivo puede leer y escribir sobre él (rw-), al igual que el grupo al que pertenece el archivo (rw-). El resto del mundo, sin embargo, sólo puede leerlo (r–), pero nada de hacer cambios o borrarlo.

Estos permisos, naturalmente, pueden modificarse según sea necesario. Si el archivo texto.txt contiene información altamente secreta, como un número de cuenta corriente o la receta de la auténtica carbonara (¡que no lleva nata!), es posible que no queramos que lo lea nadie más que nosotros. Para eso, utilizaremos la orden chmod:

Captura de pantalla 2016-02-08 a las 20.22.14

Al volver a hacer un listado, vemos que el permiso de lectura para “otros” usuarios ha desaparecido. Dos cosas interesantes: a chmod le podemos decir que asigne (+) o retire (-) permisos al propio usuario (u), al grupo (g) o a otros (o), así que en este caso o-r significa a otros usuarios (o) quítales (-) el permiso de lectura (r).

Lo otro interesante es que mantenemos al grupo usuario el permiso de lectura y escritura. Tranquilidad, nadie nos va a robar la receta de la carbonara. Por defecto, cada usuario se crea con un grupo sólo para él mismo. Este permiso tiene más utilidad cuando el archivo pertenece a un grupo formado por más personas.

Si lo que queremos es asignar más de un permiso a la vez, puede resultar tedioso especificarlos uno por uno. Por eso se puede utilizar un atajo que consiste en emplear un número que representa a los permisos a aplicar. Para cada usuario, grupo o resto del mundo, se suman los permisos que queremos que tengan. Los valores son 4 para el permiso de lectura, 2 para el permiso de escritura y 1 para el de ejecución (que corresponden con los tres primeros dígitos binarios). Por ejemplo, para asignar permiso de lectura (4) y escritura (2) asignaremos un 6.

Haciendo este cálculo para cada grupo, si queremos que un archivo sea de lectura y escritura para el usuario (6), sólo de lectura para el grupo (4) y no sea legible para el resto del mundo (0), lo haremos con un solo chmod de esta manera:

Captura de pantalla 2016-02-08 a las 20.30.19

Hemos asignado nueve permisos de un golpe. Una vez que te acostumbras a manejar el alias numérico, es raro que utilices la sintaxis extendida. Simplemente, podrás asignar todos los permisos en una sola línea… y para eso usamos el terminal, para trabajar menos.

Ver el contenido de los archivos

Está muy bien tener archivos, pero es mucho mejor poder ver qué contienen. Para ello, dos comandos son fundamentales: cat y less. El primero muestra el contenido de un archivo:

Captura de pantalla 2016-02-08 a las 20.41.02

Ahora ya tienes en tu poder una receta de carbonara digna de su nombre. Sin embargo, si lo que quieres leer es Guerra y Paz y el archivo es muy largo, es difícil de leer de esta manera. Para eso sirve less, que permite avanzar y retroceder con los cursores, la barra espaciadora o las teclas de avance y retroceso de página:

Captura de pantalla 2016-02-08 a las 20.41.22

No hace falta que desesperes si no encuentras la salida. Podrás seguir usando el terminal para algo que no sea hacer pasta. Pulsa la tecla Q para salir y volver a la línea de comandos.

Ya sabemos hacer una carbonara, así que vamos a cocinar algo un poco más complicado. ¿Recuerdas que antes listamos una carpeta llena de algo llamado “logs”? Un log es un archivo de registro del sistema, es decir, donde se guarda todo lo que pasa: errores, eventos y otra información.

Pues venga, vamos a curiosear con la orden que ya conocemos. Escribiendo cat /var/log/messages o cat /var/log/syslog veremos todos los mensajes del sistema:

Captura de pantalla 2016-02-08 a las 21.04.53

Vale, no no hemos enterado de nada. Podemos utilizar less, que ya sabemos que sirve para esto. Pero, ¿qué pasa si el archivo se actualiza? Pues que muy probablemente no nos enteraremos. Con los archivos de registro del sistema, interesa ver lo que va apareciendo. La orden tail nos muestra sólo el final del archivo que indiquemos pero, si usamos el parámetro -f, también se quedará esperando a que llegue más información al final del archivo para mostrarla:

Captura de pantalla 2016-02-08 a las 21.07.18

Los mensajes subliminales los he generado desde otro terminal mediante el comando logger. Pero aparecen en el log del sistema operativo y hay que hacer caso siempre al sistema operativo. Por lo menos cuando es tan considerado que mira por tu bien y te recomienda leer esta web.

Por cierto, para salir de tail no sirve pulsar la tecla Q, mejor usa la combinación CTRL+C.

Para terminar, un poco más de movimiento

Ya hemos aprendido a hacer pasta a la carbonara y hemos recibido los sabios consejos de la instalación de Ubuntu que usamos como ejemplo. A continuación, vamos a profundizar un poco más en los comandos que vimos en la primera entrega.

El parámetro -r sirve, en algunos comandos de archivos, para que se copien, borren o muevan los directorios con sus contenidos. Por ejemplo, si intento borrar el directorio documentos con el comando rmdir, me va a decir que ni hablar de borrar un directorio con tantas cosas buenas dentro:

Captura de pantalla 2016-02-08 a las 21.17.16

Pero si le digo que borre el directorio con la orden rm y utilizo el parámetro -r, la destrucción está garantizada:

Captura de pantalla 2016-02-08 a las 21.18.57

Como verás, el terminal no ha dado ni la hora. Pero está borrado todo. Esto te puede servir si tienes que eliminar un directorio que contiene múltiples archivos y otros directorios. Pero, como has podido ver, hay que utilizarlo con cuidado porque, igual que la sosa caústica, limpia a fondo, pero te puede quemar.

En la próxima entrega seguiremos aprendiendo a organizarnos con nuestros archivos y empezaremos a ver también como gestionar procesos. ¡No te lo pierdas!

No comments yet.

Deja un comentario