Uno no se puede imaginar todo lo que puede hacer con la orden history

[h]Ahorra tiempo en consola gracias al comando “history”[/h]

https://www.wifi-libre.com/img/members/3/history_1.jpg

Entonces el comando History sirve para ver en consola los comandos que hemos entrado.
Si tecleo history (sin opciones) obtendré en consola la lista de mi “hsitorial bash” con las ordenes numeradas (1 es la primera orden entrada)
A primera vista no hay de que emocionarse mucho… :stuck_out_tongue:
https://www.wifi-libre.com/img/members/3/history_2.jpg
Voy a tomar unos ejemplos inspirados de mi emocionante existencia :stuck_out_tongue: dónde el uso de history y sus opciones significa ganar tiempo y siguiendo la sagrada regla del esfuerzo mínimo.

[h]1. El maldito tar[/h]
Estoy en mi consola y tengo de descomprimir un archivo **tar.gz **
Personalmente nunca he llegado a acordarme de los argumentos a entrar… ¿-xvf a lo mejor?
En lugar de ir a buscar en la web (otra vez :rolleyes:) o de intentar apañarme con la ayuda en consola de tar (te deseo suerte y animo si este es tu camino) hago:

history | grep "tar.gz"

Y veo inmediatamente que no tengo que poner xvf pero zxf (No estaba muy lejo)
https://www.wifi-libre.com/img/members/3/history_4.jpg
La ventaja es que no tengo que memorizar “que es zxf para descomprimir el tar.bz con tar
El comando history es un acceso directo a una memoria infalible mucho mejor que mi cerebro.

[h]2. El odiado Network manager[/h]
Ahora la cosa va mejor pero durante un tiempo teníamos que “matar” a Netwrok Manager para poder usar el modo monitor.
Con el comando

sudo check kill

Si “matamos” a Network Manager no tenemos otra para volver a conectarnos en mode managed que reiniciar Network Manager desde la consola.
Si no nos acordamos de la orden, esta vez no podremos buscar en la web … No hay Internet. :stuck_out_tongue:
En lugar de reiniciar la computadora para volver a tener Internet hacemos

history | grep network-manager

https://www.wifi-libre.com/img/members/3/history_3.jpg
Veo la orden para reiniciar network manager y podemos usar un pequeño truco para ejecutarla gracias a la opciones de history
La orden tiene el numero 1205: La puedo volver a ejecutar escribiendo un punto de exclamación antes de su numero

!1205

https://www.wifi-libre.com/img/members/3/history_5.jpg

[h]3. Actualizar reaver modificado[/h]
En kali o Arch linux no hace falta pero en Ubuntu y otras distribuciones el reaver de los repositorios es el “original”, sin ataque pixiedust.
Así que debemos instalarlo desde su rama github y para actualizarlo deberemos hacerlo nosotros (instalar encima de la vieja versión)
Para bajar el código nadie (supongo) se acuerda de la dirección https del repositorio
Luego se hace cd src + ./configure + make + make install, de esto nos podemos acordar que son comandos básicos.
Pero el URL exacto de la rama :rolleyes:…
Como antes podemos combinar history con grep y la expresión regular "git ": Tendríamos el comando empleado para descargar la ultima revisión de reaver modificado.
Podemos incluso ir más rápido si la ultima cosa que hemos bajado de git era reaver…
En este caso tecleamos

!git

Esto hace que se ejecute la ultima orden “git”
https://www.wifi-libre.com/img/members/3/history_6.jpg
Ya tengo la ultima revisión de reaver modificado lista para instalarse sin tener que buscar la dirección y entrar la en consola.
Esto en cuatro letras: !git :slight_smile:

Para saber más sobre el comando history
[list=*]
]Hisotry - Command line history/]
[/list]

[h]Optimizar el uso de history depurando entradas inútiles[/h]
https://media.giphy.com/media/3o6Mb84ODTP8FgQQuI/giphy.gif
Quien usa la consola se vuelve enseguida adicto a las flechas arriba y abajo.
Usamos muchas veces los mismos comandos y con unas cuantas pulsaciones en la flechita los tenemos listos para ejecución.
Es súper practico.

Vamos a ver ahora algunos trucos para optimizar el flujo de trabajo con history.
Interesándonos en un par de variables de entorno de nuestro interpreye de ordenes:** Bash**.
Empezando por saber dónde se registran los comandos que ejecutamos en consola.
Para ello ejecutaremos

echo $HISTFILE

https://www.wifi-libre.com/img/members/3/history_bash_1.jpg
Los comandos se guardan por defecto (debian en este caso) en un archivo oculto llamado bash_history
Hecha-le un ojo, estoy seguro de que verás tú también ordenes repetidas:

kcdtv@bob:~$ tail -n 20 $(echo $HISTFILE) sensors sensors ls ~/.bash_profile ls -a echo $HISTCONTROL echo $HISTFILE man history ls ~/.history cd .cache ls cd mozilla du -sh * ls -a cd firefox ls sudo rm -r *-esr ls du -sh * \a ls

Para guardar una instancia única de cada orden hay que definir la variable de entorno HISTCONTROL con el valor :ignoredups (Por defecto su valor es nulo)
Debemos editar con privilegios de administrador el archivo /etc/bash/bashrc
A lo bruto, podemos hacer esto:

sudo -i echo "HISTCONTROL=:erasedups" >> /etc/bash/bashrc
Para activar la mod ejecutaremos

exec bash

Pequeña demostración;
https://www.wifi-libre.com/img/members/3/history_bash_2.jpg
He entrado varias veces pwd y **date **y me quedo con una sola entrada,

En la salida tengo también a history 3 y history 4.
No es muy interesante guardar ordenes history y esto lo podemos quitar modificando la variable HISTIGNORE para ignorar una orden especifica
Podemos poner varias ordenes separadas con dos puntos, podemos por ejemplo añadir pwd que solo sirve para ver el directorio dónde estamos,

sudo -i echo "HISTIGNORE="pwd:history*" >> /etc/bash/bashrc
Notad la estrella detrás de history: Si no la ponemos solo se borrará cuando usamos history a pelos secos.
No olvidarse de hacer los cambios efectivos con

exec bash

https://www.wifi-libre.com/img/members/3/history_bash_3.jpg
He ejecutado pwd y history 2 y ninguno de los comandos aparece.

fuentes
[list=*]
]How to manage Bash history by Egidio Docile @ linuxconfig/]
]How to Set Environment Variables in Linux @ PhoenixNAP/]
[/list]