Normalmente usamos el comando history para ver los ultimos comandos que hemos ejecutado, pero pocos saben realmente lo útil y complejo que puede ser este comando.
Mostrar la fecha de ejecución de un comando:
Cuando ejecutas el comando history te muestra el número del comando y el comando propiamente dicho. Pero cuando no eres el unico que usa ese equipo y quieres saber quien y cuando se ejcuto cierto comando es de mucha utilidad ver la fecha y hora de cuando se lo hizo. Para eso podemos setear la variable de entorno HISTTIMEFORMAT.
# export HISTTIMEFORMAT=’%F %T‘
Ahora ejecuta el comando history y tendras el siguiente resultado
# history
765 2013-03-29 10:08:46host dimasport.com.ec
766 2013-03-29 10:08:46whois dimasport.com.ec
767 2013-03-29 10:08:46whois sportech.com.ec
768 2013-03-29 10:08:46youtube-dl http://www.youtube.com/watch?v=seqG2FtK6mM
Buscar en el history:
Presionando Ctrl+R puedes buscar en tu history por un comando. Una vez presionado Ctrl+R en el prompt, empiezas a copiar el comando y el shell buscará por un comando que coincida en parte con lo que estás ingresando. Una vez que de con el comando que buscas puedes presionar Enter para confirmarlo o las flechas izquierda o derecha para editar el comando antes de ejecutarlo.
# (reverse-i-search)`inet‘: cat /etc/inetd.conf
Repetir el último comando:
Puedes repetir el último comando de cuatro formas diferentes, presionando la flecha hacia arriba y Enter, ingresando el operador !! (bang bang) y Enter, ingresando !-1 y Enter o presionando Ctrl+P y Enter.
Ejecutar un comando específico del history:
Para ejecutar un comando específico del history, debes conocer el número del mismo y luego anteceder al número del mismo el operador !
# history | more
1 whois acnor.com
2 whois maderama.net
3 whois infosalud.com.ec
4 host mail.infosalud.com.ec# !3
whois infosalud.com.ec
Ejecutar un comando previo que empieza con una palabra específica:
Ingresando ! seguido de unas cuantas letras, ejecutarás nuevamente un comando, que empiece con esas letras, previamente ejecutado.
# !ps
ps ax | grep cron
5023 ? Ss 0:00 /usr/sbin/cron
8057 pts/0 R+ 0:00 grep cron
Controlar la cantidad total de líneas en el history:
Seteando la variable de entorno HISTSIZE, en el .bash_profile por ejemplo, podrás limitar la cantidad de líneas almacenadas por el history.
# nano ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450
Cambiar el nombre del archivo history:
Por default, el history del bash se almacena en el archivo ~/.bash_history, para cambiar el nombre del mismo, debemos setear la variable de entorno HISTFILE:
# nano ~/.bash_profile
HISTFILE=$HOME/.historia
Eliminar las entradas contiguas repetidas:
Seteando la variable de entorno HISTCONTROL se pueden eliminar las entradas contiguas repetidas, mira el ejemplo:
# ls
# ls
# ls
# history | tail -4
353 ls
354 ls
355 ls
356 history | tail -4
#
# export HISTCONTROL=ignoredups
# ls
# ls
# ls
# history | tail -3
357 export HISTCONTROL=ignoredups
358 ls
359 history | tail -3
Borrar duplicados a lo largo del history:
El valor ignoredups de la variable de entorno HISTCONTROL utilizado anteriormente solo borra entradas duplicadas consecutivas, para eliminar entradas duplicadas en todo el archivo hay que setear HISTCONTROL=erasedups
Forzar a que el history no recuerde un comando en particular:
Seteando la variable HISTCONTROL con el valor ignorespace, puedes hacer que el history no recuerde un comando en particular si al mismo le dejas un espacio en blanco delante.
# export HISTCONTROL=ignorespace
# ls -l
# pwd
# service httpd stop
# history | tail -3
567 ls -ltr
568 pwd
569 history | tail -3
Limpiar todas las entradas previas del history:
Ejecutando history -c eliminarás para la consola activa todas las entradas previas al history, pero no estarás eliminándolas del bash_history, por lo tanto en una nueva consola conservarás el history.
Sustituir palabras de los comandos del history:
A veces puede ser que necesites ejecutar otro comando, pero con el mismo argumento que el comando anterior. En el siguiente ejemplo, el !!:$ a continuación del comando nano obtiene el argumento del comando anterior:
# ls .bash_logout
.bash_logout
# vi !!:$
vi .bash_logout
En este otro ejemplo, el !^ a continuación del comando nano obtiene el primer argumento del comando anterior:
# cp .bash_logout .bash_logout.old
# vi !^
vi .bash_logout
Sustituir un argumento específico de un comando específico:
En el siguiente ejemplo, !cp:2 busca por el comando anterior que empieza con cp y toma el segundo argumento y lo sustituye para el comando cat que se ejecuta a continuación:
# cp .bash_logout .bash_logout.old
# cat !cp:2
cat .bash_logout.old
Deshabilitar el uso del history:
Si quieres deshabilitar el history y que el bash shell no recuerde más los comandos ingresados, debes setear la variable HISTSIZE en 0
# export HISTSIZE=0
# history
# #nota aquí que no se muestra nada
Ignorar comandos específicos:
Muchas veces pueded no querer agregar al history comandos usuales como pwd, ls, etc. Para ignorar comandos debemos setear la variable HISTIGNORE (no sería mala idea hacerlo desde el ~/.bash_profile) de la siguiente manera:
# export HISTIGNORE=”pwd:ls:ls -ltr:”
MFCP!!!