Où le shell bash stocke-t-il la session de terminal réelle? Je veux lire le résultat des commandes que j'ai utilisées auparavant. Tout ce que je peux trouver sur Google, c'est comment stocker le résultat d'une commande.
Puisque la sortie est affichée à l'écran, il faut quand même la stocker quelque part. Donc ma question est: où?
Bash ne stocke que l'historique des commandes que vous avez exécutées (que vous pouvez récupérer en tapant history
name__). Sauf si vous avez déjà définissez le défilement arrière sur un nombre très élevé, il n'existe aucun moyen de voir les sorties plus anciennes que la valeur définie pour le défilement arrière. Définir également cette valeur sur un nombre très élevé rendra votre défilement plus 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:
Utilisation de screen
name __
Démarrez une session écran en entrant screen
name__. Une fois à l’écran, appuyez sur Ctrl-a, puis :, puis entrez log
name__. Toutes les E/S seront capturées dans les fichiers screenlog
du répertoire où vous avez lancé la commande screen
name__.
Utilisation de script
name __
Vous pouvez commencer par taper script
name__. Une session script va démarrer et capturer toutes les E/S dans un fichier nommé TypeScript
name__. Vous pouvez quitter la session script
en Ctrl-d et affichez les journaux dans le fichier TypeScript
name__.
Utilisation de tee
name __
tee est un outil pratique. Vous pouvez faire quelque chose comme ça:
$ bash | tee log.txt
Cela ouvrira un nouveau shell bash dans celui que vous utilisez déjà. Lorsque vous exit
out of this, vous pouvez voir les sorties dans le fichier appelé log.txt
Autres moyens
Comme suggéré par Dustin Kirkland dans this post, vous pouvez également utiliser byob . Bien que, je ne l'ais jamais utilisé, des outils de screencast terminaux tels que Shelr semblent également être une option.
Il y a beaucoup de questions liées à celle-ci, mais elles commencent toutes avec l'hypothèse (à droite) que la sortie n'est pas journalisée.
Donc ma question est: où?
Nulle part: la sortie de Bash (et de tout autre Shell que je sache) n'est pas consignée.
Puisque la sortie est affichée à l'écran, il faut quand même la stocker quelque part.
C’est, mais très probablement pas en clair et pas même sur le disque (bien que cela dépende vraiment de l’émulateur de terminal): très probablement, et du moins dans la plupart des cas, dans un segment de mémoire alloué par l’émulateur de terminal.
Cependant, il est certain qu’il n’est pas enregistré dans un fichier, du moins pas par 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 connecter la sortie du terminal: je vais d'abord mentionner quelque chose dont peu de gens sont conscients, car je n'ai jamais vu personne le mentionner au moins ici sur Ask Ubuntu: Konsole permet de sauver la faire défiler vers un fichier (il existe peut-être d'autres émulateurs de terminaux offrant une telle fonctionnalité, Konsole est le seul que je connaisse), bien que cela soit limité par la taille limite de défilement de Konsole.
Ce n’est souvent pas très utile, cependant, et vous voudrez probablement rechercher des solutions "appropriées" pour enregistrer la sortie d’une session entière dans un fichier ( Comment enregistrer toutes les entrées et les sorties dans une session de terminal? et réponse de Ron ).
Il existe une commande nommée script. Si elle n'est pas installée, apt-get install script
le fera.
Ensuite, dans le terminal, tapez simplement script.
et faites ce que vous voulez, une fois que vous avez terminé, tapez simplement exit, puis un fichier sera créé dans votre répertoire actuel avec toutes les informations stdout et stdin.
espérons que cela vous aide.
Cela n'a rien à voir avec votre shell (bash
name__), ce n'est pas une fonctionnalité de l'émulateur de terminal que vous utilisez. Il est stocké dans le "tampon de défilement" de votre terminal. Je n'ai pas été en mesure de trouver une explication claire de l'endroit où cela est exactement stocké, mais expérience personnelle m'a montré qu'il est stocké quelque part dans /tmp
.
Comme le suggère la réponse à la question 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, pendant que ce fichier est toujours ouvert, ouvrez un terminal et supprimez-le:
rm newfile
Comme le fichier est toujours ouvert dans gedit
name__, vous pouvez continuer à l'écrire. Vous pourriez même y écrire plusieurs giga-octets de données, malgré le fait que le fichier ait é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, bien qu’il n’existe 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 sauvegardé en utilisant une astuce comme celle-ci, quelque part dans un fichier supprimé dans /tmp
. Ce que vous voulez probablement, en réalité, est simplement d’augmenter la taille de la mémoire tampon de défilement de votre émulateur de terminal afin que vous puissiez simplement faire défiler et voir. Les détails de cette opération dépendent de l’émulateur de terminal que vous utilisez. La plupart ont un commutateur de ligne de commande qui vous permet cela et beaucoup ont aussi un moyen de le configurer via une interface graphique. Par exemple, dans gnome-terminal
(la valeur par défaut sous Ubuntu), il faut Éditer -> Préférences -> Profils --- cliquez sur votre profil -> Éditer -> Défilement -> Limiter le défilement à NNN: