web-dev-qa-db-fra.com

emplacement du fichier d'historique de la sortie du shell bash

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ù?

12
Daniel Böckenhoff

Bash ne stocke que l'historique des commandes que vous avez exécutées (que vous pouvez récupérer en tapant historyname__). 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 screenname __

Démarrez une session écran en entrant screenname__. Une fois à l’écran, appuyez sur Ctrl-a, puis :, puis entrez logname__. Toutes les E/S seront capturées dans les fichiers screenlogdu répertoire où vous avez lancé la commande screenname__.

Utilisation de scriptname __

Vous pouvez commencer par taper scriptname__. Une session script va démarrer et capturer toutes les E/S dans un fichier nommé TypeScriptname__. Vous pouvez quitter la session scripten Ctrl-d et affichez les journaux dans le fichier TypeScriptname__.

Utilisation de teename __

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 exitout 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.

11
Ron

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 ).

4
kos

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.

1
rɑːdʒɑ

Cela n'a rien à voir avec votre shell (bashname__), 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 geditname__, 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:

gnome-terminal options screen

1
terdon