hash
jest wbudowanym poleceniem bash. Tabela skrótów jest funkcją bash
zapobiegającą wyszukiwaniu przy $PATH
każdym wpisaniu polecenia przez buforowanie wyników w pamięci. Tabela jest czyszczona w przypadku zdarzeń, które oczywiście unieważniają wyniki (takie jak modyfikowanie $PATH
)
hash
Polecenie jest po prostu jak na interakcję z tego systemu (na jakikolwiek powód czujesz trzeba).
Niektóre przypadki użycia:
Tak jak widziałeś, wypisuje, ile razy uderzyłeś, które polecenia, jeśli wpiszesz je bez argumentów. Może ci to powiedzieć, których poleceń używasz najczęściej.
Możesz go również użyć do zapamiętania plików wykonywalnych w niestandardowych lokalizacjach.
Przykład:
[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 ~]#
Co może być przydatne, jeśli masz tylko jeden plik wykonywalny w katalogu poza $PATH
tym, który chcesz uruchomić, po prostu wpisz nazwę zamiast dołączać wszystko do tego katalogu (co byłoby efektem, gdybyś go dodał $PATH
).
Jednak alias zwykle może to zrobić, a ponieważ modyfikujesz zachowanie bieżącej powłoki, nie jest ona mapowana w programach, które uruchamiasz. Dowiązanie symboliczne do pojedynczego pliku wykonywalnego jest tutaj prawdopodobnie preferowaną opcją. hash
jest jednym ze sposobów na zrobienie tego.
- Możesz go użyć do zapamiętania ścieżek plików. Jest to przydatne, jeśli nowy plik wykonywalny pojawia się we wcześniejszym
PATH
katalogu lub przenosi się mv
do innego miejsca i chcesz zmusić bash do wyjścia i znalezienia go ponownie, zamiast ostatniego miejsca, w którym pamięta o znalezieniu.
Przykład:
[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 ~]#
cp
Polecenie spowodowało nową wersję z ls
pliku wykonywalnego, aby pokazać się wcześniej w moim $PATH
, ale nie wywoła czystkę tabeli hash. Kiedyś hash -d
wybiórczo czyściłem wpis ls
z tabeli skrótów. Bash został zmuszony do $PATH
ponownego przejrzenia, a kiedy to zrobił, znalazł go w nowszej lokalizacji (wcześniej w $ PATH niż wcześniej).
Możesz selektywnie wywoływać to zachowanie „znajdź nową lokalizację pliku wykonywalnego z $PATH
”, jednak:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
Powinieneś to po prostu zrobić, jeśli chcesz coś z tabeli skrótów i nie jesteś w 100% tym, co możesz wylogować, a następnie pomyślnie się zalogować lub chcesz zachować pewne modyfikacje, które wprowadziłeś w swojej powłoce.
Aby pozbyć się przestarzałych mapowań, możesz także zrobić hash -r
(lub export PATH=$PATH
), który skutecznie po prostu przeczyści całą tablicę skrótów bash.
Jest wiele takich małych sytuacji. Nie wiem, czy nazwałbym to jednym z „najbardziej użytecznych” poleceń, ale ma kilka przypadków użycia.