GNU/Linux >> Linux Esercitazione >  >> Linux

Lo scopo del comando hash?

Se esegui hash mostra il percorso di tutti i comandi eseguiti dall'ultimo ripristino dell'hash (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

Secondo le pagine man, lo scopo dell'hash è:

L'utilità /usr/bin/hash influisce sul modo in cui l'ambiente della shell
corrente ricorda le posizioni delle utilità trovate.
A seconda degli argomenti specificati, aggiunge le posizioni delle utilità
all'elenco delle posizioni ricordate oppure elimina il
contenuto dell'elenco. Quando non vengono specificati argomenti,
segnala il contenuto dell'elenco. Il -r opzione fa sì che
la shell dimentichi tutte le posizioni ricordate.

Le utilità fornite come integrate nella shell non vengono
segnalate da hash.

Oltre a vedere quante volte ho inserito un comando, non riesco a vedere l'utilità di hash .

È stato persino incluso nei 15 comandi utili migliori di thegeekstuff.com

In che modo è hash utile?

Risposta accettata:

hash è un comando integrato in bash. La tabella hash è una caratteristica di bash ciò gli impedisce di dover cercare $PATH ogni volta che si digita un comando memorizzando nella cache i risultati. La tabella viene cancellata su eventi che ovviamente invalidano i risultati (come la modifica di $PATH )

L'hash comando è solo il modo in cui interagisci con quel sistema (per qualsiasi motivo ritieni necessario).

Alcuni casi d'uso:

  • Come hai visto, stampa quante volte hai premuto quali comandi se lo digiti senza argomenti. Questo potrebbe dirti quali comandi usi più spesso.

  • Puoi anche usarlo per ricordare eseguibili in posizioni non standard.

Esempio:

[[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] ~]#

Il che potrebbe essere utile se hai solo un singolo eseguibile in una directory al di fuori di $PATH che vuoi eseguire digita semplicemente il nome invece di includere tutto in quella directory (che sarebbe l'effetto se lo aggiungessi a $PATH ).

Un alias di solito può fare anche questo, tuttavia e poiché stai modificando il comportamento della shell corrente, non è mappato nei programmi che inizi. Un collegamento simbolico all'eseguibile solitario è probabilmente l'opzione preferibile qui. hash è un modo per farlo.

  • Puoi usarlo per non ricordare i percorsi dei file. Questo è utile se viene visualizzato un nuovo eseguibile in un precedente PATH directory o ottiene mv 'd da qualche altra parte e vuoi forzare bash a uscire e trovarlo di nuovo invece dell'ultimo posto in cui ricorda di averlo trovato.
Correlati:Linux – sysrq non si riavvierà con una sequenza di tasti, ma lo farà con echo "b"> /proc/sysrq-trigger?

Esempio:

[[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] ~]#

Il cp comando ha causato una nuova versione di ls eseguibile da visualizzare prima nel mio $PATH ma non ha attivato un'eliminazione della tabella hash. Ho usato hash -d per eliminare selettivamente la voce per ls dalla tabella hash. Bash è stato quindi costretto a cercare $PATH di nuovo e quando lo ha fatto, lo ha trovato nella posizione più recente (prima in $PATH rispetto a prima).

Puoi invocare selettivamente questo "trova nuova posizione dell'eseguibile da $PATH ” comportamento, però:

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

Per lo più vorresti farlo se volevi qualcosa fuori dalla tabella hash e non fossi al 100% che potresti disconnetterti e poi rientrare con successo, o se volessi preservare alcune modifiche che hai apportato alla tua shell.

Per eliminare le mappature obsolete, puoi anche eseguire hash -r (o export PATH=$PATH ) che elimina efficacemente l'intera tabella hash di bash.

Ci sono tante piccole situazioni del genere. Non so se lo definirei uno dei comandi "più utili", ma ha alcuni casi d'uso.


Linux
  1. Introduzione al comando alternatives in Linux

  2. Un'introduzione al comando diff

  3. Come utilizzare il comando basename?

  4. Il comando "eval" in Bash?

  5. Ottieni il complemento del risultato di un comando Ls?

Ansible Guide:Il comando ad hoc

Spiegazione del comando tar di Linux

Padroneggia la riga di comando di Linux

Il comando select in Linux

Il comando timer in Linux

Esempi essenziali del comando ps in Linux