A pesar de lo arduo que para los más inexpertos suele resultar el terminal de Linux, éste incluye innumerables facilidades que hacen muy sencillo su manejo. Al fin y al cabo, no nos engañemos, por muchos entornos de escritorio virgueros de que dispongamos, las consolas de texto son necesarias y, al final, acaban siendo incluso más cómodas para comunicarnos con Linux que los pesados escritorios.

1- Personalizar el teclado

El hecho de que el sistema responda de una u otra manera ante las pulsaciones de cada tecla lógicamente no es algo casual. Existe lo que se llama un mapa del teclado en el que cada tecla lleva asociado un código, hexadecimal normalmente, y una función. Las funciones van, como ya sabemos, desde mostrar simplemente el carácter que representan (alfanumérico), hasta acometer acciones según combinaciones especiales de Shift, Ctrl, teclas de función, etc. Pues bien, sin machacar definiciones que pudieran entorpecer el funcionamiento normal del sistema, podemos hacer nuestras propias redefiniciones del mapa de teclado para facilitarnos un poco más la vida. Esto lo hacemos a través del fichero .inputrc. El sistema utiliza globalmente /etc/inputrc y nosotros podemos hacer lo mismo localmente con $HOME/.inputrc. Para ello, lo primero será definir la variable de entorno INPUTRC añadiendo las siguientes líneas en nuestro .bash_profile.

INPUTRC=$HOME/.inputrc

export INPUTRC

A continuación ya podemos crear en nuestro directorio personal nuestro .inputrc, ya que lo más seguro es que aún no exista y, en él, podremos añadir por ejemplo líneas como “\e[24~”:”/usr/bin/emacs&\C-m”

Con esta hemos declarado que, en nuestras siguientes sesiones de shell, pulsando la tecla F12 invocaremos un emacs en segundo plano. La cadena C-m del final es el retorno de carro. Como vemos fácilmente, el código consta de una primera cadena de texto encerrada entre comillas, el carácter ‘:’ y a continuación otra cadena encerrada nuevamente entre comillas. Esto se traduce en esencia en código_de_tecla : acción_a_acometer. Como ya hemos dicho, debemos tener especial cuidado en no redefinir teclas útiles del sistema, ya que podemos acabar volviéndonos locos con un mal mapeo de teclado.

Para ver los códigos de tecla podemos recurrir a varias posibilidades. Podemos ejecutar en un entorno gráfico xev , que quedará en espera de eventos, entonces vamos pulsando teclas para ver su código. Podemos mirar en /usr/include/X11/keysymdef.h y por último podemos ejecutar xmodmap -pk.

Para ver más ejemplos, podemos editar el fichero global /etc/inpurc, en el que veremos que también hay acciones concretas predefinidas.

“\e[1~”: beginning-of-line

“\e[4~”: end-of-line

“\e[5~”: beginning-of-history

“\e[6~”: end-of-history

“\e[3~”: delete-char

Estas acciones, como vemos, no se indican encerradas entre comillas (no son ejecuciones reales de comandos en un terminal). En este código comienzan definiéndose los controles habituales de Linux/UNIX para moverse por un texto.

2- El molesto pitido

Lo comentado hasta ahora se apoya en las librerías readline que sirven, entre otras cosas, como complemento a la shell. Utilizando el mismo fichero local ya comentado, el .inputrc, podemos definir algunas cosas más. Una de las utilidades de apoyo que proporcionan las readline es la de completar comandos con el tabulador, desde un terminal, una vez hemos escrito las primeras letras. Esta facilidad tiene la molesta costumbre de utilizar el timbre (bell) del sistema para indicarnos que va a llevar a cabo la posible completitud. En casa puede que nos dé igual pero, en la oficina, resulta muchas veces molesta la repetición de tal pitido. Para evitar esto simplemente añadiremos la siguiente línea set bell-style none a nuestro .inputrc local.

Así de sencillo. Cualquiera de los cambios que hagamos en .inputrc, no tendrá efecto hasta que arranquemos una nueva sesión de la shell, bien arrancando nuevos terminales, bien pasándonos a una de las consolas virtuales o directamente ejecutando bash desde el xterminal en el que nos encontremos.

3- La Shell programable

Este es en realidad el punto fuerte de las shells de Linux que engloba la mayoría de sus facilidades. Además de los scripts que pueden aportarnos rapidez y comodidad de ejecución, tenemos también facilidades de programación en línea de comandos. Una de ellas es la utilización de pseudo-variables o, podríamos denominarlas, variables temporales. Básicamente se trata de utilizar variables para almacenar resultados de comandos y posteriormente trabajar con ellos. Algo parecido al uso del pipe (el carácter |). Las variables en la shell de Linux se reconocen por ir precedidas por el símbolo del dólar. Imaginemos que tenemos nuestro directorio un tanto saturado ya, podríamos entonces querer encontrar aquellos ficheros que ocupen más de un determinado tamaño:

find $HOME/ -size +1000k

Pero la salida de este comando no nos muestra toda la información que podríamos requerir en tal situación, sino que se limita a listar los nombres de los archivos mayores de 1.000 kbytes. El comando ls aporta información mucho más visible, así que podemos combinar el uso de ambos comandos. Utilizaremos las opciones –ltdh para que ls muestre toda la información de cada fichero, los ordene descendentemente por fecha de modificación, que no profundice en directorios y que nos muestre los tamaños en formato humanamente legible. La línea de ejecución resultante sería:

ls –ltdh $(find $HOME/ -size +1000k)

De esta forma, ls trabaja sobre el resultado de la ejecución de find. Las posibles combinaciones y encadenamientos de comandos son tantos casi como podamos imaginar. De cada uno depende ir jugando con las distintas posibilidades y así sacar todo el jugo posible a la shell.