El poder del "comando histórico" de Linux en Bash Shell


Usamos el comando historial con frecuencia en nuestros trabajos de rutina diaria para verificar el historial del comando o para obtener información sobre el comando ejecutado por el usuario. En esta publicación, veremos cómo podemos usar el comando history de manera efectiva para extraer el comando que ejecutaron los usuarios en el shell Bash. Esto puede ser ú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 de historial. Sin embargo, bash shell proporciona herramientas CLI para editar el historial de comandos del usuario. Veamos algunos trucos y consejos útiles y el poder del comando historial .

1. Enumere los últimos/todos los comandos ejecutados en Linux

La ejecución del comando history simple desde la terminal le mostrará una lista completa de los últimos comandos ejecutados con números de línea.

[[email protected] ~]$ history

    1  PS1='\e[1;35m[\[email protected]\h \w]$ \e[m '
    2  PS1="\e[0;32m[\[email protected]\h \W]$ \e[m "
    3  PS1="\[email protected]\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 con el comando? Con "exportar" , el comando con variable mostrará el comando del historial con la marca de tiempo correspondiente cuando se ejecutó el comando.

[[email protected] ~]$ 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[\[email protected]\h \w]$ \e[m '
      7  2013-06-09 10:40:12   PS1="\e[0;32m[\[email protected]\h \W]$ \e[m "
      8  2013-06-09 10:40:12   PS1="\[email protected]\h:\w [\j]$ "
      9  2013-06-09 10:40:12   ping google.com
     10  2013-06-09 10:40:12   echo $PS1
%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 la salida anterior. ¿Cómo filtrar comandos simples o no destructivos en la historia ?. Utilice el siguiente comando "exportar" especificando el comando en HISTIGNORE u003d "ls -l: pwd: date:" no se guardará por el sistema y no se mostrará en el comando de historial.

[[email protected] ~]$ export HISTIGNORE='ls -l:pwd:date:'

4. Ignore los comandos duplicados en el historial

Con 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 un mismo comando varias veces en un Bash Prompt.

[[email protected] ~]$ export HISTCONTROL=ignoredups

5. Desmarcar comando de exportación

Desarmar el comando de exportación sobre la marcha. Ejecute el comando exportar desarmado con la variable uno por uno, los comandos que se hayan exportado mediante el comando exportar .

[[email protected] ~]$ unset export HISTCONTROL

6. Guardar comando de exportación de forma permanente

Realice una entrada de la siguiente manera en .bash_profile para guardar el comando export de forma permanente.

[[email protected] ~]$ 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 ejecutados por un usuario específico. Bash mantiene registros del historial en un archivo ‘~/.bash_history’ . Podemos ver o abrir un archivo para ver el historial de comandos.

[[email protected] ~]$ 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. Deshabilitar 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.

[[email protected] ~]$ 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.

[[email protected] ~]$ source .bash_profile

Nota: Si no desea que el sistema recuerde los comandos que ha escrito, simplemente ejecute el siguiente comando que desactivará o detendrá la grabación del historial sobre la marcha.

[[email protected] ~]$ export HISTSIZE=0

Sugerencias: busque "HISTSIZE" y edítelo en el archivo "/ etc/profile" con superusuario. El cambio en el archivo tendrá un efecto global.

9. Eliminar o borrar el historial de comandos

Con las flechas hacia arriba y hacia abajo, podemos ver el comando usado anteriormente que puede ser útil o puede enojarlo. Eliminar o borrar todas las entradas de la lista del historial de bash con las opciones "-c".

[[email protected] ~]$ 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 en "grep" como se muestra a continuación. Por ejemplo, el siguiente comando buscará y encontrará el comando "pwd" en la lista del historial.

[[email protected] ~]$ 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 comando ejecutado por última vez

Busque el comando ejecutado anteriormente con el comando "Ctrl + r" . Una vez que haya encontrado el comando que está buscando, presione "Enter" para ejecutar el mismo; de lo contrario, presione "esc" para cancelarlo.

(reverse-i-search)`source ': source .bash_profile

12. Recuperar el último comando ejecutado

Recupera un comando específico usado anteriormente. La combinación del comando Bang y 8 (! 8) recuperará el comando número 8 que ha ejecutado.

[[email protected] ~]$ !8

13. Recuperar comando específico ejecutado por última vez

Recuerde el comando usado anteriormente (netstat -np | grep 22) con "!" Y seguido de algunas letras de ese comando en particular.

[[email protected] ~]$ !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 mando histórico. Sin embargo, esto no es el final. Comparta su experiencia del comando histórico con nosotros a través de nuestro cuadro de comentarios a continuación.