Linux / Commande / history / Commande pour afficher une liste des commandes précédemment exécutées

Sous Linux, la commande history dans Bash affiche l'historique des commandes géré par le shell actuel avec des numéros. Vous pouvez vérifier l'historique pour retrouver des commandes précédentes ou les réexécuter, et la portée et l'enregistrement de l'historique dépendent des paramètres du shell.

Vérification de l'historique des commandes

Entrez la commande suivante dans un terminal Bash interactif. history est une commande intégrée de Bash qui affiche la liste de l'historique du shell actuel.

history

La sortie montre le numéro et la commande de chaque élément. Par exemple, une ligne affichant 42 pwd signifie que l'élément numéro 42 dans l'historique du shell est pwd. Les numéros et le contenu varient en fonction du compte, de la session et des paramètres de l'historique, donc ne pas utiliser directement les numéros d'exemple. La commande que vous saisissez est enregistrée, pas le résultat de l'exécution.

Pour afficher uniquement les éléments récents, spécifiez un nombre. La commande suivante affiche les 10 dernières entrées de l'historique.

history 10

Cette commande history 10 elle-même peut être incluse dans la liste. Si la commande souhaitée n'apparaît pas, vérifiez la fonction historique, la taille de stockage et les paramètres d'exclusion.

Rechercher et réexécuter des commandes

Dans l'entrée interactive par défaut de Bash, appuyer sur la flèche vers le haut permet de rappeler et de modifier les entrées précédentes. Appuyez sur Ctrl+R et saisissez un terme de recherche pour rechercher l'historique en arrière. Vous pouvez vérifier le contenu de la commande trouvée, puis l'exécuter ou la modifier.

Dans Bash interactif avec l'expansion de l'historique activée, !! se développe en l'entrée précédente de l'historique. !n fait référence à l'élément portant le numéro n dans la liste. Par exemple, la commande suivante exécute l'élément si le numéro 42 se trouve dans la liste actuelle.

!42

Assurez-vous d'abord que le numéro correspond à l'historique réel. L'expansion de l'historique s'exécute généralement immédiatement après la saisie, il faut donc être particulièrement prudent avec des commandes comme la suppression de fichiers ou les modifications de configuration. Dans les shells non interactifs, l'expansion de l'historique est généralement désactivée par défaut, et le comportement peut différer dans d'autres shells.

Pour simplement voir le résultat de l'expansion de l'entrée précédente sans l'exécuter, enveloppez-la entre guillemets simples et saisissez-la comme suit. La commande affichée à l'écran ne sera pas exécutée.

history -p '!!'

Si vous définissez shopt -s histverify, la commande développée sera affichée sur la ligne d'édition dans un Bash interactif utilisant Readline, vous permettant de la vérifier avant l'exécution. Pour revenir aux paramètres dans le shell actuel, utilisez shopt -u histverify. Pour plus de détails, consultez documentation de l'expansion de l'historique Bash .

Où et quand l'historique est sauvegardé

Bash gère l'historique comme une liste en mémoire et lit l'historique à partir du fichier spécifié par HISTFILE au démarrage. Le fichier par défaut typique est ~/.bash_history, mais cela peut varier en fonction de l'environnement ou du mode POSIX. Vous pouvez vérifier les paramètres actuels avec la commande suivante.

printf '%s\n' "$HISTFILE"

Lorsqu'un shell avec historique actif se ferme, celui-ci est sauvegardé dans un fichier, mais si le fichier n'est pas accessible en écriture, HISTFILE n'est pas défini, ou est vide, il ne sera pas sauvegardé. Plusieurs terminaux ont chacun des historiques mémoire séparés, donc les commandes exécutées dans l'un peuvent ne pas apparaître immédiatement dans un autre. Selon l'option histappend, l’historique sera ajouté au fichier ou le fichier sera écrasé à la fermeture, et le résultat varie selon les paramètres et les sessions simultanées.

history -a ajoute de nouvelles entrées qui n'ont pas encore été ajoutées dans la session en cours au fichier d'historique. D'un autre côté, history -w écrase le fichier d'historique avec la liste actuelle, ce qui peut entraîner la perte de l'historique d'autres sessions. Si vous utilisez plusieurs terminaux, vérifiez cette différence avant de l'utiliser. Le comportement de sauvegarde peut être consulté dans la documentation de la fonction d'historique Bash.

Vérifier la taille de l'historique et les paramètres d'exclusion

HISTSIZE contrôle le nombre d'entrées d'historique en mémoire, tandis que HISTFILESIZE contrôle le nombre maximum de lignes dans le fichier d'historique. Les entrées multi-lignes sont des exceptions au comptage des lignes dans le fichier. Les valeurs actuelles peuvent être vérifiées comme suit.

printf 'HISTSIZE=%s\nHISTFILESIZE=%s\nHISTCONTROL=%s\nHISTIGNORE=%s\n' "$HISTSIZE" "$HISTFILESIZE" "$HISTCONTROL" "$HISTIGNORE"

HISTCONTROL et HISTIGNORE peuvent déterminer quels inputs exclure de l'historique. Par exemple, si HISTCONTROL inclut ignorespace, un input commençant par un espace peut être exclu de la liste de l'historique. Il s'agit uniquement d'un paramètre lié à l'historique du shell et n'efface pas l'historique présent dans d'autres journaux ou programmes.

Suppression de l'historique et des informations sensibles

history -d n supprime l'élément numéro n de la liste de l'historique du shell actuel. Tout d'abord, vérifiez le numéro réel avec history. history -c efface l'intégralité de la liste actuelle, il doit donc être utilisé avec précaution. Ces deux commandes n'effacent pas automatiquement le fichier d’historique déjà enregistré ni les listes des autres shells.

Évitez de saisir des mots de passe ou des jetons directement dans la ligne de commande, car ils peuvent rester dans l'historique ou ailleurs. Si des informations secrètes ont déjà été exposées, ne supposez pas que la simple suppression de l'historique résout le problème ; remplacez plutôt les identifiants et vérifiez l'étendue de l'exposition liée.