Muchas veces ejecutamos comandos o utilitarios desde la terminal Bash sin saber que en realidad son aliases a comandos elaborados. En este artículo veremos cómo identificar un alias y cómo saber dónde está definido.



Un alias de Bash pueden ser visto como una especie de "machete" (o "chuleta" es España y otros países) donde se definen recetas de comandos elaborados. O simplemente como un nombre diferente con el cual referirse a un comando. En Bash, los aliases permiten que una cadena sea sustituida por otra (sólo cuando es la primera palabra de un comando). La consola mantiene una lista de aliases que pueden ser creados (definidos) y eliminados con los comandos alias y unalias respectivamente.

La primera palabra de cada comando es testeada por Bash para ver si corresponde con un alias. Si es así, es reemplazada por el texto del alias. El texto de reemplazo de un alias puede ser cualquier comando, incluyendo metacaracteres de Bash. La primera palabra del texto de reemplazo de un alias es a su vez testeada por alias, salvo que que sea idéntica al alias siendo expandido. Esto ocurre para que no se produzca un reemplazo infinito.

Cabe destacar que los aliases no permiten argumentos y no son expandidos (no funcionan) cuando la terminal no es interactiva (por ejemplo en un script lanzado desde un cronjob).

Veamos un ejemplo. Los usuarios de Debian/Devuan típicamente ejecutamos el comando ls y vemos la siguiente salida:

Se observa una salida coloreada. Sin embargo, éste no es el comportamiento por defecto del utilitario ls. Veamos cuál es la ruta al binario ls y ejecutémoslo directamente, sin caer en posibles aliases (los nombres de aliases no pueden contener los caracteres /, $, ` ni =):

Cuando se ejecuta el binario /bin/ls directamente, la salida es plana, sin colores.

Esto significa que, al ejecutar el comando ls desde Bash, no se está invocando directamente al binario /bin/ls, sino que se está realizando algún tipo de sustitución. Muy probablemente por un alias.

Para saber si un comando es un alias, simplemente basta con listar todos los aliases y verificarlo:

Ejecutando alias sin parámetros, es posible comprobar que efectivamente ls es un alias al comando ls --color=auto. Es por ello que la salida de ls es idéntica a la de /bin/ls --color=auto:

A su vez existen otros aliases, como ll, que agregan más opciones. Recordar que los aliases se siguen expandiendo si la primera palabra no coincide con el nombre del alias. De esta forma, ll se traduce a /bin/ls --color=auto -l.

Para saber dónde se define este alias de forma persistente (en caso de querer modificarlo) será necesario realizar una búsqueda por contenido dentro de /etc y el directorio $HOME del usuario:

Como era de esperarse, se encuentra la definición del alias tanto en el archivo de inicialización de Bash (.bashrc) del skeleton (plantilla que utiliza useradd para crear usuarios), como en el del usuario ($HOME/.bashrc).

Si se desea editar o eliminar (de forma persistente, no sólo para la sesión actual) es posible editar dicho archivo (/home/emi/.bashrc en este ejemplo).

Referencias

  • man bash
  • man useradd


Tal vez pueda interesarte


Compartí este artículo