Búsqueda de sitios web

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.