GNU/Linux >> Tutoriels Linux >  >> Linux

Le but de la commande de hachage ?

Si vous exécutez hash il montre le chemin de toutes les commandes exécutées depuis la dernière réinitialisation du hachage (hash -r )

[[email protected] ~]# hash
hash: hash table empty

[[email protected] ~]# whoami
root

[[email protected] ~]# hash
hits    command
   1    /usr/bin/whoami

[[email protected] ~]# whoami
root

[[email protected] ~]# hash
hits    command
   2    /usr/bin/whoami

Selon les pages de manuel, le but du hachage est :

L'utilitaire /usr/bin/hash affecte la façon dont l'environnement shell actuel
se souvient des emplacements des utilitaires trouvés.
Selon les arguments spécifiés, il ajoute les emplacements des utilitaires
à sa liste d'emplacements mémorisés ou il purge le
contenu de la liste. Lorsqu'aucun argument n'est spécifié, il
rapporte le contenu de la liste. Le -r fait que
le shell oublie tous les emplacements mémorisés.

Les utilitaires intégrés au shell ne sont pas
rapportés par hachage.

À part le nombre de fois que j'ai saisi une commande, je ne vois pas l'utilité du hash .

Il figurait même dans le top 15 des commandes utiles de thegeekstuff.com

En quoi le hash est-il utile ?

Réponse acceptée :

hash est une commande intégrée bash. La table de hachage est une fonctionnalité de bash qui l'empêche d'avoir à rechercher $PATH chaque fois que vous tapez une commande en mettant en cache les résultats en mémoire. La table est effacée lors d'événements qui invalident manifestement les résultats (comme la modification de $PATH )

Le hash commande est juste la façon dont vous interagissez avec ce système (pour la raison que vous jugez nécessaire).

Quelques cas d'utilisation :

  • Comme vous l'avez vu, il imprime combien de fois vous appuyez sur quelles commandes si vous le tapez sans arguments. Cela pourrait 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 :

[[email protected] ~]# hash -p /lol-wut/whoami whoami
[[email protected] ~]# whoami
Not what you're thinking
[[email protected] ~]# which whoami
/usr/bin/whoami
[[email protected] ~]# /usr/bin/whoami
root
[[email protected] ~]#

Ce qui peut être utile si vous n'avez qu'un seul exécutable dans un répertoire en dehors de $PATH que vous voulez exécuter en tapant simplement le nom au lieu d'inclure tout dans ce répertoire (ce qui serait l'effet si vous l'ajoutiez à $PATH ).

Un alias peut généralement le faire aussi, cependant et puisque vous modifiez le comportement du shell actuel, il n'est pas mappé dans les programmes que vous lancez. Un lien symbolique vers le seul exécutable est probablement l'option préférable ici. hash est une façon de le faire.

  • Vous pouvez l'utiliser pour annuler la mémorisation des chemins de fichiers. Ceci est utile si un nouvel exécutable apparaît dans un ancien PATH répertoire ou obtient mv 'd ailleurs et vous voulez forcer bash à sortir et à le retrouver au lieu du dernier endroit où il se souvient l'avoir trouvé.
En relation:Linux - sysrq ne redémarrera pas avec une frappe, mais le fera avec echo "b"> /proc/sysrq-trigger ?

Exemple :

[[email protected] ~]# hash
hits    command
   1    /bin/ls
[[email protected] ~]# cp /bin/ls /lol-wut
[[email protected] ~]# hash
hits    command
   1    /bin/cp
   1    /bin/ls
[[email protected] ~]# hash -d ls
[[email protected] ~]# ls
default.ldif  newDIT.ldif  notes.txt  users.ldif
[[email protected] ~]# hash
hits    command
   1    /bin/cp
   1    /lol-wut/ls
[[email protected] ~]#

Le cp la commande a provoqué une nouvelle version de ls exécutable pour apparaître plus tôt dans mon $PATH mais n'a pas déclenché de purge de la table de hachage. J'ai utilisé hash -d pour purger sélectivement l'entrée pour ls de la table de hachage. Bash a ensuite été obligé de parcourir $PATH encore une fois et quand il l'a fait, il l'a trouvé dans le nouvel emplacement (plus tôt dans $PATH qu'il ne fonctionnait auparavant).

Vous pouvez invoquer sélectivement ce "trouver le nouvel emplacement de l'exécutable à partir de $PATH ” comportement, cependant :

[[email protected] ~]# hash
hits    command
   1    /bin/ls
[[email protected] ~]# hash ls
[[email protected] ~]# hash
hits    command
   0    /lol-wut/ls
[[email protected] ~]#

Vous voudriez surtout faire cela si vous vouliez quelque chose hors de la table de hachage et que vous n'étiez pas sûr à 100% que vous pouviez vous déconnecter puis vous reconnecter avec succès, ou si vous vouliez conserver certaines modifications que vous avez apportées à votre shell. /P>

Pour vous débarrasser des mappages obsolètes, vous pouvez également faire hash -r (ou export PATH=$PATH ) qui ne fait que purger toute la table de hachage de bash.

Il y a plein de petites situations comme ça. Je ne sais pas si je l'appellerais l'une des commandes "les plus utiles", mais il y a des cas d'utilisation.


Linux
  1. Introduction à la commande alternatives sous Linux

  2. Une introduction à la commande diff

  3. La commande "eval" dans Bash ?

  4. Le but de la commande "install" ?

  5. Obtenir le complément du résultat d'une commande Ls ?

Guide Ansible :la commande ad hoc

La commande Linux tar expliquée

Maîtrisez la ligne de commande Linux

La commande choose sous Linux

La commande timer sous Linux

Exemples essentiels de la commande ps sous Linux