the stored run previous logs log commands bash_history are bash shell history

bash - stored - logs history linux



¿Cómo puedo ver toda la historia de bash? (5)

Primero déjame mostrarte un ejemplo abajo.

En shell (1) hice el siguiente comando.

$ ping google.com PING google.com (74.125.235.164) 56(84) bytes of data. 64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=1 ttl=54 time=2.85 ms 64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=2 ttl=54 time=3.42 ms

Y después de eso, abre otro shell (2) y mira la historia.

$ history . . . 8720 exit 8721 clear 8722 history

En este caso, el shell no puede ver el historial ejecutado por el shell (1), pero quiero ver todo el historial de bash en cada shell.

Entonces mi pregunta es ¿cómo puedo ver toda la historia de bash? ¿Alguien sabe como hackear?

¡Muchas gracias por adelantado!


Como muchos han señalado, debe utilizar shopt -s histappend . Verifique ejecutando shopt y verificando que histappend esté ''activado''.

Para asegurarse de que cada comando (a través de múltiples shells concurrentes) aparezca en el historial de cada uno de esos shells, agregue esto al final de su archivo .bashrc:

# Skip if not an interactive shell if [ -z "${PS1}" ]; then return; fi export PROMPT_COMMAND="history -a; history -c, history -r; ${PROMPT_COMMAND}

-a: agrega las nuevas líneas del historial (líneas del historial ingresadas desde el inicio de la sesión actual de Bash) al archivo del historial.

-c: borra la lista de historial.

-r: lee el archivo de historial actual y agrega su contenido a la lista de historial.

Ejecute source .bashrc o cree nuevas sesiones y en varias ventanas de terminal ingrese el comentario #Tn en cada una. Luego, en una terminal, ingrese en la history | tail -N history | tail -N para ver las últimas n lineas. Debería ver todos los comentarios ingresados ​​en los diferentes terminales.

Puede ser útil agregar lo siguiente a /etc/profile.d/bashrc.sh para obtener una marca de tiempo en cada línea del historial:

if [ -z "${PS1}" ]; then return; fi export HISTTIMEFORMAT=''%F %T ''

El resultado se ve así:

[moi@laBoheme ~]$ history | tail -4 3292 2019-01-22 12:41:27 # T1 3293 2019-01-22 12:41:34 # T2 3294 2019-01-22 12:41:42 # T3 3295 2019-01-22 12:41:50 history | tail -4


Debes buscar en la opción de shell histappend y en el indicador -a al history :

histappend

Si se establece, la lista del historial se agrega al archivo nombrado por el valor de la variable HISTFILE cuando el shell se cierra, en lugar de sobrescribir el archivo.

history

-a Agregue las "nuevas" líneas de historial (líneas de historial ingresadas desde el inicio de la sesión de bash actual) al archivo de historial.

Si coloca el history -a en su PROMPT_COMMAND , obtendrá un archivo .bash_history actualizado.


Puede instalar algo como Advanced Shell History, que registrará cada comando en una base de datos sqlite3. Viene con una herramienta para consultar la base de datos desde la línea de comandos. https://github.com/barabo/advanced-shell-history

Con esta configuración, tendrá una vista unificada del historial de comandos en todas las sesiones. También obtiene elementos como el historial de comandos para el directorio de trabajo actual (o subárbol), el código de salida del comando, la duración del comando, etc.

Revelación completa: escribí y mantengo la herramienta.



cat ~/.bash_history

También funcionaría, aunque tiendo a usar solo

vim ~/.bash_history

y luego use / para buscar