Icono de Terminal

Trucos para ejecutar comandos en Linux

 
 

En este artículo veremos una serie de trucos para ejecutar comandos en Linux que nos facilitarán la vida a la hora de ejecutarlos desde la interfaz de línea de comandos (CLI).

Índice General

  1. Introducción
  2. Comando history
  3. Repetir el comando anterior
  4. Ejecutar el penúltimo comando
  5. Ejecutar el antepenúltimo comando
  6. Ejecutar comandos haciendo uso del histórico
  7. Repetir varios comandos del histórico de forma consecutiva
  8. Repetir un comando que empieza por uno o varios caracteres
  9. Repetir un comando que contiene uno o varios caracteres
  10. Ejecutar un comando con los argumentos del anterior
  11. Alias

 

  1. Introducción (Volver al índice General)
    En este artículo veremos una serie de trucos que nos ayudarán a ejecutar comandos en Linux, desde la interfaz de línea de comandos (CLI). Nos ayudarán, en la mayoría de los casos, cuando tengamos que volver a ejecutar comandos con una sintaxis larga y difícil de recordar o simplemente, ahorrar tiempo evitando tener que escribir toda la orden de nuevo.

    Estos trucos nos ayudarán a repetir comandos ejecutados con anterioridad y a ejecutar comandos en Linux, a los que hay que pasar como argumentos los utilizados en otro comando.

    Este artículo se centra principalmente en el uso del comando !! y sus variantes, pero además, veremos dos utilidades que nos harán la vida más fácil; el comando history que complementará el uso del comando !! y nos facilitará las explicaciones de este artículo y el uso de alias en los archivos .bashrc o .bash_aliases.

  2.  

  3. Comando history (Volver al índice General)
    Este comando nos lista el histórico de comandos ejecutados desde la interfaz de línea de comandos (CLI), indicando su número de orden en el historial. Al ejecutar el comando history en mi sistema, en el momento de escribir este artículo, el resultado fue el siguiente:

    $ history
        1  password
        2  less .bashrc
        3  ls /home/
        4  sudo apt update
        5  sudo apt upgrade
        6  sudo apt install build-essentials
        7  sudo apt install linux-headers-$(uname -r)
        8  sudo apt install net-tools
        9  sudo apt install synaptic
       10  sudo mount /dev/sr0 /media/cdrom0
       11  cd /media/cdrom0
       12  ls -l
       13  cp VMwareTools-10.3.21-14772444.tar.gz /tmp/
       14  cd /tmp/
       15  tar xvfz VMwareTools-10.3.21-14772444.tar.gz 
       16  cd vmware-tools-distrib/
       17  sudo ./vmware-install.pl 
       18  nano /etc/apt/sources.list
       19  sudo apt-get update -oAcquire::AllowInsecureRepositories=true
       20  sudo apt-get install deb-multimedia-keyring
       21  sudo apt update
       ...
       ...
       39  history

    Si por algún motivo nos interesa limpiar el historial, ejecutaríamos la siguiente orden:

    $ history -c

    Si ejecutásemos de nuevo el comando history, obtendríamos el siguiente resultado:

    $ history
        1  history

    Y para evitar que un comando quede registrado en el historial de la shell, tan solo tendríamos que dejar un espacio en blanco delante del comando que vamos a ejecutar. Sería algo así:

    $  comando

    Nota: este último truco solo funciona como usuario normal. Si ejecutamos el comando anteponiendo un espacio en blanco como root, el comando, incluido el espacio en blanco, quedará registrado en el histórico.


  4.  
     
     

  5. Repetir el comando anterior (Volver al índice General)
    Para repetir el comando ejecutado anteriormente o ejecutarlo con ciertas modificaciones de parámetros, añadir pipes, etc, ejecutaríamos el comando doble admiración (!!):

    Por ejemplo, ejecutemos el siguiente comando:

    $ echo "Hola"
    Hola

    A continuación, ejecutamos el comando anterior con la orden !! añadiendo la palabra «mundo»:

    $ !! "mundo"
    echo "Hola" "mundo"
    Hola mundo

    O por ejemplo, que nos hayamos olvidado anteponer la orden sudo a un comando:

    $ apt-get install paquete
    E: No se pudo abrir el fichero de bloqueo «/var/lib/dpkg/lock-frontend» - open (13: Permiso denegado)
    E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?

    Ahora lo ejecutaremos con sudo:

    $ sudo !!
    sudo apt-get install paquete
    [sudo] password for usuario:
  6.  

  7. Ejecutar el penúltimo comando (Volver al índice General)
    Podemos ejecutar el penúltimo comando de la siguiente forma:

    $ !-2

    Veamos un ejemplo más descriptivo. Primero ejecutaremos el siguiente comando:

    $ echo "Con 100 cañones"
    Con 100 cañones

    A continuación ejecutamos cualquier otro comando, por ejemplo ls -l:

    $ ls -l

    Y finalmente ejecutaremos el penúltimo comando seguido de las palabras «por banda»:

    $ !-2 "por banda"
    echo "Con 100 cañones" "por banda"
    Con 100 cañones por banda

    Nota: Al igual que con el comando !! podemos anteponer o añadir argumentos.

  8.  

  9. Ejecutar el antepenúltimo comando (Volver al índice General)
    Podemos ejecutar el antepenúltimo comando de la siguiente forma:

    $ !-3

    Nota: Al igual que con el comando !! podemos anteponer o añadir argumentos.

  10.  

  11. Ejecutar comandos haciendo uso del histórico (Volver al índice General)
    Podemos ejecutar comandos en Linux, registrados en el histórico de comandos, conociendo su número de orden en el historial. Por ejemplo, si nos fijamos en el listado del histórico más arriba, vemos que el comando sudo apt-get update -oAcquire::AllowInsecureRepositories=true tiene el número de orden 19. Para volver a ejecutarlo sin tener que volver a escribir toda la orden de nuevo, podríamos ejecutarlo de la siguiente forma:

    $ !19
    sudo apt-get update -oAcquire::AllowInsecureRepositories=true
    [sudo] password for usuario:

    Nota: Al igual que con el comando !! podemos anteponer o añadir argumentos.

  12.  

  13. Repetir varios comandos del histórico de forma consecutiva (Volver al índice General)
    Conociendo el número de orden de los comandos en el histórico podemos ejecutar comandos en Linux, de forma consecutiva de la siguiente forma:

    $ !4 && !5 && !9

    En este ejemplo, si nos fijamos en el listado del histórico de comandos de más arriba, se ejecutará la siguiente orden:

    $ sudo apt update && sudo apt upgrade && sudo apt install synaptic
  14.  

  15. Repetir un comando que empieza por uno o varios caracteres (Volver al índice General)
    Supongamos que hemos ejecutado la orden nano /etc/apt/sources.list, para volver a ejecutar la misma orden podríamos hacerlo indicando los primeros caracteres de la orden. Veamos un ejemplo:

    $ !nan
    nano /etc/apt/sources.list

    Nota: Si existiesen en el histórico más de un comando que empieza por los mismos caracteres, se ejecutará el más reciente, es decir, empezando por el final del histórico.

  16.  

  17. Repetir un comando que contiene uno o varios caracteres (Volver al índice General)
    Puede ocurrir que no recordemos los primeros caracteres del comando pero si nos acordemos de algunos de los caracteres que contenía. En este caso podemos utilizar el comando (!?).

    Volviendo al ejemplo del punto anterior, escribiremos solo algunos de los caracteres que contiene la orden:

    $ !?apt
    nano /etc/apt/sources.list

    Nota: Si existiesen en el histórico más de un comando que contiene los caracteres conocidos, se ejecutará el más reciente, es decir, empezando por el final del histórico.

  18.  

  19. Ejecutar un comando con los argumentos del anterior (Volver al índice General)
    Para ejecutar comandos en Linux con los argumentos del comando anterior, haremos uso de la variable (!$). Esta variable contiene todos los argumentos del comando anterior.

    Por ejemplo, crearemos un archivo cuyo nombre será el argumento del comando:

    $ touch archivo.txt

    A continuación listaremos el archivo con los argumentos del comando anterior:

    $ ls -lh !$
    ls -lh archivo.txt
    -rw-r--r-- 1 usuario usuario 0 may 16 14:14 archivo.txt

  20.  
     
     

  21. Alias (Volver al índice General)
    Cuando ejecutamos comandos largos y complicados de escribir o recordar y además, los ejecutamos con bastante regularidad, podemos añadirlos como alias en el archivo .bashrc o en algún archivo específico para los alias.

    Si creamos los alias en el archivo .bashrc, nos arriesgamos a que al actualizar nuestro sistema operativo perdamos los alias añadidos, al ser sustituido el archivo .bashrc por la nueva versión. Para evitar esto, podemos crear un archivo específico para guardar nuestros alias. Este archivo suele llamarse .bash_aliases pero podría llamarse como nos diese la gana, siempre y cuando que lo indiquemos en el archivo .bashrc.

    Normalmente .bashrc contiene una referencia al archivo .bash_aliases que es un archivo específico para los alias y el cual, en algunos sistemas, no existe de forma predeterminada. Si no existe el archivo, podemos crearlo en la ubicación indicada en la referencia de .bashrc:

    El texto siguiente es un fragmento del archivo .bashrc en el que se muestra como es la sintaxis para referenciar un archivo para los alias:

    1
    2
    3
    4
    5
    6
    7
    8
    
    # Alias definitions.
    # You may want to put all your additions into a separate file like
    # ~/.bash_aliases, instead of adding them here directly.
    # See /usr/share/doc/bash-doc/examples in the bash-doc package.
     
    if [ -f ~/.bash_aliases ]; then
        . ~/.bash_aliases
    fi

    Bien, visto esto, ya sabemos que podemos crear nuestros alias tanto en .bashrc como en .bash_aliases, pero nunca el mismo alias en los dos archivos a la vez. Ahora veamos cual es la sintaxis para crear un alias, la decisión de elegir el archivo donde crearlos os la dejamos a vosotros.
     
    Ejemplo 1:
    Supongamos que hacemos repetidamente una conexión ssh al mismo servidor con el mismo usuario y con un puerto distinto al estándar y queremos crear un alias. En nuestro ejemplo utilizaremos el archivo .bash_aliases para los alias, para ello, como en nuestro sistema no existe dicho fichero, primero lo crearemos:

    $ nano ~/.bash_aliases

    A continuación, añadimos los alias. La sintaxis para crear un alias a dicha orden podría ser algo similar a esto:

    alias conexionssh1='ssh -l usuario -p 9921 10.44.129.56'

    Para que los alias recién creados surtan efecto tendremos que reiniciar la sesión del usuario o, recargar el fichero .bashrc y los archivos referenciados en él con el siguiente comando:

    $ source .bashrc

    Para ejecutar la orden anterior haciendo uso de su alias, tan solo tendríamos que ejecutar conexionssh1 en la línea de comandos:

    $ conexionssh1

     
    Ejemplo 2:
    Recordemos el ejemplo 1 y hagamos un alias al que podemos pasar parámetros, por ejemplo, la IP del servidor al que nos conectaremos. Para hacerlo, añadiremos al alias la variable $1:

    alias conexionssh2='ssh -l usuario -p 9921 $1'

    Recargamos el fichero .bashrc y los archivos referenciados en él:

    $ source .bashrc

    Ejecutamos la orden haciendo uso del alias:

    $ conexionssh2 10.44.129.50

     
    Ejemplo 3:
    Para finalizar, haremos una aclaración para los alias de comandos que tienen el mismo nombre que el comando. Veamos un ejemplo con el comando ls.
    Supongamos que hemos creado el siguiente alias:

    alias ls='ls -lh --color --group-directories-first

    Si queremos ejecutar un comando que tiene un alias con el mismo nombre pero sin que la ejecución haga referencia al alias, le añadimos a la orden una contrabarra (\), es decir, si queremos evitar que se ejecute el alias, lo ejecutaremos de la siguiente forma:

    $ \ls

ejecutar comandos en linux

 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
 
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

2 comentarios

  1. Leandro Sabo

    Muchas gracias por estos truquitos… están muy piolas y resultan muy útiles!
    Te mando un abrazo.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.