Comandos y expansiones del historial de Bash

Comandos Y Expansiones Del Historial De Bash



En esta guía, demostraremos cómo trabajar con los comandos del historial de Bash.

requisitos previos:

Para realizar los pasos que se muestran en este tutorial, necesita los siguientes componentes:

  • Un sistema Linux correctamente configurado. Verificar cómo configurar una máquina virtual Ubuntu en VirtualBox .
  • Familiaridad básica con la interfaz de línea de comandos.

Historial de bash

Bash es el shell predeterminado en la mayoría de los sistemas Linux modernos. Como sucesor de “sh”, el shell UNIX original, viene con numerosas características y mejoras como la manipulación de directorios, control de trabajos, alias, historial de comandos y más.







Bash realiza un seguimiento de todos los comandos que se ejecutaron previamente desde la terminal. Esto puede ser increíblemente útil en numerosas situaciones como la depuración. También puede reducir la necesidad de escribir los mismos comandos una y otra vez.



Para la gestión del historial, Bash viene con dos comandos integrados:



$ tipo historia





$ tipo f.c.

Para almacenar el historial, Bash utiliza dos técnicas diferentes:



  • Siempre que se trabaja con una sesión de shell, su historial se almacena en la memoria.
  • Cuando está cerrado, el historial que se almacena en la memoria se vuelca en un archivo de historial.

El archivo de historial predeterminado que utiliza Bash se encuentra en:

$ gato ~ / .bash_history

También hay un puñado de variables de entorno y atajos de teclado que cambian la forma en que Bash maneja el historial.

Trabajar con el historial de Bash

Uso básico

Para obtener la lista de comandos que se ejecutaron recientemente, use el siguiente comando:

$ historia

Aquí, se enumeran todos los comandos que se almacenan en el búfer. Cada comando tiene asignado un valor numérico. El comando más antiguo se asigna con 1.

Podemos limitar el número de comandos a imprimir usando el siguiente comando:

$ historia norte

Aquí, N es un número entero donde N >= 0. La salida contiene los últimos N comandos del historial.

También podemos usar la salida junto con grep para filtrar:

$ historia | agarre < cadena >

Para navegar a través de un historial largo, podemos usar el comando 'menos':

$ historia | menos

Eliminación de comandos del historial

Si necesita eliminar un comando específico del historial, use los siguientes comandos:

$ historia

$ historia -d < número_comando >

$ historia

Del mismo modo, para eliminar los comandos de M a N del historial, podemos usar los siguientes comandos:

$ historia

$ historia -d MINNESOTA

$ historia

Para borrar el historial del búfer de RAM para la sesión de terminal actual, use los siguientes comandos en su lugar:

$ historia -C

$ historia

Para borrar el historial del archivo de historial que está almacenado en el disco, podemos sobrescribirlo completamente con NULL:

$ gato / desarrollador / nulo > $ARCHIVOHIST

Configuración del historial de bash

Hay varias formas de modificar la forma en que Bash maneja el historial. Muchas de estas opciones están gestionadas por variables de entorno.

Para cambiar su valor, editamos el archivo “bashrc”:

$ nano ~ / .bashrc

Después de editar, guarde el archivo y vuelva a cargarlo en Bash.

$ fuente ~ / .bashrc

Para realizar los cambios en todo el sistema, edite el 'bashrc' que se encuentra en las siguientes ubicaciones:

$ nano / etc. / bash.bashrc

$ nano / etc. / bashrc

Tamaño del búfer

Como se mencionó anteriormente, Bash usa dos búferes para almacenar el historial de comandos en la RAM (para la sesión actual) y en un archivo de disco (para todas las sesiones anteriores).

Los tamaños de estos búferes están controlados por dos variables de entorno:

  • TAMAÑO HISTORICO : Define el número de entradas a almacenar en el búfer RAM.
  • TAMAÑOARCHIVOHIST : Define el número de entradas a almacenar en el archivo del disco.

Podemos cambiar su valor en el 'bashrc' para que se ajuste a nuestras necesidades:

$ nano ~ / .bashrc

Por ejemplo, para almacenar 5000 entradas en ambos búferes, actualice 'bashrc' con el siguiente código:

$ TAMAÑO HISTORICO = 5000

$ TAMAÑOARCHIVOHIST = 5000

Exclusión de comandos

De forma predeterminada, Bash almacena todos los comandos que se ejecutan en los búferes de historial. Sin embargo, podemos configurarlo para que Bash ignore ciertos comandos. Puede ser útil en situaciones en las que tiene que ejecutar los mismos comandos varias veces, llenando el búfer con spam.

  • CONTROL HIST

Comencemos con el siguiente ejemplo de comando:

$ eco 'monje' && historia 5

$ eco 'bonk' && historia 5

Como demuestra la salida del comando history, solo se registra el primer comando echo, pero no el segundo.

Este es el funcionamiento de la variable de entorno HISTIGNORE. Le dice a Bash que no registre los comandos en el búfer de historial según ciertos patrones. Están disponibles los siguientes valores:

  • ignorados : No se registra si un comando coincide con la entrada del historial anterior.
  • ignorar el espacio : No se registrará si un comando comienza con un espacio al principio.
  • ignorarambos : Aplica la regla de ignoreups e ignorespace.
  • borrados : Todas las líneas anteriores que coincidan con el comando actual se borrarán del historial.

En el primer ejemplo, demostramos el uso de ignorespace. Sin embargo, no todas las distribuciones pueden enviar Bash con esta configuración. Como siempre, podemos agregarlos a “bashrc”:

$ CONTROL HIST = ignorar ambos

También es posible habilitar múltiples opciones usando el siguiente comando:

$ CONTROL HIST =ignoredups:ignorarespacio

Aquí, ignoreups:ignorespace es el equivalente de ignoreboth.

  • HISTORIA

Esta variable de entorno puede contener uno o más patrones. Cualquier comando que coincida con cualquier patrón descrito por HISTIGNORE no se registrará en ningún búfer de historial. Los patrones se definen utilizando las expresiones regulares.

La estructura es la siguiente:

$ HISTORIA = '' : '' : ''

Por ejemplo, para excluir los comandos history y echo del historial de Bash, actualice HISTIGNORE de la siguiente manera:

$ HISTORIA = 'historia' : 'eco *'

Podemos usar la siguiente cadena de comandos para probarlo:

$ ls -l / era / lob &> / desarrollador / nulo

$ historia

$ eco Hola Mundo

$ historia

Marcando la hora

Bash también se puede configurar para registrar la hora en que se ejecutó un comando. Puede ser útil en varias situaciones como la depuración.

Para habilitar las marcas de tiempo en el historial de Bash, actualice el valor de HISTTIMEFORMAT:

$ FORMATO HORA HIST = ''

Todos los caracteres de control de formato de hora disponibles están disponibles en la página de manual del comando de fecha.

$ hombre fecha

La siguiente lista incluye algunos simples:

  • %T: Tiempo
  • %d: día
  • %m: Mes
  • %y: Year
$ FORMATO HORA HIST = '%T%d:'

Persistencia de la historia

Cuando trabaje con la CLI, en muchos casos, se encontrará trabajando con múltiples terminales. Aquí es donde la gestión del historial de Bash puede convertirse en una fuente de dolor.

De forma predeterminada, el archivo de historial se actualiza una vez que se cierra la sesión. Si bien está bien para una sola sesión, no es adecuado para varias sesiones simultáneas. Podemos resolver este problema obligando a Bash a actualizar el archivo de historial cada vez que se ejecuta un comando.

Para hacerlo, actualice el valor de PROMPT_COMMAND:

$ PROMPT_COMMAND = 'historia -a'

Aquí, la variable PROMPT_COMMAND puede contener comandos válidos. El contenido de PROMPT_COMMAND se ejecuta antes de que Bash comience a tomar la entrada del usuario. El comando “history –a” obliga al historial a agregar el contenido al archivo de historial.

Expansión de historial y designadores

Bash viene con un par de atajos incorporados para aprovechar su función de historial. Aquí está la lista de los designadores:

  • !! : Ejecuta el último comando del historial.
  • !NORTE : Ejecuta el comando Nth del historial.
  • !-NORTE : Ejecuta el comando N antes del comando más reciente del historial.
  • ! : ejecuta el comando más reciente.

La siguiente cadena de comandos demuestra su uso:

$ eco 1

$ eco 2

$ eco 3

$ historia

$ ! eco

$ ! - 3

$ ! 1

$ !!

Algunos designadores también funcionan con los argumentos de comando del historial:

  • !:* : Usa todos los argumentos del comando más reciente.
  • !:^ : utilice el primer argumento del comando más reciente.
  • !:NORTE : utilice el argumento N del comando más reciente.
  • !:MINNESOTA : utilice los argumentos de M a N del comando más reciente.
  • !:$ : Utilice el último argumento del comando más reciente.

La siguiente cadena de comandos demuestra su uso:

$ eco 1 2 3 4 5 6 7

$ eco ! : *

$ eco 1 2 3 4 5 6 7

$ eco ! :^

$ eco 1 2 3 4 5 6 7

$ eco ! : 5

$ eco 1 2 3 4 5 6 7

$ eco ! : 1 - 5

$ eco 1 2 3 4 5 6 7

$ eco ! :$

Si necesita trabajar con los parámetros de un comando diferente, los designadores se ven así:

  • !^ : Utiliza el primer argumento del comando .
  • !$ : utiliza el último argumento del comando .

La siguiente cadena de comandos demuestra sus usos:

$ ls -lh / era / registro &> / desarrollador / nulo

$ tocar 1 .TXT 2 .TXT 3 .TXT 4 .TXT 5 .TXT

$ eco ! tocar ^

$ eco ! tocar $

Atajos de teclado de historial

Además de todos los comandos y variables de entorno, Bash también admite varios atajos de teclado para facilitar la navegación por el historial:

  • Arriba tecla de flecha: desplazarse hacia atrás
  • Abajo tecla de flecha: desplazarse hacia adelante

También hay atajos de teclado que están disponibles para una búsqueda de historial interactivo:

  • Control + R : busca comandos en el historial.
  • Control + O : ejecuta el comando seleccionado.
  • Control + G : Salga de la búsqueda interactiva.

Conclusión

Discutimos sobre la historia de Bash en detalles. Aprendimos cómo Bash almacena el historial de comandos y cómo aprovecharlo de diferentes maneras. Demostramos cómo trabajar con el historial de Bash usando varios ejemplos.

¿Interesado en aprender más sobre Bash? El Subcategoría de programación Bash contiene cientos de guías sobre diferentes funciones de Bash.

¡Feliz computación!