Проверить устаревшее разрешение команды
Сравни результаты. Очистка не устанавливает программу и не добавляет каталог в PATH; если проблема осталась, продолжай диагностику поиска и прав исполнения.
Встроенная команда Bash для просмотра и очистки запомненных путей внешних команд.
type hash
проверить вид команды
help hash
справка встроенной команды
hash
показать запомненные пути
hash -t ls
показать кэшированный путь ls, если он есть
hash -r
очистить таблицу текущей оболочки
hash управляет таблицей запомненных путей внешних команд в Bash. При поиске
программы оболочке не всегда нужно заново просматривать все каталоги
PATH. Это локальное состояние оболочки, а не список установленных
пакетов.
Название не связано с вычислением контрольных сумм файлов. Команда также не очищает DNS, браузерный кэш или историю терминала. В уроке по PATH она помогает отделить сохранённый путь от текущего поиска.
Без аргументов hash показывает таблицу. -t выводит путь для запомненного
имени, -d удаляет отдельную запись, -r сбрасывает таблицу целиком. Если
записи ещё нет, запрос к ней может завершиться неуспешно.
Ручная привязка имени к пути через -p меняет поведение разрешения команды и
требует отдельного понимания. Для обычной диагностики достаточно просмотра и
очистки. Справка текущей оболочки доступна через help hash.
| Ключ | Что делает | Пример |
|---|---|---|
-r |
Сбросить (очистить) таблицу запомненных путей целиком. | hash -r |
-d name |
Удалить одно имя из таблицы. | hash -d ls |
-t name |
Показать запомненный путь для имени. | hash -t ls |
-l |
Вывести таблицу в виде, пригодном для повторного ввода как команд. | hash -l |
-p pathname name |
Явно привязать имя к пути, без поиска по PATH. опасно | hash -p /usr/bin/ls ls |
Ничего не найдено. Попробуй запрос короче.
Сравни результаты. Очистка не устанавливает программу и не добавляет каталог в PATH; если проблема осталась, продолжай диагностику поиска и прав исполнения.
Первый вызов просит запомнить найденный путь, второй показывает его, третий удаляет запись. Файл программы при этом остаётся на месте.
Выполняй очистку в оболочке, где воспроизводится проблема. Запущенный отдельно
bash -c 'hash -r' очистит таблицу дочерней оболочки и не изменит
родительскую.
Имя может обозначать функцию или псевдоним. Проверь type -a ls: таблица
внешних путей не описывает все способы разрешения имени в Bash.
Это допустимое состояние, например после очистки. Уточни type ls и настройки
оболочки. Пустой кэш сам по себе не означает, что внешние программы
отсутствуют.
У другой оболочки свой контекст. Повтори наблюдение там, где возникает ошибка, вместо редактирования системных файлов наугад.
hash -r не удаляет программы или пользовательские данные. Но он также не
является универсальным исправлением command not found: неверный PATH,
опечатку и отсутствие файла нужно исправлять по отдельности.
Не задавай ручную привязку к непроверенному исполняемому файлу. Изменение разрешения привычного имени может привести к запуску другого кода с твоими полномочиями.
Есть неточность? Сообщить об ошибке в статье