ubicación del archivo de historial de salida de bash shell

13

¿Dónde almacena bash shell la sesión de terminal real? Quiero leer la salida de los comandos que usé antes. Todo lo que puedo encontrar en Google es cómo almacenar la salida de un comando.

Como la salida se muestra en la pantalla, debe almacenarse en algún lugar de todos modos. Entonces mi pregunta es: ¿dónde?

Daniel Böckenhoff
fuente

Respuestas:

11

Bash solo almacena el historial de los comandos que ejecutó (que puede recuperar escribiendo history). A menos que ya haya configurado el desplazamiento hacia atrás en un número muy alto, no hay forma de ver las salidas que son más antiguas que el valor establecido de desplazamiento hacia atrás. También establecer este valor en un número muy alto hará que su desplazamiento sea lento ya que las líneas se almacenan en la memoria .

Para almacenar sus futuros comandos y sus salidas, hay pocas opciones:

Utilizando screen

Inicie una sesión de pantalla ingresando screen. Una vez que esté dentro de la pantalla, presione Ctrl- a, luego :, luego ingrese log. Todas las E / S se capturarán en screenlogarchivos en el directorio donde inició el screencomando.

Utilizando script

Puedes comenzar escribiendo script. Se iniciará una sesión de script que capturará todas las E / S en un archivo llamado typescript. Puede salir de la scriptsesión por Ctrl- d y ver los registros en el typescriptarchivo.

Utilizando tee

tee es una herramienta útil. Puedes hacer algo como esto:

$ bash | tee log.txt

Esto abrirá un nuevo shell bash dentro del que ya está ejecutando. Cuando exitsalgas de esto, puedes ver las salidas en el archivo llamadolog.txt

Otras maneras

Como Dustin Kirkland sugirió en esta publicación, también puedes usar byobu . Aunque, nunca lo he usado, las herramientas de transmisión de pantalla de terminal como Shelr también suenan como una opción.

Ron
fuente
6

Hay muchas preguntas relacionadas con esta, pero todas comienzan con la suposición (derecha) de que la salida no está registrada.

Entonces mi pregunta es: ¿dónde?

En ninguna parte: la salida de Bash (y cualquier otro shell que conozca) no se registra.

Como la salida se muestra en la pantalla, debe almacenarse en algún lugar de todos modos.

Lo es, pero probablemente no en texto plano y ni siquiera en el disco (aunque esto realmente depende del emulador de terminal): lo más probable, y al menos en la mayoría de los casos, en un segmento de memoria asignado por el emulador de terminal.

Sin embargo, seguro que no está registrado en un archivo, al menos no por el shell, y no conozco emuladores de terminal que registren la salida a un archivo de forma predeterminada.

De hecho, esto no significa que sea imposible registrar la salida del terminal: primero mencionaré algo que creo que no muchos conocen, ya que nunca he visto a nadie mencionar esto al menos aquí en Ask Ubuntu: Konsole permite guardar el Desplazarse hacia atrás a un archivo (quizás haya otros emuladores de terminal que brinden dicha funcionalidad, Konsole es el único que conozco), aunque esto está limitado por el límite de tamaño de desplazamiento hacia atrás de Konsole.

Sin embargo, esto a menudo no es realmente útil, y lo más probable es que desee buscar soluciones "adecuadas" para registrar la salida de una sesión completa en un archivo ( ¿Cómo registro todas las entradas y salidas en una sesión de terminal? Y la respuesta de Ron ).

kos
fuente
1

Hay un comando llamado script, si no está instalado, apt-get install scriptlo haría.

Luego, en la terminal, simplemente escriba script.

y haga lo que quiera, una vez que haya terminado, simplemente escriba exit y luego se creará un archivo en su directorio actual con toda la información stdout y stdin.

Espero que te ayude.

rɑːdʒɑ
fuente
El paquete es NA en ubuntu 18.04
markroxor
1

Esto no tiene nada que ver con su shell ( bash), no es una característica del emulador de terminal que está utilizando. Se almacena en el "búfer de desplazamiento hacia atrás" de su terminal. No he podido encontrar ninguna explicación clara de dónde se almacena exactamente esto, pero la experiencia personal me ha demostrado que está almacenado en algún lugar /tmp.

Como sugiere la respuesta de la pregunta vinculada a lo anterior, lo más probable es que se almacene en un archivo sin nombre. Para ver a qué me refiero, abra un nuevo archivo con un editor de texto:

gedit newfile

Escriba una línea de texto en el archivo y guárdelo. Ahora, mientras ese archivo aún está abierto, abra una terminal y elimínelo:

rm newfile

Como todavía tiene el archivo abierto gedit, puede continuar escribiendo en él. Incluso podría escribir varios gigabytes de datos en él, a pesar de que el archivo ha sido eliminado. Esto se debe a que eliminar un archivo simplemente elimina el enlace que apunta a su inodo . Si otro programa mantiene abierto su descriptor de archivo , se pueden escribir datos en él, a pesar del hecho de que ya no hay un enlace (archivo) real correspondiente al descriptor de archivo en el sistema de archivos.

Todo esto es para decir que el historial de su terminal probablemente se guarda usando un truco como ese, en algún lugar de un archivo eliminado /tmp. Lo que probablemente desee es simplemente aumentar el tamaño del búfer de desplazamiento hacia atrás del emulador de terminal para que pueda desplazarse hacia arriba y verlo. Los detalles de cómo hacerlo dependen del emulador de terminal que esté utilizando. La mayoría tiene un interruptor de línea de comando que te permite esto y muchos también tienen una forma de GUI de configurarlo. Por ejemplo, en gnome-terminal(el valor predeterminado en Ubuntu) es Editar -> Preferencias -> Perfiles --- haga clic en su perfil -> Editar -> Desplazamiento -> Limitar el desplazamiento hacia atrás a NNN:

pantalla de opciones del terminal gnome

terdon
fuente
Perspectiva interesante Sin embargo, inspeccionar una historia más larga en la terminal no es lo que quiero: quiero tener acceso a la cout a la terminal, es decir, todo lo que se ha escrito allí DESDE EG PYTHON
Daniel Böckenhoff
@ DanielBöckenhoff, entonces probablemente quieras scriptcomo se describe en la respuesta aceptada.
terdon
Seguro. Lo acepté :)
Daniel Böckenhoff
-2

La sesión de terminal se almacena en el .bash_historyarchivo. Ingrese esto en su terminal echo $HISTFILE, esto le daría la ruta del .bash_historyarchivo.

user532036
fuente
2
Esto proporciona solo los comandos ejecutados anteriormente , no la salida de los comandos.
Ron