GNU/Linux >> Tutoriales Linux >  >> Linux

Comando de historial en Linux explicado en profundidad

Cuando usa la línea de comandos de Linux con frecuencia, usar el comando de historial de manera efectiva puede ser un gran aumento de la productividad.

En Linux, hay un comando muy útil para mostrarle todos los últimos comandos que se han utilizado recientemente. El comando simplemente se llama history .

Mostrar marca de tiempo

Por lo general, cuando escribe history en la línea de comandos, de manera predeterminada, verá un número seguido de los comandos que ha usado recientemente. Para propósitos de auditoría, puede ser beneficioso mostrar la marca de tiempo junto con el comando como se muestra a continuación.

Para habilitar la marca de tiempo en history salida del comando, debe configurar el HISTTIMEFORMAT variable bash.

export HISTTIMEFORMAT="%F %T "
history | more
1  2020-06-25 19:02:39 systemctl restart network
2  2020-06-25 19:02:43 exit
3  2020-06-25 19:02:47 id
4  2020-06-25 19:02:56 cat /etc/hosts

Buscando historial de comandos

Esta puede ser la función que usa con más frecuencia del history comando . Cuando ya haya ejecutado un comando muy largo, simplemente puede buscar en el historial usando una palabra clave y volver a ejecutar el mismo comando sin tener que escribirlo por completo.

  1. Presiona Control+R y escriba la palabra clave.
  2. Presione enter cuando vea su comando, que ejecutará el comando del historial.

En el siguiente ejemplo, busqué host , que mostraba el comando anterior cat /etc/hosts en el historial que contenía la palabra host .

(reverse-i-search)`host': cat /etc/hosts
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1

A veces desea editar un comando del historial antes de ejecutarlo. Por ejemplo, puede buscar systemctl , que mostrará systemctl restart network desde el historial de comandos, seleccione este comando (pulsando ESC clave) y cambiar el restart para stop .

Luego vuelva a ejecutarlo presionando Enter .

(reverse-i-search)`systemctl': systemctl stop network
systemctl stop network

Repetir el último comando ejecutado

En algún momento puede terminar repitiendo los comandos anteriores por varias razones. Las siguientes son las 4 formas diferentes de repetir el último comando ejecutado.

  1. Use la up arrow para ver el comando anterior y presione enter para ejecutarlo.
  2. Escriba !! y presione enter desde la línea de comando
  3. Escriba !-1 y presione enter desde la línea de comando.
  4. Presiona Control+P mostrará el comando anterior, presione enter para ejecutarlo.

Ejecutar un comando específico

En el siguiente ejemplo, si quiere repetir el comando #4, puede hacer !4 como se muestra a continuación.

history | more
systemctl restart network
exit
id
cat /etc/hosts
!4
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1

Ejecutar comando anterior que comienza con una palabra específica

Escribe ! seguido de las primeras letras del comando que le gustaría volver a ejecutar. En el siguiente ejemplo, escribir !ps e ingrese, ejecutó el comando anterior comenzando con ps , que es ps aux | grep yp .

!ps
ps aux | grep yp
root     16947  0.0  0.1  36516  1264 ?        Sl   13:10   0:00 ypbind
root     17503  0.0  0.0   4124   740 pts/0    S+   19:19   0:00 grep yp

Limitar el número de elementos del historial

Esto está controlado por HISTSIZE y HISTFILESIZE Variables de shell Bash incorporadas. Agregue las siguientes dos líneas a su ~/.bashrc archivo y cierre sesión y luego vuelva a iniciar sesión.

HISTSIZE=1500
HISTFILESIZE=1500

Como resultado, ahora history está configurado para almacenar 1500 comandos.

Cambiar el nombre del archivo de historial

Por defecto, history se almacena en ~/.bash_history archivo.

Agregue la siguiente línea a .bash_profile archivo y vuelva a iniciar sesión en el shell Bash, para almacenar el comando de historial en .my_commandline archivo en lugar de .bash_history archivo.

HISTFILE=/root/.my_commandline

Esto se usa cuando desea realizar un seguimiento de los comandos ejecutados desde diferentes terminales utilizando un nombre de archivo de historial diferente.

Eliminar la continua entrada repetida del historial

En el siguiente ejemplo pwd se escribió tres veces, cuando haces la historia, puedes ver las 3 ocurrencias continuas de la misma. Para eliminar duplicados, configure HISTCONTROL a ignoredups como se muestra a continuación.

history | tail -4
44  pwd
45  pwd
46  pwd
47  history | tail -4
export HISTCONTROL=ignoredups
history | tail -3
56  export HISTCONTROL=ignoredups
57  pwd
58  history | tail -4

Borrar duplicados de todo el historial

Los ignoredups que se muestra arriba elimina los duplicados solo si son comandos consecutivos. Para eliminar duplicados en todo el historial, configure el HISTCONTROL a erasedups como se muestra a continuación.

export HISTCONTROL=erasedups
pwd
systemctl restart network
history | tail -3
38  pwd
39  systemctl restart network
40  history | tail -3
ls -l
systemctl restart network
history | tail -6
35  export HISTCONTROL=erasedups
36  pwd
37  history | tail -3
38  ls -l
39  systemctl restart network
40  history | tail -6

Obligar al historial a no recordar un comando en particular

Cuando ejecuta un comando, puede instruir a history para ignorar el comando configurando HISTCONTROL para ignorespace y escribiendo un espacio delante del comando como se muestra a continuación.

Veo que muchos administradores de sistemas junior se emocionan con esto, ya que pueden ocultar un comando del historial. Es bueno entender cómo ignorespace obras. Pero, como práctica recomendada, no oculte nada del historial a propósito.

export HISTCONTROL=ignorespace
ls -ltr
pwd
 systemctl restart network #Note that there is a space at the beginning of service, to ignore this command from history
history | tail -3
67  ls -l
68  pwd
69  history | tail -3

Borrar todo el historial anterior

En algún momento, es posible que desee borrar todo el history anterior , pero quiere que la historia siga avanzando.

history -c

Palabras sustitutas de los comandos de historial

Cuando estás buscando a través del history , es posible que desee ejecutar un comando diferente pero usar el mismo parámetro del comando que acaba de buscar.

En el siguiente ejemplo, el !!:$ al lado del vi El comando obtiene el argumento del comando anterior al comando actual.

ls nginx.conf
nginx.conf
vi !!:$
vi nginx.conf

En el siguiente ejemplo, el !^ junto al comando vi obtiene el primer argumento del comando anterior (es decir, cp comando) al comando actual (es decir, vi comando).

cp nginx.conf nginx.conf.bak
vi  !^
vi nginx.conf

Sustituir un argumento específico por un comando específico

En el siguiente ejemplo, !cp:2 busca el comando anterior en el historial que comienza con cp y toma el segundo argumento de cp y lo sustituye por el comando ls -l como se muestra a continuación.

cp ~/longname.txt /really/a/very/long/path/long-filename.txt
ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt

En el siguiente ejemplo, !cp:$ busca el comando anterior en el historial que comienza con cp y toma el último argumento (en este caso, que también es el segundo argumento como se muestra arriba) de cp y lo sustituye por el comando ls -l como se muestra a continuación.

ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

Desactivar el uso del historial

Si desea deshabilitar history todos juntos y no quiere que Bash Shell recuerde los comandos que ha escrito, configure el HISTSIZE a 0 como se muestra a continuación.

export HISTSIZE=0

Ignorar comandos específicos del historial

A veces, es posible que no desee saturar su historial con comandos básicos como pwd y ls . Usa HISTIGNORE para especificar todos los comandos que desea ignorar del historial.

Tenga en cuenta que agregar ls al HISTIGNORE ignora solo ls y no ls -l . Por lo tanto, debe proporcionar el comando exacto que le gustaría ignorar del historial.

export HISTIGNORE="pwd:ls:ls -ltr:"
pwd
ls
ls -l
systemctl restart network
history | tail -3
79  export HISTIGNORE="pwd:ls:ls -l:"
80  systemctl restart network
81  history
[Note that history did not record pwd, ls and ls -l]

Para obtener más información sobre la history comando en Linux, consulte su página de manual.


Linux
  1. comando linux mv

  2. Linux du comando

  3. Comando IP de Linux

  4. Comando cd de linux

  5. Comando de historial de Linux

Comando Tr en Linux explicado con ejemplos

Comando procinfo en Linux explicado

Explicación del comando fuente en Linux

Comando de pantalla en Linux explicado

Comando Arping en Linux explicado

Comando de historial en Linux:ver el historial de terminales de Linux