Uso del terminal (o la consola) en la Raspberry Pi

El terminal, o “la consola” es una aplicación de uso muy frecuente cuando se trata de sistemas Linux como es la Raspberry Pi, y en otros sistemas tipo Unix como puede ser, por ejemplo, Mac OS X. Sobre todo, cuando pensamos en un usuario que hace tareas técnicas como es, por ejemplo, programar. El terminal es un intérprete de órdenes basado en texto que permite manejar la totalidad de un sistema operativo. De hecho es, en sí, un intérprete parecido al de Python que vimos en la entrada correspondiente, y por eso las órdenes que ejecutamos pueden llegar a formar parte de un programa con el que automatizar un montón de procesos, en su propio lenguaje particular.

Lo que vamos a tratar en esta entrada es una serie de órdenes útiles para los primeros días, y cómo funcionan. Os adelanto que saber inglés es, a partir de este momento, conveniente. No es imprescindible pero hay que entender que facilita las cosas; en tecnología el inglés es el lenguaje universal nos guste o no. Sin embargo haré todo lo posible para que no sea una barrera.

Arranca el terminal haciendo click en el botón que hay en la barra de menú, en la parte superior de la pantalla. Este es el resultado que verás:

Captura de pantalla 2015-06-12 18.32.23

Me centraré en la parte negra de la ventana… realmente los menús no son importantes. Fijaos en la información que tenemos: pi@raspberrypi ~ $.

  • pi es el usuario que está conectado, es el usuario de trabajo. Lo recordáis de la entrada de puesta en marcha.
  • significa “en”.
  • raspberrypi es el nombre de la Raspberry Pi, útil para identificarlo cuando se está en red. Es el nombre del ordenador.
  • ~ es un símbolo importantísimo que representa la carpeta de inicio del usuario actual, que en este caso es pi, y es /home/pi.
    • Es decir, vale /home/pi.
    • / es el símbolo que, en la consola, indica que la carpeta pi está dentro de la carpeta home, y se llama separador de carpetaseparador de directorio.
    • Cuando encontramos / solamente, estaríamos ante la carpeta que contiene a todas las demás, y se llama carpeta raíz o directorio raíz.
  • es el indicador de que el intérprete de comandos del terminal espera que escribas algo. En inglés se llama prompt, que significa invitación.
  • El cuadrado gris que sale después es simplemente un cursor que parpadea, que indica que a partir de ahí será donde escribiremos.

Así pues, sin hacer nada, el terminal nos dice que estamos trabajando como el usuario pi, en la máquina raspberry, en el directorio de inicio de pi, y que está en disposición de recibir órdenes. ¿Por qué tanta información? Porque podríamos estar trabajando en la consola como otro usuario, como root (ya hablaremos de ese usuario), el directorio donde estamos siempre viene bien saberlo, pero la máquina también, porque podríamos estar conectados a otro ordenador, trabajando en remoto.

Ya que estamos entendiendo esta información, vamos a ver la estructura general de las órdenes en Linux usando una orden concreta que sirve para averiguar el usuario que está conectado. Escribe lo siguiente:

id -un

Esto hará que la consola nos responda con “pi”. ¿Qué significa lo que hemos escrito?, ¿qué estructura, o qué forma de escribir órdenes es ésa?

En general, una orden o un comando en el terminal se compone de las siguientes partes:

  • Nombre del comando. En este caso, id
  • Opciones o modificadores. En general, detrás de un guión. En este caso, –un. Son opcionales: podríamos haber escrito id solamente… pero el resultado habría sido muy diferente, como veremos.
  • Argumentos: los datos de trabajo de la orden. En este caso son opcionales; después veremos algún ejemplo.

El efecto de las opciones es, en ocasiones, muy profundo. Prueba a escribir ahora id, sin opciones. Como puedes ver, el resultado es totalmente distinto:

Así, en frío, es un galimatías en el que reconocemos al pobrecillo pi por ahí enmedio, repetido varias veces, pero también vemos cosas como sudo, audio, dialout, users… son grupos a los que el usuario pi pertenece. Los números son sinónimos, es decir, son códigos que el sistema operativo usa internamente porque le resulta más conveniente.

Escribid ahora lo siguiente:

man id

Veremos el (maravilloso) Manual mostrando la página de manual de id:

El manual es un programa de terminal que se invoca mediante su nombre, man y cuyo argumento es el nombre de la orden de la que queremos saber más. Para desplazarnos por el manual usaremos de momento las flechas ↑ y ↓. Si quisiéramos salir, usaríamos la tecla q.

No todas las páginas están en inglés, y además podemos instalar la mayor cantidad disponible de traducciones al español ejecutando la orden siguiente:

sudo apt-get install manpages-es

Para este caso concreto el proceso es automático; al necesitar descargar cosas puede que tarde un poco.

En su momento haré un monográfico del sistema de instalación de programas de Linux.

Siempre, en todas las versiones y distribuciones de Linux y de cualquiera de sus primos de la familia Unix, el manual está disponible para todas las órdenes disponibles por defecto, y tiene la siguiente estructura:

  • NAME / NOMBRE: nos explica el nombre de la orden y lo que hace, en una línea. En este caso, id – imprime los IDs reales y efectivos de usuario y grupo.
  • SYNOPSIS / SINOPSIS: de forma muy breve, cómo se usa. Y además en un formato que tiene un significado muy cuidado:
    • El nombre de la órden: id.
    • Dónde van las opciones, si las acepta. Si acepta varias o una sola, y si son opcionales u obligatorias. Veamos:
      • Si existe OPTION es que tiene opciones. A veces, en vez de OPTION, podemos encontrarlas explícitas (–u–n,…)
      • Si va entre corchetes, [ y ], es que son opcionales.
      • Si tras OPTION u [OPTION] hay puntos suspensivos, es que admite más de uno.
      • Si vemos opciones separadas por barras verticales, | es que, en ese ejemplo debemos escoger o una o la otra. Por ejemplo: [–a | –b].
    • Lo mismo para los argumentos:
      • A diferencia de las órdenes, los argumentos siempre se suelen nombrar de forma explicita (por ejemplo USERNAME, que significa NOMBRE DE USUARIO).
      • En este caso, [USERNAME] indica que el argumento es el nombre del usuario que queremos investigar, que es opcional pero que acepta sólo uno.
  • DESCRIPTION / DESCRIPCIÓN: explica las opciones sobre la orden. Una cosa que os puede llamar la atención es que muchas veces las opciones tienen variantes cortas (–u) y largas con dos guiones (– –user). Si la examináis podréis comprobar por qué he escogido las que he escogido:
    • –uimprime sólo el identificador de usuario efectivo. Esto deja el resto de información de grupos y seudónimos fuera.
    • –n: imprime un nombre en lugar de un número. En vez de 1000, escribirá pi.
  • Otras opciones menos útiles pero con información de interés: el autor, cómo informar acerca de defectos en su comportamiento, información sobre la licencia y otros documentos de interés.

Importante: así como las opciones aceptan cualquier orden a no ser que nos digan lo contrario, los argumentos no. Podemos juntar en una sóla opción las versiones cortas, pero las largas no. Para comprenderlo totalmente practica un poco, escribiendo lo siguiente:

id --name -u
id --user -n
id -nu
id -un root
id -u -n
id --nameuser
id -un root pi

Esto es lo que verás:

Sal del Manual usando la tecla q.

Órdenes para listar los contenidos de una carpeta

La orden ls, que viene de LiStar contenido del directorio, sirve para examinar los contenidos de las carpetas donde estemos (sin argumentos) o de la que queramos (con argumentos). Vamos a verlo con unas pruebas.

Estas cuatro órdenes ofrecen el mismo resultado:

ls
ls .
ls ~
ls /home/pi

La explicación es la siguiente: ls, sin argumentos, ofrece los contenidos de la carpeta donde estamos. Con argumentos, ofrece los contenidos de la carpeta que le digamos. . es un símbolo especial que significa “la carpeta donde estamos”. Estamos en la carpeta ~, que es el directorio de inicio del usuario pi, que es /home/pi.

Os recuerdo que / es el símbolo que, en la consola, indica que la carpeta pi está dentro de la carpeta home, y se llama separador de carpeta o separador de directorio. Cuando encontramos / solamente, estaríamos ante la carpeta que contiene a todas las demás, y se llama carpeta raíz o directorio raíz.

Vamos a hacer otras pruebas, ya con opciones:

ls -a
ls -l

-a muestra todos (viene de all) los ficheros, estén ocultos o no. En los sistemas de tipo Unix, como todos los Linux, ocultar un fichero es simplemente hacer que su nombre comience por .. En su resultado podemos ver, además, que los ficheros se representan en gris y las carpetas en azul, y que se representan dos carpetas especiales: ., la carpeta presente, y .., que como veremos más adelante es la carpeta superior a la presente (/home).

-l cambia el formato de salida de la orden ls, dando información adicional para cada carpeta y fichero, como por ejemplo el tamaño, la fecha y los permisos, temas que trataremos más adelante.

Combina los dos ahora escribiendo ls -la para obtener la totalidad de información de la carpeta donde estás.

-a y -l son dos de los argumentos más útiles de la orden ls.

Consulta más opciones en la página de manual de ls, escribiendo man ls. Prueba también a obtener las listas de contenidos de otros directorios tratando de entender cada opción y cada argumento, escribiendo por ejemplo:

ls ..
ls /home
ls python_games
ls ~/..

Rutas relativas frente a rutas absolutas

Os recuerdo de nuevo (es que es muy importante) que / es el símbolo que, en la consola, indica que la carpeta pi está dentro de la carpeta home, y se llama separador de carpeta o separador de directorio. Cuando encontramos / solamente, estaríamos ante la carpeta que contiene a todas las demás, y se llama carpeta raíz o directorio raíz.

Ruta relativa

Una ruta relativa es la sucesión de carpetas que nos llevan a un punto determinado de la tarjeta SD, pero desde donde estemos. Es decir, en este ejemplo, desde ~, o /home/pi.

Por ejemplo, si estamos en el directorio de inicio del usuario pi, ../../usr es una carpeta que contiene muchos de los programas instalados, y ../../usr es su ruta relativa al directorio de inicio de pi. Indicamos dos veces la carpeta superior (../..) y allí la encontramos.

Sabremos que una ruta es relativa porque no comienza con la carpeta raíz, que es /Documents/ será una ruta relativa a ~.

Ruta absoluta

Una ruta absoluta es la que indica como punto de partida el directorio raíz, /, es decir, toda aquella ruta que comience por /. En el ejemplo anterior, la ruta absoluta correspondiente a ../../usr es /usr.

Órdenes para movernos entre carpetas

pwd, que significa ruta al directorio de trabajo (en inglés path to working directory), muestra la ruta del directorio donde nos encontramos:

pwd

Es útil para comprobar, después de una sesión de trabajo donde nos hayamos podido mover mucho, dónde nos hemos quedado.

cd, de cambiar directorio, es la orden con la que conseguiremos movernos entre las carpetas de la Raspberry Pi usando el terminal. Podemos indicarle rutas absolutas y rutas relativas, y por supuesto podemos indicarle sucesivamente el directorio superior (..) y el alias del directorio de inicio de pi~.Con los conceptos que ya sabemos podemos directamente pasar a hacer pruebas. Prueba lo siguiente, intercalando ls o pwd para saber dónde te encuentras:

cd /usr
pwd
cd ~/python_games
pwd
cd /
ls
cd dev
ls
cd ~
pwd
cd /dev
pwd

… y todo aquello que se te pueda ocurrir. Consulta las páginas de manual de cd y de pwd para saber más.

Crear y borrar archivos y directorios usando órdenes de terminal. El editor “nano”

Vuelve a tu directorio de inicio (el de pi) y ejecuta la orden mkdir pruebas. Luego comprueba el contenido de tu directorio de inicio:

cd ~
mkdir pruebas
ls -l

Verás que has creado con la orden mkdir pruebas un directorio llamado pruebas:

Entra en él y comprueba que, como era esperable, está vacío. Escribe touch hola.txt:

cd pruebas
ls -l
touch hola.txt
ls -l

Con la orden touch lo que hacemos es crear un fichero vacío. Es como esas órdenes tipo “Nuevo…” en el explorador de ficheros, o en otros sistemas operativos aunque con alguna diferencia ya que en Linux no es necesario especificar el tipo de documento.

Podemos editarlo y escribir algo dentro. Escribe nano hola.txt. Verás lo siguiente:

nano es uno de los muchos editores de texto de terminal de Linux, y en mi caso es mi favorito porque es muy fácil de usar con un teclado normal. Funcionan las teclas de los cursores (←, ↑, →, ↓) y todas las demás teclas de desplazamiento de una forma razonablemente parecida a un editor más visual como el que podrás haber usado en alguna otra ocasión.

Escribe una frase, o un párrafo cualquiera, como por ejemplo Hola PItando, este es mi primer documento de texto y graba el fichero pulsando la tecla de Control y la letra o al mismo tiempo. Pedirá una confirmación.

Pulsa la tecla intro (↵) para confirmar. Ahora pulsa Control y la letra x al mismo tiempo para salir al terminal de nuevo. Si ahora consultas el contenido del directorio, verás que cambia el tamaño del fichero. Prueba ahora la orden cat hola.txt:

cat es una utilidad que permite sacar por el terminal el contenido de un fichero (o varios) de texto.

Vamos a borrarlo todo. Para borrar un fichero usa la orden rm con el fichero que quieres borrar como argumento:

rm hola.txt

Si ahora compruebas el contenido del directorio con ls, verás que está vacío. Ojo, y mucho cuidado, porque la papelera también. Lo que borremos en el terminal no pasa por la papelera y por lo tanto es irrecuperable.

Sube al directorio superior con cd .. y borra el directorio prueba ahora. Verás que no puedes con rm:

rm, tal cual, no sirve para borrar directorios. Para borrar el directorio deberías usar rmdir, pero esta utilidad tiene otro problema y es que no te permitirá borrar directorios que contengan cosas.

Para abreviar, pero siempre pensándolo dos veces porque es irreversible, puedes usar una opción de rm, -r:

Esto último borraría tanto el directorio que indicamos como todo su contenido, ficheros, directorios,…

Conclusiones

En esta entrada hemos visto tanto unas órdenes sencillas como la estructura general de las órdenes de la consola, el manual para documentarnos acerca de su uso, y hemos experimentado bastante con ello.

Este artículo, aunque es muy largo, es una pieza fundamental para muchos que están por venir. Es muy frecuente, cuando estemos haciendo experimentos, tener que editar y mover ficheros entre directorios, crear y borrar estructuras de carpetas y ficheros, y muchas otras cosas que serían muy lentas de hacer con el ratón y el entorno de ventanas.

En otros artículos de la serie de uso de Linux que se centren en el terminal veremos otras utilidades y conceptos como los permisos, la creación de programas o guiones de consola (llamados scripts en inglés), cómo comprimir directorios para hacer copias de seguridad… y un montón de cosas muy útiles.

4 comentarios en “Uso del terminal (o la consola) en la Raspberry Pi

  1. Buen dia, estoy desarrollando un pequeño programa para tomar fotos, sabira como agregarle la hora y la fecha al archivo (foto) resultante

    Ejemplo
    El archivo obtenido es Foto01.png

    y quisiera esto
    Foto0130/01/17 o algo parecido, para no hacer sobre escritura de los archivos ya existentes

    saludos

    1. Si lo estás haciendo en bash, prueba a concatenar la salida del comando date con una máscara, por ejemplo:


      Gabrimac:~ gvisoc$ date +"%y%h%d-%H%M%S"
      17feb08-225823

      Si estás usando Python puedes conseguir resultados parecidos con:

      >>> from time import strftime
      >>> strftime("%y%h%d-%H%M%S")
      '17Feb08-225940'
      >>>

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *