Le terminal stocke-t-il des données?

9

C'est quelque chose que je voulais savoir depuis très longtemps, mais jamais venu poser une question.

Je sais que dans le terminal fourni dans les distributions Linux, l'historique complet des commandes peut être vu en utilisant les touches fléchées (s'il existe une autre méthode, je n'en ai pas connaissance), alors comment cela se produit-il?

Y a-t-il un endroit où le terminal enregistre toutes les frappes? Est-ce une sorte de tampon? Mais, encore une fois, s'il s'agissait d'un tampon, il serait effacé après un certain temps, n'est-ce pas?

Comment fonctionne ce système?

Projjol
la source
écrire l'historique pour obtenir toutes les commandes précédemment utilisées.
Sukupa91
L'OP ne pose pas de questions sur la historycommande mais sur le fonctionnement de tout ce système de mémorisation des anciennes commandes.
Tarun
désolé je me suis trompé ..
Sukupa91
2
Attention à cette exception: si la commande commence par un espace, la commande ne se retrouvera pas dans l'historique.
Rinzwind
@Rinzwind, il est ajouté à l'historique s'il est démarré avec un espace.
GC 13

Réponses:

10

C'est l'historique des commandes et c'est une fonctionnalité du shell plutôt que du terminal.

Sur Ubuntu (et beaucoup, sinon la plupart des autres distributions Linux), le shell par défaut pour une utilisation interactive est Bash ( /bin/bash). Bash conserve votre historique, c'est une liste des dernières commandes sur ~/.bash_history. Lorsque vous ouvrez un shell (généralement en ouvrant un terminal), ce fichier est lu et chargé dans l'historique interne de ce shell. Une fois que vous fermez le shell, les modifications sont réécrites dans le fichier. Par défaut, cela est limité aux 500 dernières commandes.

Il y a quelques variables et options de shell qui peuvent changer le comportement de comment cela fonctionne exactement. Jetez un œil à la page de manuel bash ( man bash) si vous voulez en savoir plus. Recherchez simplement HISTORIQUE (tapez /^HISTORYet confirmez avec Enter, passez à la recherche suivante avec n)

Il y a aussi beaucoup plus de méthodes pour faire le tour de l'histoire que juste Upet Down:

  • Par exemple, appuyez sur Ctrl+ Ret une partie d'une commande précédente, bash recherchera en arrière dans l'historique une commande correspondante, répétez en appuyant sur Ctrl+ Rsi la première correspondance n'est pas celle que vous recherchez. (Voir «Commandes de manipulation de l'historique» dans la page de manuel bash)

  • Copier /etc/inputrcvers ~/.inputrcet décommenter les lignes avec history-search-forwardet history-search-backwarden eux. Si vous saisissez les premières lettres d'une commande et appuyez sur PgUp, bash n'affichera que les commandes de l'historique commençant par les mêmes lettres. (Ne fonctionne que dans les coquilles ouvertes après cette modification)

  • Tapez !!au lieu d'une commande sur le shell, cela répétera la dernière commande (voir 'EXPANSION D'HISTORIQUE' dans la page de manuel bash pour plus d'informations à ce sujet).

Adaephon
la source
1
Et si vous ne voulez pas qu'il garde un historique, mettez-le unset HISTFILEdans votre ~ / .bashrc. Ensuite, il ne gardera que l'historique en mémoire, l'effaçant pour chaque nouvelle invocation de shell.
un CVn
10

L'historique des commandes est généralement stocké par utilisateur dans le .bash_historyfichier de votre répertoire personnel. Cela signifie que chaque utilisateur a son propre ensemble de commandes qu'il a exécutées.

Lorsque plusieurs sessions de terminal sont ouvertes, elles peuvent afficher différentes commandes lorsque vous appuyez sur la touche fléchée, mais lorsque vous fermerez toutes les fenêtres de terminal, l'historique des différentes sessions de terminal sera fusionné dans un ~/.bash_historyfichier commun .

Tarun
la source