Vous savez probablement utiliser les touches fléchées haut et bas pour faire défiler votre historique Bash, mais saviez-vous que l'historique Bash ne se limite pas à répéter des commandes ? Il y a beaucoup plus dans l'histoire. Ou, cela devrait-il être beaucoup plus à l'histoire ? Dans les deux cas, la commande d'historique est l'une de ces commandes obscures qui sont puissantes et pratiques à connaître au moins à un niveau de base. Cet article démystifiera l'historique de Bash pour en faire un outil d'administration système plus convivial.
Le fond
Dans Bash, votre historique de commandes est stocké dans un fichier (.bash_history
) dans votre répertoire personnel. Le début (.) rend le fichier masqué de la vue normale. Pour le voir, émettez le ls -a
commande.
$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc
Vous pouvez opérer sur le fichier .bash_history comme vous le feriez avec n'importe quel autre fichier texte ASCII brut.
Les trois variables d'environnement associées dont vous devez être conscient sont HISTFILE, HISTFILESIZE et HISTSIZE.
- HISTFILE—/home/
/.bash_history - HISTFILESIZE—1000
- HISTSIZE—1 000
La variable HISTFILE contient le nom et l'emplacement de votre fichier d'historique Bash. HISTFILESIZE est le nombre de commandes pouvant être stockées dans le .bash_history
dossier. HISTSIZE est le nombre de commandes mises en cache. Une fois que vous atteignez 1000 commandes, les commandes les plus anciennes seront supprimées au fur et à mesure que les nouvelles seront enregistrées.
$ echo $HISTSIZE
1000
$ echo $HISTFILESIZE
1000
$ echo $HISTFILE
/home/khess/.bash_history
Ces variables et tailles sont attribuées par défaut à chaque utilisateur, y compris root. Si vous souhaitez modifier ces variables, modifiez le fichier .bashrc dans votre répertoire personnel. Par exemple, si vous souhaitez modifier les variables de taille en 500 commandes, modifiez le .bashrc
fichier et utilisez les entrées suivantes :
export HISTSIZE=500
export HISTFILESIZE=500
Pour utiliser les nouvelles valeurs sans vous déconnecter et vous reconnecter, vous pouvez exécuter le .bashrc
fichier.
$ . ~/.bashrc
Vos valeurs sont maintenant actives pour votre shell actuel et tous les sous-shells.
$ echo $HISTSIZE
500
$ echo $HISTFILESIZE
500
Si vous ne souhaitez pas que votre historique conserve les commandes en double, vous pouvez demander à votre historique d'ignorer les entrées en double en ajoutant ce qui suit à votre fichier .bashrc :
export HISTCONTROL=ignoredups
Le problème
Le problème avec l'historique de Bash est qu'il n'est pas écrit dans le .bash_history
fichier jusqu'à ce que vous vous déconnectiez. Cela rend impossible l'utilisation de la commande history pour les scripts. Par exemple, supposons que vous enseignez un cours Linux et que vous souhaitiez vérifier si les élèves ont exécuté une commande particulière pour copier leurs fichiers sur un lecteur externe monté. Si l'élève reste connecté au système, vous ne pourrez pas déterminer si la copie a été effectuée, car votre script utilise son fichier d'historique (/home/student/.bash_history) pour vérifier si la commande a été exécutée.
La solution
Pour contourner cette fonctionnalité, utilisez la commande write option pour l'history
commande. Dans le cadre de l'instruction en classe, vous demanderez aux élèves d'exécuter cette commande pour enregistrer leur historique même s'ils ne se déconnectent pas.
$ history -w
Cela écrit tout l'historique des commandes de la session en cours dans le HISTFILE. Et maintenant, votre script de vérification peut facilement trouver si la commande a été exécutée. Vous devez également être sûr que l'élève exécutera la commande d'historique.
[Consultez la leçon d'histoire de Seth Kenlon : Rendez l'historique de Bash plus utile grâce à ces conseils]
Un autre problème
Étant donné que HISTSIZE et HISTFILESIZE sont relativement volumineux (1 000 commandes), il est possible que l'étudiant ait exécuté la commande auparavant. Vous pouvez ajouter l'entrée export HISTCONTROL=ignoredups dans leur .bashrc, mais cela n'aidera pas si l'étudiant a exécuté une commande similaire il y a deux jours, car le fichier n'affichera qu'une seule commande.
La solution à ce problème
Pour contourner ce problème, vous devez effacer l'historique de l'étudiant lors de la connexion. Modifiez à nouveau le fichier .bashrc et ajoutez-y la commande suivante.
history -c
Cette commande efface leur historique à chaque connexion et supprime le problème de récupération d'une commande précédemment exécutée. Vous n'avez pas à vous soucier de récupérer une commande des sessions précédentes car le système déconnecte les utilisateurs inactifs après une période de temps spécifiée si vous définissez la limite de temps d'inactivité dans /etc/profile
. Modifiez le /etc/profile
fichier et ajoutez l'entrée suivante.
TMOUT=300
La variable TMOUT utilise un certain nombre de secondes de temps d'inactivité. Dans ce cas, 300 secondes correspondent à cinq minutes. Vous pouvez définir cette valeur sur n'importe quel nombre de secondes. Cette valeur prendra effet à la prochaine connexion pour tous utilisateurs. Pour définir des valeurs de délai d'expiration individuelles, utilisez .bashrc
mais sachez que les utilisateurs peuvent modifier ce fichier à volonté.
[ Télécharger maintenant :Un guide de l'administrateur système sur les scripts Bash. ]
Récapitulez
L'historique de Bash est un outil pratique, mais il peut être frustrant si vous n'êtes pas familier avec ses options et ses bizarreries. Il y a beaucoup plus d'options disponibles dans l'histoire. Consultez les pages de manuel pour plus d'informations. Et rappelez-vous que chaque commande que vous entrez est une histoire en devenir.