History: Mejorando el uso de la consola

Terminal

En este, mi primer artículo para DesdeLinux, quiero hacer una breve referencia a un no muy conocido, pero sí muy práctico comando de la consola o shell de cualquier Linux. Me refiero a history.

Casi todo el mundo que usa Linux, sabe que si apretamos la flecha hacía arriba en una terminal, nos mostrará el comando usado anteriormente y que si seguimos apretando iremos retrocediendo en dicha lista de comandos. A su vez que !! nos ejecutará el último comando usado. Bueno, esto es gracias a history, pero no termina ahí su potencial, ya que si lo ejecutamos directamente, obtendremos un listado con los últimos mil comandos:

sebastian:~$ history
1543 ping -c 2 desdelinux.net
1544 clear
1545 sudo apt-get update
1546 uname
1547 history

En sí el listado será más largo, pero con unos pocos de ejemplo alcanza. Ya que ahora podremos ver todo el historial de comandos usados junto a un número que nos permitirá ubicar el que deseamos dentro de dicha lista lista. Si desean también se puede hacer que history muestre la fecha de ejecución del mismo.

Entonces, escribiendo ! más el número de linea la shell nos ejecutará el comando que corresponda a dicha linea:

sebastian:~$ !1543
ping -c 2 desdelinux.net
PING desdelinux.net (192.31.186.28) 56(84) bytes of data.

Pero, también podemos ejecutar por letras, ya que si ponemos !+un ejecutará la línea “1546″, porque ejecuta el último comando que comience con esas letras.

sebastian@soporte-mesi01:~$ !un
uname
Linux

Pero cuidado, ya que esto puede ser arriesgado, dado que no sabemos que comando es el último que comienza con esas letras y entonces lo mejor para recuperar un comando usado previamente es con la combinación de teclas CTRL+r, donde nos ofrecerá un buscador y, a medida que escribamos, nos ira mostrando el ultimo comando completo que coincida. Entonces, con apretar enter lo ejecutará.

Si por el contrario, queremos listar todas las veces que usamos un comando, deberemos utilizar grep:
sebastian:~$ history | grep uname
1499 uname -r
1500 uname -a
1546 uname
1549 uname
1550 history | grep uname

Con lo que solamente nos listará las lineas donde esté la palabra buscada, en este caso «uname«.


14 comentarios, deja el tuyo

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   elav dijo

    Genial! Gracias por los tips

  2.   Statick dijo

    Felicitaciones, excelente tip

  3.   kuk dijo

    Esto estaba buscando, gracias!!!

  4.   Victor dijo

    No conocía el Ctrl+r, lo voy a practicar así queda en la base de datos cerebral.
    Podrías agregar a la post también el comando ¨ $ history -c ¨ que como sabes sirve para borrar el historial, muchas veces de utilidad si no queremos dejar pistas o si lo ensuciamos demasiado tipeando mal algún comando.
    Saludos y gracias por el post!!

    1.    thalskarth dijo

      La de usar el parámetro -c lo conocía, pero la verdad nunca lo he usado

  5.   Alberto dijo

    Muy interesante el atajo ‘Ctrl + r’. Añadir que si tenemos varias terminales abiertas el comando ‘history’ solo muestra el de esa terminal hasta que se abra otra nueva terminal.
    También se puede usar con el comando ‘tail’ (para ver los ultimos comandos) o con ‘less’ para verlos por páginas.

    ¡Saludos!

  6.   Gabriel dijo

    Son esos pequeños tips que de vez en cuando uno se olvida, pero que son muy útiles, gracias 😉

  7.   Vito dijo

    Impresionante.
    Gracias a esto, en lugar de escribir rsync -avl -stats -progress /media/datos/WEBS/ /media/WD/WEBS
    solo tuve que escribir !496, y de ahora en adelante así será!!
    Siempre lamento haber comenzado tarde con el Linux, y siempre me siento afortunado por haber comenzado con Linux.
    Gracias por estos comandos. Seguramente están en el man, pero nunca me lo miro, así como cuando compro algún cacharro, lo último que miro es el manual.
    Gracias.
    Reciban un cordial saludo.

    1.    Daniel Rojas dijo

      Vito, tené en cuenta que el número de la linea en el historial va a cambiar, dado que se van agregando más líneas al mismo. Lo que te recomiendo hacer para evitar teclear toda la linea, es agregar la misma como un alias a tu .bashrc, de esa forma con solo teclear el nombre del alias que le hayas asignado se ejecutaría toda la línea que le asignaste.

      Saludos!

      1.    Vito dijo

        Gracias.
        El número era el ejemplo de mi caso. Ese número tenía en mi historial, y con ese probé el tip. Ya se que cambia, y cada vez que lo ejecuto, aparece el mismo comando con otro número nuevo.

        Lo de los alias en el .bashrc, lo conozco y lo uso apenas para apagar los monitores con «pan» en lugar del comando apropiado (sleep 1 && xset dpms force off), pero no utilizo mucho los alias, porque como son muchos los comandos que uso, luego tengo el problema de tener que recordar el alias; y termino teniendo el doble de problemas. Recordar el comando o recordar el alias del comando.

        De este modo, me resulta económico recordar «history» o más fácil aún, «history | grep rsync» para cuando tengo que respaldar mi trabajo. Este último, es un ejemplo de una de las utilidades que yo le veo.

        Decididamente, lo veo súper útil, por lo menos en mi caso, para preservar mi RAM cerebral que es muy escasa. Así no tengo que recordar decenas de comandos.

        Gracias por tu respuesta.

        Recibe un cordial saludo.

  8.   Diego dijo

    También es muy útil ejecutar (sin comillas) «history > historia.txt» y así guardarnos en un archivo de texto los comandos que hemos ejecutado.

    1.    thalskarth dijo

      Si, incluso siempre podes filtrar usando grep en el medio, por ejemplo con algo como
      history | grep uname >pru.txt
      Y entonces, el txt solamente te guardaría los resultados con el comando «uname» 😉

  9.   Joaquin dijo

    Lo mejor: Ctrl + r

  10.   Joseda dijo

    Buen artículo y muy útil. Gracias por la info 🙂