Analizar el historial de Bash en Linux

En Bash, el history El comando es la clave no solo para comprender lo que hizo durante su sesión de shell, sino también la materia prima para los nuevos comandos que desea ejecutar en el futuro. History es especialmente útil cuando se utiliza un servidor sin cabeza. Si no tiene un mouse, no puede copiar y pegar fácilmente la última mitad de un comando complejo para ejecutar una versión ligeramente modificada, por lo que debe volver a escribir todo, a menos que use history modificadores

Mantenga la historia fuera de su historial

Antes de entrar en la historia, aquí hay un consejo para mantenerlo literal history entradas en su historial.

El problema de usar el history para revisar su history es que agrega una entrada a su history archivar. Estas entradas no solo abarrotan su history, pero también mueven cada línea "más lejos" hacia atrás desde su posición actual.

$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
105 history
$

Un objetivo en movimiento es difícil de rastrear y difícil de alcanzar, por lo que si planea usar seriamente su history Para acelerar sus interacciones Bash, agregue esta configuración a su .bashrc archivar:

export HISTCONTROL=$HISTCONTROL:ignorespace

Esta configuración evita que cualquier comando precedido por un espacio se agregue a su Bash history.

$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$   history
102 cd example-project
103 ls
104 touch doc/LICENSE
$

Eventos históricos

La estructura básica del casco. history comienza con una lista de Eventos. A event es lo que haya ingresado en el shell, seguido por el Return Donde Enter llave. Cada event se le asigna un número de índice (un número de línea), y puede mostrar y recuperar eventos usando event designators.

Por ejemplo, para recordar una línea de pedido específica en su shell history, utilice un signo de exclamación (!) seguido inmediatamente por el número de la history línea:

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

También puede hacer referencia a las órdenes colocadas contra su posición en el history SEO. Por ejemplo, para ejecutar un comando de ellos líneas en el pasado, considere que su indicador actual es más grande que la última línea en history, luego reste el número de línea que desea ejecutar de su número de línea actual. En este ejemplo, la línea 103 es la línea objetivo y 105 es el aviso actual (para un delta de 105-103=2):

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Puede guardar un carácter completo si solo desea ejecutar la última línea nuevamente. La expresion !! y !-1 son sinónimos:

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Tenga en cuenta que el comando en sí se repite en la salida cuando history se repite. Por brevedad y claridad, dicha salida se excluye de los otros ejemplos en este artículo.

Designadores de palabras

Bash tiene características para ayudarte a analizar tu history utilizando word designatorsy herramientas que le permiten modificar los controles de su history. Podría ser útil pensar en su caparazón history como una matriz indexada, o incluso como un gran objeto histórico compuesto por muchos elementos más pequeños. Cada palabra en cada línea de tu history está indexado, comenzando en 0 (que suele ser el comando, pero los comandos de varias partes y los prefijos de variables de entorno son excepciones notables). Puede acceder a cada índice agregando dos puntos (:) a su referencia de línea, seguido inmediatamente por el word designator.

Este es un ejemplo de acceso de primera palabra:

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Porque agarrar el primer argumento es común, el circunflejo (o "sombrero": ^) es un alias para :1.

$ echo foo
$ !!^
foo

En el otro extremo del espectro, el dólar ($) el signo representa el argumento final:

$ echo foo bar baz
$ echo !!$
baz

rangos de palabras

No tienes que conformarte con un solo argumento. También puede extraer rangos de un índice. Todos los argumentos excepto cero están disponibles con un asterisco (*).

$ echo foo bar baz
$ touch !!*
$ ls
foo bar baz

En realidad es un sinónimo de 1-$ (es decir, desde el primer argumento hasta el último argumento). Como era de esperar, puede definir arbitrariamente su rango utilizando esta notación no abreviada. Este ejemplo hace referencia a los argumentos segundo a quinto, ignorando el primero y los dos últimos argumentos:

$ cp foo a.sh spacer.sh rev.bin sync.py baz ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-5
$ ls -l --classify
a.sh*  baz  foo  rev.bin*  spacer.sh*  sync.py*

Si solo necesita excluir la última palabra única de un índice, puede proporcionar un rango sin terminar:

$ cp foo a.sh spacer.sh ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-
$ ls -l --classify
a.sh*  foo  spacer.sh*

Uso de la historia para la velocidad y la precisión

el history El control no siempre consiste en reducir las pulsaciones de teclas. Puedes usar tu Bash history para evitar excluir accidentalmente un archivo o carpeta de una operación importante o escribir mal el nombre de un archivo. Siéntase cómodo con el history Comando para interacciones Bash más robustas.

Artículos de interés

Subir