hash
est une commande intégrée de bash. La table de hachage est une fonctionnalité bash
qui l’empêche de chercher $PATH
chaque fois que vous tapez une commande en mettant en cache les résultats en mémoire. La table est effacée lorsque des événements invalident manifestement les résultats (tels que la modification $PATH
)
La hash
commande est simplement la façon dont vous interagissez avec ce système (pour la raison qui vous semble nécessaire).
Quelques cas d'utilisation:
Comme vous l'avez vu, il affiche le nombre de fois où vous appuyez sur quelle commande si vous le tapez sans argument. Cela peut vous indiquer les commandes que vous utilisez le plus souvent.
Vous pouvez également l'utiliser pour mémoriser des exécutables dans des emplacements non standard.
Exemple:
[root@policyServer ~]# hash -p /lol-wut/whoami whoami
[root@policyServer ~]# whoami
Not what you're thinking
[root@policyServer ~]# which whoami
/usr/bin/whoami
[root@policyServer ~]# /usr/bin/whoami
root
[root@policyServer ~]#
Ce qui pourrait être utile si vous avez juste un seul exécutable dans un répertoire en dehors de $PATH
celui que vous voulez exécuter en tapant simplement le nom au lieu de tout inclure dans ce répertoire (ce qui serait l'effet si vous l'ajoutiez à $PATH
).
Cela dit, un alias peut généralement aussi le faire, et puisque vous modifiez le comportement du shell actuel, il n'est pas mappé dans les programmes que vous lancez. Un lien symbolique vers l'exécutable isolé est probablement l'option préférable ici. hash
est une façon de le faire.
- Vous pouvez l'utiliser pour ne pas mémoriser les chemins de fichiers. Ceci est utile si un nouvel exécutable apparaît dans un
PATH
répertoire précédent ou va mv
quelque part et que vous voulez forcer bash à sortir et à le retrouver au lieu du dernier endroit mémorisé.
Exemple:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# cp /bin/ls /lol-wut
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /bin/ls
[root@policyServer ~]# hash -d ls
[root@policyServer ~]# ls
default.ldif newDIT.ldif notes.txt users.ldif
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /lol-wut/ls
[root@policyServer ~]#
La cp
commande a fait ls
apparaître une nouvelle version de l' exécutable plus tôt dans my, $PATH
mais n'a pas déclenché de purge de la table de hachage. J'avais l'habitude hash -d
de purger sélectivement l'entrée ls
de la table de hachage. Bash a ensuite été obligé de regarder à $PATH
nouveau et quand il l'a fait, il l'a trouvé à l'emplacement le plus récent (plus tôt dans $ PATH qu'il était en cours d'exécution auparavant).
Vous pouvez invoquer sélectivement ce $PATH
comportement "trouver le nouvel emplacement de l'exécutable ", cependant:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
Vous voudriez surtout faire cela si vous vouliez quelque chose en dehors de la table de hachage et que vous ne pouviez pas vous déconnecter à 100%, puis revenir avec succès, ou si vous vouliez conserver certaines modifications que vous avez apportées à votre shell.
Pour vous débarrasser des mappages obsolètes, vous pouvez également faire hash -r
(ou export PATH=$PATH
) simplement purger la table de hachage entière de bash.
Il y a beaucoup de petites situations comme celle-là. Je ne sais pas si je l'appellerais l'une des commandes "les plus utiles", mais elle a quelques cas d'utilisation.