GNU/Linux >> Znalost Linux >  >> Linux

Účel hash příkazu?

Pokud spustíte hash ukazuje cestu všech příkazů spuštěných od posledního resetování hashe (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

Podle manuálových stránek je účel hash:

Obslužný program /usr/bin/hash ovlivňuje způsob, jakým si aktuální prostředí shell
pamatuje umístění nalezených nástrojů.
V závislosti na zadaných argumentech přidá umístění nástroje
do svého seznamu zapamatovaných umístění. nebo vyčistí
obsah seznamu. Pokud nejsou zadány žádné argumenty,
podá zprávu o obsahu seznamu. -r volba způsobí, že
shell zapomene všechna zapamatovaná umístění.

Nástroje poskytované jako vestavěné do shellu nejsou
hlášeny pomocí hash.

Kromě toho, kolikrát jsem zadal příkaz, nevidím užitečnost hash .

Byl dokonce uveden v 15 nejužitečnějších příkazech webu thegeekstuff.com

Jakými způsoby je hash užitečné?

Přijatá odpověď:

hash je vestavěný příkaz bash. Hašovací tabulka je funkcí bash což zabraňuje tomu, aby musel hledat $PATH pokaždé, když zadáte příkaz, uložením výsledků do mezipaměti. Tabulka se vymaže u událostí, které zjevně znehodnocují výsledky (jako je úprava $PATH )

hash příkaz je jen způsob, jakým interagujete s tímto systémem (z jakéhokoli důvodu si myslíte, že to potřebujete).

Některé případy použití:

  • Jak jste viděli, vypíše, kolikrát jste zadali které příkazy, pokud je zadáte bez argumentů. To vám může říct, které příkazy používáte nejčastěji.

  • Můžete jej také použít k zapamatování spustitelných souborů v nestandardních umístěních.

Příklad:

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

Což může být užitečné, pokud máte pouze jeden spustitelný soubor v adresáři mimo $PATH které chcete spustit, stačí napsat název namísto zahrnutí všeho v tomto adresáři (což by mělo efekt, kdybyste to přidali do $PATH ).

Alias ​​to obvykle umí také, a protože upravujete chování aktuálního shellu, není mapováno v programech, které spustíte. Symbolický odkaz na osamocený spustitelný soubor je zde pravděpodobně preferovanou možností. hash je jedním ze způsobů, jak to udělat.

  • Můžete jej použít k tomu, abyste si nepamatovali cesty k souborům. To je užitečné, pokud se v dřívější PATH objeví nový spustitelný soubor adresář nebo získá mv ‘d někam jinam a chcete přinutit bashe, aby šel ven a našel to znovu místo posledního místa, kde si pamatuje, že to našel.
Související:Linux – sysrq se nerestartuje stisknutím klávesy, ale provede se s echo „b“> /proc/sysrq-trigger?

Příklad:

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

cp příkaz způsobil novou verzi ls spustitelný, aby se zobrazil dříve v mé $PATH ale nespustilo čištění hašovací tabulky. Použil jsem hash -d selektivně vyčistí záznam pro ls z hash tabulky. Bash byl poté nucen prozkoumat $PATH znovu, a když se tak stalo, našel jej v novějším umístění (dříve v $PATH, než byl spuštěn dříve).

Můžete selektivně vyvolat toto „najít nové umístění spustitelného souboru z $PATH ” chování, ačkoli:

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

Většinou byste to chtěli udělat, pokud byste chtěli něco z hašovací tabulky a nebyli jste 100% schopni se odhlásit a poté úspěšně znovu přihlásit, nebo jste chtěli zachovat některé úpravy, které jste provedli ve vašem shellu.

Chcete-li se zbavit zastaralých mapování, můžete také provést hash -r (nebo export PATH=$PATH ), který efektivně pouze vyčistí celou hašovací tabulku bash.

Takových malých situací je spousta. Nevím, jestli bych to nazval jedním z „nejužitečnějších“ příkazů, ale má několik případů použití.


Linux
  1. Praktický pohled na příkaz xargs

  2. Jak používat příkaz basename?

  3. 5 Praktické příklady příkazu dd v Linuxu

  1. Zvládněte příkaz Linux ls

  2. Příkaz „eval“ v Bash?

  3. Účel příkazu „install“?

  1. Získat doplněk k výsledku příkazu Ls?

  2. Vysvětlete možnosti příkazu Readlink?

  3. Vyhledejte příkaz v Linuxu