emplacement du fichier d'historique de sortie du shell bash

13

Où le shell bash stocke-t-il la session de terminal réelle? Je veux lire la sortie des commandes que j'ai utilisées auparavant. Tout ce que je peux trouver sur Google, c'est comment stocker la sortie d'une commande.

Étant donné que la sortie est affichée à l'écran, elle doit de toute façon être stockée quelque part. Ma question est donc: où?

Daniel Böckenhoff
la source

Réponses:

11

Bash ne stocke que l'historique des commandes que vous avez exécutées (que vous pouvez récupérer en tapant history). Sauf si vous avez déjà défini le défilement arrière sur un nombre très élevé, il n'y a aucun moyen de voir les sorties plus anciennes que la valeur définie de défilement arrière. Le fait de définir cette valeur sur un nombre très élevé rendra votre défilement lent car les lignes sont stockées dans la mémoire .

Pour stocker vos futures commandes et leurs sorties, il y a peu d'options:

En utilisant screen

Démarrez une session écran en entrant screen. Une fois que vous êtes à l'intérieur de l'écran, appuyez sur Ctrl- a, puis :, puis entrez log. Toutes les E / S seront capturées dans des screenlogfichiers dans le répertoire où vous avez démarré la screencommande.

En utilisant script

Vous pouvez commencer par taper script. Une session de script va démarrer qui capturera toutes les E / S dans un fichier nommé typescript. Vous pouvez quitter la scriptsession en Ctrl- d et afficher les journaux dans le typescriptfichier.

En utilisant tee

tee est un outil pratique. Vous pouvez faire quelque chose comme ça:

$ bash | tee log.txt

Cela ouvrira un nouveau shell bash à l'intérieur de celui que vous exécutez déjà. Lorsque vous exitsortez de cela, vous pouvez voir les sorties dans le fichier appelélog.txt

D'autres moyens

Comme Dustin Kirkland l'a suggéré dans ce post, vous pouvez également utiliser byobu . Bien que je ne les ai jamais utilisés, les outils de screencasting de terminaux tels que Shelr semblent également être une option.

Ron
la source
6

Il y a beaucoup de questions liées à celle-ci, mais elles commencent toutes par l'hypothèse (à droite) que la sortie n'est pas enregistrée.

Ma question est donc: où?

Nulle part: la sortie de Bash (et de tout autre shell que je connaisse) n'est pas enregistrée.

Étant donné que la sortie est affichée à l'écran, elle doit de toute façon être stockée quelque part.

C'est, mais probablement pas en texte brut et même pas sur le disque (bien que cela dépend vraiment de l'émulateur de terminal): très probablement, et au moins dans la plupart des cas, dans un segment de mémoire alloué par l'émulateur de terminal.

Cependant, pour sûr, il n'est pas enregistré dans un fichier, du moins pas par le shell, et je ne connais pas d'émulateurs de terminaux qui enregistrent la sortie dans un fichier par défaut.

En effet, cela ne signifie pas qu'il est impossible de consigner la sortie du terminal: je mentionnerai d'abord quelque chose que je pense que peu de gens connaissent, car je n'ai jamais vu personne le mentionner au moins ici sur Ask Ubuntu: Konsole permet de sauvegarder le faire défiler vers un fichier (il existe peut-être d'autres émulateurs de terminaux qui offrent une telle fonctionnalité, Konsole est juste le seul que je connaisse), bien que cela soit limité par la limite de taille de défilement de Konsole.

Cependant, cela n'est souvent pas vraiment utile, et vous voudrez probablement rechercher des solutions "appropriées" pour enregistrer la sortie d'une session entière dans un fichier ( comment puis-je enregistrer toutes les entrées et sorties dans une session de terminal? Et la réponse de Ron ).

kos
la source
1

Il existe une commande nommée script, si elle n'est pas installée, elle le apt-get install scriptferait.

Ensuite, dans le terminal, tapez simplement script.

et faites ce que vous voulez, après avoir terminé, tapez simplement exit et puis il y aura un fichier créé dans votre répertoire actuel avec toutes les informations stdout et stdin.

j'espère que cela vous aide.

rɑːdʒɑ
la source
Le package est NA dans Ubuntu 18.04
Markroxor
1

Cela n'a rien à voir avec votre shell ( bash), ce n'est pas une fonction de l'émulateur de terminal que vous utilisez. Il est stocké dans le "tampon de défilement" de votre terminal. Je n'ai pas pu trouver d'explications claires sur l'endroit exact où ces informations sont stockées, mais mon expérience personnelle m'a montré qu'elles sont stockées quelque part /tmp.

Comme le suggère la réponse à la question liée ci-dessus, il est très probablement stocké dans un fichier sans nom. Pour voir ce que je veux dire, ouvrez un nouveau fichier avec un éditeur de texte:

gedit newfile

Écrivez une ligne de texte dans le fichier et enregistrez-le. Maintenant, alors que ce fichier est toujours ouvert, ouvrez un terminal et supprimez-le:

rm newfile

Étant donné que le fichier est toujours ouvert gedit, vous pouvez continuer à y écrire. Vous pouvez même y écrire plusieurs gigaoctets de données, malgré le fait que le fichier a été supprimé. En effet, la suppression d'un fichier supprime simplement le lien pointant vers son inode . Si son descripteur de fichier est maintenu ouvert par un autre programme, des données peuvent y être écrites, malgré le fait qu'il n'y a plus de lien (fichier) correspondant au descripteur de fichier sur le système de fichiers.

Tout cela pour dire que l'historique de votre terminal est probablement enregistré à l'aide d'une astuce comme celle-ci, quelque part dans un fichier supprimé dans /tmp. Ce que vous voulez probablement, c'est simplement augmenter la taille du tampon de défilement de votre émulateur de terminal afin que vous puissiez simplement faire défiler vers le haut et le voir. Les détails sur la façon de procéder dépendent de l'émulateur de terminal que vous utilisez. La plupart ont un commutateur de ligne de commande qui vous permet de le faire et beaucoup ont également une manière graphique de le configurer. Par exemple, dans gnome-terminal(la valeur par défaut sur Ubuntu), c'est Édition -> Préférences -> Profils --- cliquez sur votre profil -> Édition -> Défilement -> Limiter le retour à NNN:

écran d'options de gnome-terminal

terdon
la source
Aperçu intéressant. Inspecter une histoire plus longue dans le terminal n'est pas ce que je veux cependant: je veux avoir accès au cout au terminal c'est-à-dire tout ce qui y a été écrit DE EG PYTHON
Daniel Böckenhoff
@ DanielBöckenhoff alors vous voulez probablement scriptcomme décrit dans la réponse acceptée.
terdon
Sûr. Je l'ai accepté :)
Daniel Böckenhoff
-2

La session du terminal est stockée dans un .bash_historyfichier. Entrez ceci dans votre terminal echo $HISTFILE, cela vous donnera le chemin du .bash_historyfichier.

user532036
la source
2
Cela donne uniquement les commandes précédemment exécutées , pas la sortie des commandes.
Ron