hash
- це вбудована команда bash. Хеш-таблиця є функцією, bash
яка не дозволяє їй здійснювати пошук $PATH
кожного разу, коли ви вводите команду, кешуючи результати в пам'яті. Таблиця очищається від подій, які очевидно недійсні результати (наприклад, зміни $PATH
)
hash
Команда просто , як ви взаємодієте з цією системою (з якої причини ви вважаєте , потрібні).
Деякі випадки використання:
Наче ви бачили, він друкує, скільки разів ви натискаєте, які команди, якщо ви вводите без аргументів. Це може сказати вам, які команди ви використовуєте найчастіше.
Ви також можете використовувати його для запам'ятовування виконуваних файлів у нестандартних місцях.
Приклад:
[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 ~]#
Що може бути корисним, якщо у вас є лише один виконуваний файл у каталозі поза цим, $PATH
який ви хочете запустити, просто введіть ім’я, а не додайте все до цього каталогу (що було б ефектом, якщо ви його додали $PATH
).
Псевдонім зазвичай може це робити також, хоча, оскільки ви змінюєте поведінку поточної оболонки, вона не відображається в програмах, які ви починаєте. Тут, мабуть, кращим варіантом є посилання на виконувану програму. hash
це один із способів зробити це.
- Ви можете використовувати його для запам'ятовування файлових шляхів. Це корисно, якщо новий виконуваний файл з'являється в попередньому
PATH
каталозі або потрапляє mv
в інше місце, і ви хочете змусити bash вийти і знайти його знову, а не на останньому місці, де воно запам'ятало його пошук.
Приклад:
[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
Команда викликала нова версія ls
виконуваного файлу , щоб показати раніше на мою , $PATH
але не викликало продування хеш - таблиці. Раніше я hash -d
вибірково вимикав запис ls
із хеш-таблиці. Потім Bash був змушений переглядати $PATH
ще раз, і коли це сталося, він знайшов його в більш новій локації (раніше в $ PATH, ніж це працював раніше).
Ви можете вибірково викликати цю $PATH
поведінку "знайти нове місце виконуваного файлу ", хоча:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
Ви здебільшого просто хотіли б це зробити, якщо хотіли чогось із хеш-таблиці, і ви не на 100% могли б вийти з системи, а потім успішно повернутися, або хотіли зберегти деякі зміни, внесені в оболонку.
Щоб позбутися несвіжих відображень, ви також можете зробити hash -r
(або export PATH=$PATH
), що ефективно просто очищає всю хеш-таблицю bash.
Існує багато подібних ситуацій. Я не знаю, чи б я назвав це однією з "найкорисніших" команд, але у неї є деякі випадки використання.