En esta entrada vamos a aprender a usar la consola de comandos de Raspberry Pi, una herramienta muy útil y que debemos aprender a usar si queremos profundizar en el uso de cualquier PC con Linux.
La consola de comandos, o CLI, puede ser intimidante para los nuevos usuarios. De hecho, es una de las ideas que la mayoría de la gente tiene como referencia y más reticencias generan a la hora de pasar a un sistema como Linux.
El motivo por el que se sigue usando la consola de comandos es sencilla. Es un método muy rápido y potente de ejecutar acciones en un ordenador. Imaginar la velocidad de realizar cualquier acción mediante alguno de los muchos comandos disponibles, cada uno de los cuales puede tener varios parámetros, y que podemos unir en innumerables combinaciones.
Por supuesto no consiste en saberse de memoria cientos de comandos. Para nada. Es más, da igual cuantos años lleves usando Linux, seguramente siempre vas a poder encontrar uno nuevo. Además, hay mucha documentación al respecto, la propia consola de comandos tiene herramientas para darte ayudas, y es incluso normal tener “chuletas” o recopilatorios e comandos útiles.
Por tanto, hay que perderle el miedo a la consola de comandos. Además, de verdad no es tan difícil como parece. Es cuestión de empezar a usarla y poco a poco, casi sin darte cuenta, te sorprenderás de lo cómodo que encuentras con ella.
Así que pare empezar a perderle el miedo, vamos a empezar viendo que es eso de la consola de comandos o CLI.
¿Qué es la consola de comandos?
El interfaz de línea de comandos (CLI, command-line interface), o simplemente consola de comandos, es un sistema para controlar un ordenador o programa a través de instrucciones introducidas como una línea de texto simple.
La consola de comandos es una herramienta habitual en los sistemas operativos basados en Unix, como Linux. En general, aparece como una interface sencilla, en la que el usuario escribe órdenes y recibe información del sistema a través de mensajes de texto.
Con el paso de los años, en una época dominada por los interfaces gráficos (GUI, graphical user interface), la consola de comandos puede parecer arcaica. Sin embargo, sigue siendo una herramienta potente, rápida, y muy habitual en los sistemas Unix.
Los CLI no son exclusivos de Unix. Windows tradicionalmente ha usado cmd.exe como consola de comandos. En las últimas versiones, Microsoft ha potenciado su CLI introduciendo PowerShell, mucho más potente.
La mayoría de CLI no sólo permiten introducir órdenes de forma manual, si no que permiten ejecutar comandos de forma automatizada desde un archivo de texto que se denomina script (equivalente a los batch en Windows).
Adicionalmente, otro de los motivos por los que los CLI siguen estando en pleno uso es el control remoto de un ordenador. Emplear un CLI remoto (como ssh, que veremos en su momento) permite ejecutar acciones con mucha rapidez y rendimiento, dado que sólo enviamos texto y no tenemos que enviar/recibir la señal de video que requiere un GUI.
¿Consola de comandos, terminal o shell?
Es frecuente denominar al CLI como consola de comandos, emulador de terminal, o shell. Aunque son conceptos distintos, en la práctica es frecuente que se usen (incorrectamente) como sinónimos ya que están muy relacionados.
Por clarificar los términos, un shell es cualquier interface que permite controlar un sistema operativo. Por tanto, el CLI es un shell, pero también hay shell gráficos.
El término terminal proviene de los primeros ordenadores, en los que controlabas al ordenador desde un “dispositivo” que básicamente era una pantalla y un teclado. El emulador de terminal es el programa que nos permite ejecutar un CLI en un sistema gráfico y, como su propio nombre indica, “emula” estos primeros terminales.
Por último, el CLI en sí es el propio intérprete de instrucciones, el programa que recibe los comandos y ejecuta las acciones pertinentes en el SO.
Por resumir. En un ordenador con un entorno de ventanas, el sistema de ventanas con la captura de ratón y teclado, es un shell. Cuando abrimos una consola de comandos, eso también es un shell.
El programa que abrimos, es el emulador de terminal. Y lo que hay dentro de este, es el intérprete de comandos o CLI.
Por ilustrarlo, a modo de ejemplo, cuando escribimos un comando y pulsamos Enter, es el CLI el que procesa los datos. Pero, por ejemplo, la función de copiar y pegar un comando, o mostrar la salida del CLI, son propias del emulador de terminal.
¿Qué es eso de Bash?
En Linux existe más de un intérprete de líneas de comandos. De hecho, hay muchas. Algunos ejemplos son Bash, Dash, KornShell (ksh), Tcsh, Fish o Z Shell (zsh), entre otros, cada uno con sus ventajas y desventajas (y fans y detractores).
GNU Bash es el CLI implementado de forma mayoritaria en las distribuciones de Linux. Ejemplos de distribuciones que emplean Bash como CLI por defecto son Debian, openSUSE, Ubuntu, Fedora, Slackware, Mandriva.
Como sabemos, Raspbian está basado en Debian. Por lo que Bash es el CLI incluido por defecto en Raspberry Pi.
Bash, Bourne-Again SHell, fue lanzado en 1989. Es el predecesor de SH, The Bourne Shell, que es uno de los CLI originales de Unix. Los scripts de Bash con compatibles con SH, pero Bash añadió funciones adicionales como autocompletado o histórico de comandos.
Por si alguno le pica la curiosidad, para comprobar que CLI estamos usando actualmente podemos usar este comando
echo $0
Y para listar todos los CLI disponibles en un sistema
cat /etc/shells
¿Qué es eso de LXTerminal?
En un sistema Linux, igual que existe más de un CLI disponible, existe más de un emulador de terminal. Algunos ejemplos de terminales son LXTerminal, Gnome Terminal, xterm, UXTerm, Lonsolem, entre otros muchos.
LXTerminal es el emulador de terminal incluido en Raspbian por defecto, ya que es el terminal por defecto de LXDE Desktop, la interface gráfica de ventanas empleado por defecto en Raspberry Pi.
Si por curiosidad, alguno quiere comprobar que emuladores de terminal tiene disponibles en su sistema puede escribir,
sudo update-alternatives --config x-terminal-emulator
Que como vemos, por defecto, en el caso de Raspbian sólo aparece LXTerminal.
Como lanzar la consola de comandos en Raspberry Pi
Lanzar Bash, la consola de comandos por defecto en Raspberry, es muy sencillo. Tenemos un botón disponible en la barra superior que lanza Bash directamente.
En otras distribuciones, como Ubuntu, el CLI está asociado al atajo de teclados Control+Alt+T. En Raspbian no, por lo que si queremos el atajo tendremos que configurarlo nosotros mismos.
Al inicio de cada línea en la que el usuario puede introducir un comando, veremos una cabecera con información proporcionada al usuario.
pi@raspberrypi:~$
El significado de estos datos es:
- pi: indica el usuario conectado a la terminal
- @raspberrypi: indica el nombre de la máquina a la cual estamos conectados
- ~: indica la ruta en la cual nos encontramos, en este caso ruta de inicio predeterminada
- $: indicador para comenzar a escribir comandos (será # si estamos loggeados como usuario root)
Ejecutar comandos en la consola de comandos
Ejecutar una instrucción es tan sencillo como escribir el comando y pulsar la tecla enter. Si el comando es correcto, el CLI realizará las acciones oportunas y el emulador de terminal mostrará el resultado en la pantalla.
Por ejemplo, para lanzar Chromium, el navegador instalado por defecto en Raspbian, simplemente escribimos el siguiente comando
chromium
Muchos de los comandos aceptan parámetros adicionales que modifican el comportamiento del comando. Así, chromium admite pasar una URL como parámetro, y al abrirse cargará directamente la URL indicada. Por ejemplo, para cargar directamente la página de Google escribimos.
chromium www.google.com
Si algún comando ejecuta un proceso, y queremos cancelarlo, podemos pulsar el atajo de teclado
control + C
Si queremos limpiar la pantalla, quitando todos los comandos escritos con anterioridad, ejecutamos el comando
clear
Autocompletado con tabulación
Uno de los grandes “trucos” a la hora de emplear Bash y que nos ahorrará una enorme cantidad de tiempo es la función de autocompletado con la tecla tabulación.
Si en cualquier momento mientras escribimos un comando, un nombre de archivo, o algunos argumentos, pulsamos la tecla tabulación Bash sugiere la opción que empieza por lo que hemos escrito. En caso de haber más de una ocurrencia, se recorren cíclicamente las opciones disponibles.
Si existen muchas ocurrencias, al pulsar tabulación no aparecerá nada. Al pulsarla una segunda vez nos mostrará un listado con los comandos disponibles. Podemos añadir algunas letras más y pulsar tabulación para terminar el comando.
Así, siguiendo con el ejemplo de chromium, si pulsamos escribimos ‘ch’ y pulsamos dos veces tabulación nos mostrará un listado con múltiples opciones disponibles.
Si completamos hasta ‘chrom’ y pulsamos tabulación, Bash autocompleta a chromium
La función de autocompletar es especialmente útil al tratar con rutas o nombres de ficheros.
Historial de comandos
Otra función que nos ahorrará mucho tiempo y que es una de las mejoras que introdujo Bash respecto a su antecesor SH, es el histórico de comandos.
En cualquier momento podemos recuperar un comando escrito con anterioridad pulsando la tecla “arriba” del teclado de flechas. Pulsarlo sucesivamente nos ira trayendo el comando anterior, hasta el inicio de la sesión del terminal. Si nos hemos pasado, podemos pulsar la tecla “abajo” para pasar al comando posterior.
Un poquito de ayuda
Bash dispone de ciertos comandos que nos permiten obtener ayuda sobre los comandos disponibles.
Algunos de estos comandos son
## Mostrar un resumen de la funcion del comando xxxxx
whatis xxxxx
## Mostrar la localización más probable para el programa xxxxxx
whereis xxxxx
## Listar las páginas de manual que tratan acerca del comando xxxxx
apropos xxxxx
## Mostrar el manual de uso o configuración del programa xxxxx
man xxxxx
## Mostrar las páginas de manual que contengan la palabra xxxxx
man –k xxxxx
Hasta aquí de momento es suficiente para empezar a perderle el miedo al emulador de terminal de Raspberry. En una próxima entrada veremos en profundidad algunos aspectos más de Bash. Mientras tanto, aquí tenéis una “chuleta” con algunos de los comandos más útiles de Bash.