Comment retrouver l'historique des commandes shell depuis la création de la machine?

23

J'ai créé une machine Ubuntu virtualbox il y a quelques semaines et depuis, je travaille sur des projets.

Maintenant, je voudrais trouver la syntaxe de certaines commandes que j'ai tapées dans le terminal il y a une semaine, mais j'ai ouvert et fermé la fenêtre du terminal et redémarré la machine plusieurs fois.

Comment puis-je obtenir la historycommande pour revenir à la première commande que j'ai tapée après avoir créé la machine?
Ou existe-t-il un autre endroit où toutes les commandes sont stockées dans Ubuntu?

Edward Tanguay
la source
2
Pour autant que je sache, vous ne pouvez pas. Vous ne pouvez remonter que dans la mesure où le tampon d'historique a été défini. Si vous demandez quel package vous pourriez installer pour enregistrer indéfiniment l'historique des commandes à l'avenir, vous devriez peut-être réviser votre question.
RobotHumans

Réponses:

26

Il peut ou non être possible d'obtenir toutes les commandes. Cela dépend du nombre de commandes que vous avez exécutées et de la façon dont la limite d'historique a été définie.

Cependant, vous pouvez voir que la liste de l'historique est stockée ici

/home/<YOUR_USERNAME>/.bash_history

Question connexe (pour gérer l'historique de plusieurs shell):

Est-il possible de rendre l'écriture dans .bash_history immédiate?

Web-E
la source
3
Ce n'est pas vrai que l'historique n'est sauvegardé que depuis un terminal / shell. Lorsque vous exécutez history, il affiche l'historique du shell actuel comme le plus récent et l'historique de tous les autres shells (y compris les shells des sessions précédentes, y compris entre les cycles d'alimentation) avant cela. Toutes les instances de shell enregistrent leur historique au .bash_historymoment de la sortie. Aucune instance ne l'enregistre automatiquement avant ce point.
Eliah Kagan
6

Par défaut, il n'y a aucun endroit où toutes les commandes sont enregistrées et conservées indéfiniment, bien qu'elles ~/.bash_historycontiennent les dernières commandes (si vous utilisez bash, qui est le shell par défaut dans Ubuntu).

Si vous voulez que chaque commande tapée soit bashenregistrée pour toujours , vous devez la configurer vous-même. Par exemple, vous pouvez mettre ce qui suit dans votre ~/.bashrcfichier pour enregistrer toutes les commandes tapées dans un bashshell dans le fichier ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

Ce qui précède établit un piège DEBUG, qui est exécuté juste avant l'exécution d'une commande ordinaire. La fonction callerintégrée est utilisée pour tester si la commande est tapée dans un shell interactif ou exécutée via quelque chose comme ~/.bashrc. La valeur ${BASH_COMMAND}contient la commande en cours d'exécution.

Richard Hansen
la source
Je voudrais noter que sur macOS, cette technique enregistre également update_terminal_cwdle fichier historique, qui est une commande que l'utilisateur n'exécute pas, mais s'exécute automatiquement.
Ashish Ahuja
5

Quelque chose qui pourrait également vous intéresser est de savoir comment rechercher dans votre historique de commandes précédent. Vous pouvez inverser la recherche de votre historique sur la ligne de commande en appuyant sur Ctrl+rpuis en tapant les lettres que vous souhaitez faire correspondre. Si vous avez plusieurs commandes correspondantes, appuyez à Ctrl+rnouveau sur. Pour quitter la recherche inversée, appuyez sur Ctrl+g.

http://www.ice2o.com/bash_quick_ref.html

Sepero
la source
4

Vous ne pouvez revenir en arrière que dans la mesure où votre limite d'historique est définie; une fois qu'il aura atteint ce point, l'historique commencera à être écrasé. Cependant, il est possible d'avoir une taille d'historique plus grande pour l'avenir. Mettez ceci dans votre .bashrc et spécifiez une valeur (la mienne est fixée à 1000):

export HISTSIZE=1000

la source