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.
Есть много таких маленьких ситуаций. Я не знаю, назову ли я это одной из «самых полезных» команд, но у нее есть некоторые варианты использования.