El poder del "comando histórico" de Linux en Bash Shell
Usamos el comando history con frecuencia en nuestros trabajos de rutina diaria para verificar el historial de comandos u obtener información sobre los comandos ejecutados por el usuario. En esta publicación, veremos cómo podemos usar el comando de historial de manera efectiva para extraer el comando que ejecutaron los usuarios en Bash Shell. Esto puede resultar útil para fines de auditoría o para averiguar qué comando se ejecuta en qué fecha y hora.
De forma predeterminada, la fecha y la marca de tiempo no se verán al ejecutar el comando historial. Sin embargo, bash shell proporciona herramientas CLI para editar el historial de comandos del usuario. Veamos algunos consejos y trucos útiles y el poder del comando historial.
1. Enumere los últimos/todos los comandos ejecutados en Linux
La ejecución del comando historial simple desde la terminal le mostrará una lista completa de los últimos comandos ejecutados con números de línea.
[narad@tecmint ~]$ history
1 PS1='\e[1;35m[\u@\h \w]$ \e[m '
2 PS1="\e[0;32m[\u@\h \W]$ \e[m "
3 PS1="\u@\h:\w [\j]$ "
4 ping google.com
5 echo $PS1
6 tail -f /var/log/messages
7 tail -f /var/log/messages
8 exit
9 clear
10 history
11 clear
12 history
2. Enumere todos los comandos con fecha y marca de tiempo
¿Cómo encontrar la fecha y la marca de tiempo contra el comando? Con el comando 'exportar' con variable se mostrará el historial del comando con la marca de tiempo correspondiente cuando se ejecutó el comando.
[narad@tecmint ~]$ export HISTTIMEFORMAT='%F %T '
1 2013-06-09 10:40:12 cat /etc/issue
2 2013-06-09 10:40:12 clear
3 2013-06-09 10:40:12 find /etc -name *.conf
4 2013-06-09 10:40:12 clear
5 2013-06-09 10:40:12 history
6 2013-06-09 10:40:12 PS1='\e[1;35m[\u@\h \w]$ \e[m '
7 2013-06-09 10:40:12 PS1="\e[0;32m[\u@\h \W]$ \e[m "
8 2013-06-09 10:40:12 PS1="\u@\h:\w [\j]$ "
9 2013-06-09 10:40:12 ping google.com
10 2013-06-09 10:40:12 echo $PS1
Significado de las variables HISTTIMEFORMAT
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )
3. Filtrar comandos en el historial
Como podemos ver, el mismo comando se repite varias veces en el resultado anterior. ¿Cómo filtrar comandos simples o no destructivos en el historial? Utilice el siguiente comando 'export' especificando el comando en HISTIGNORE='ls -l:pwd:date:' que el sistema no guardará y no se mostrará en el comando del historial.
[narad@tecmint ~]$ export HISTIGNORE='ls -l:pwd:date:'
4. Ignorar comandos duplicados en el historial
El siguiente comando nos ayudará a ignorar la entrada de comandos duplicados realizada por el usuario. Solo se mostrará una entrada en el historial si un usuario ejecuta el mismo comando varias veces en un símbolo de Bash.
[narad@tecmint ~]$ export HISTCONTROL=ignoredups
5. Desarmar comando de exportación
Desarmar el comando de exportación sobre la marcha. Ejecute el comando unset export con la variable uno por uno, cualesquiera que sean los comandos que se hayan exportado mediante el comando export.
[narad@tecmint ~]$ unset export HISTCONTROL
6. Guardar el comando de exportación de forma permanente
Realice una entrada de la siguiente manera en .bash_profile para guardar el comando exportar de forma permanente.
[narad@tecmint ~]$ vi .bash_profile
.bash_profile
Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
User specific environment and startup programs
export HISTCONTROL=ignoredups
PATH=$PATH:$HOME/bin
export PATH
7. Enumere los comandos ejecutados por usuarios específicos
Cómo ver el historial de comandos ejecutado por un usuario específico. Bash mantiene registros del historial en un archivo ‘~/.bash_history’. Podemos ver o abrir el archivo para ver el historial de comandos.
[narad@tecmint ~]$ vi .bash_history
cd /tmp/
cd logstalgia-1.0.3/
./configure
sudo passwd root
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
./configure
make
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc++
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
apt-get install make
mysql -u root -p
apt-get install grsync
apt-get install unison
unison
8. Deshabilite el almacenamiento del historial de comandos
Algunas organizaciones no mantienen un historial de comandos debido a la política de seguridad de la organización. En este caso, podemos editar el archivo .bash_profile (es un archivo oculto) del usuario y realizar una entrada como se muestra a continuación.
[narad@tecmint ~]$ vi .bash_profile
.bash_profile
Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
User specific environment and startup programs
PATH=$PATH:$HOME/bin
HISTSIZE=0
export PATH
.bash_profile (END)
Guarde el archivo y cargue los cambios con el siguiente comando.
[narad@tecmint ~]$ source .bash_profile
Nota: Si no desea que el sistema recuerde los comandos que ha escrito, simplemente ejecute el siguiente comando que deshabilitará o detendrá la grabación del historial sobre la marcha.
[narad@tecmint ~]$ export HISTSIZE=0
Consejos: busque 'HISTSIZE' y edítelo en el archivo '/etc/profile' con el superusuario. El cambio de fichero tendrá efecto global.
9. Eliminar o borrar el historial de comandos
Con las flechas arriba y abajo, podemos ver los comandos utilizados anteriormente que pueden resultar útiles o irritarle. Eliminar o borrar todas las entradas de la lista del historial de bash con las opciones '-c'.
[narad@tecmint ~]$ history -c
10. Buscar comandos en el historial usando el comando Grep
Busque el comando a través de '.bash_history' canalizando su archivo de historial a 'grep' como se muestra a continuación. Por ejemplo, el siguiente comando buscará y encontrará el comando "pwd" en la lista del historial.
[narad@tecmint ~]$ history | grep pwd
113 2013-06-09 10:40:12 pwd
141 2013-06-09 10:40:12 pwd
198 2013-06-09 15:46:23 history | grep pwd
202 2013-06-09 15:47:39 history | grep pwd
11. Buscar el último comando ejecutado
Busque el comando ejecutado anteriormente con el comando ‘Ctrl+r’. Una vez que haya encontrado el comando que está buscando, presione 'Entrar' para ejecutar el mismo o presione 'esc' para cancelarlo.
(reverse-i-search)`source ': source .bash_profile
12. Recuperar el último comando ejecutado
Recuerde un comando específico utilizado anteriormente. La combinación del comando Bang y 8 (!8) recordará el comando número 8 que haya ejecutado.
[narad@tecmint ~]$ !8
13. Recuperar el último comando específico ejecutado
Recuerde el comando utilizado anteriormente (netstat -np | grep 22) con '!' y seguido de algunas letras de ese comando en particular.
[narad@tecmint ~]$ !net
netstat -np | grep 22
(No info could be read for "-p": geteuid()=501 but you should be root.)
tcp 0 68 192.168.50.2:22 192.168.50.1:1857 ESTABLISHED -
tcp 0 0 192.168.50.2:22 192.168.50.1:2516 ESTABLISHED -
unix 2 [ ] DGRAM 12284 - @/org/freedesktop/hal/udev_event
unix 3 [ ] STREAM CONNECTED 14522 -
unix 2 [ ] DGRAM 13622 -
unix 3 [ ] STREAM CONNECTED 12250 - @/var/run/hald/dbus-ujAjOMNa0g
unix 3 [ ] STREAM CONNECTED 12249 -
unix 3 [ ] STREAM CONNECTED 12228 - /var/run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 12227 -
Hemos tratado de resaltar el poder del comando de la historia. Sin embargo, esto no es el final. Comparta su experiencia con el comando histórico con nosotros a través de nuestro cuadro de comentarios a continuación.