С чего начать Первые шаги трек · 15 ступеней
Linux Labs

hash — кэш путей команд в Bash

3 мин Ubuntu 24.04; Bash 5.2 for shell builtins

Встроенная команда Bash для просмотра и очистки запомненных путей внешних команд.

Шпаргалка

5 команд Версия для печати
  • type hash проверить вид команды
  • help hash справка встроенной команды
  • hash показать запомненные пути
  • hash -t ls показать кэшированный путь ls, если он есть
  • hash -r очистить таблицу текущей оболочки

Обзор

hash управляет таблицей запомненных путей внешних команд в Bash. При поиске программы оболочке не всегда нужно заново просматривать все каталоги PATH. Это локальное состояние оболочки, а не список установленных пакетов.

Название не связано с вычислением контрольных сумм файлов. Команда также не очищает DNS, браузерный кэш или историю терминала. В уроке по PATH она помогает отделить сохранённый путь от текущего поиска.

Ключи

5

Без аргументов 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

Ничего не найдено. Попробуй запрос короче.

Рецепты

3

Проверить устаревшее разрешение команды

bash
type -a ls
hash -t ls
hash -r
type -a ls

Сравни результаты. Очистка не устанавливает программу и не добавляет каталог в PATH; если проблема осталась, продолжай диагностику поиска и прав исполнения.

Удалить только одну запись

bash
hash ls
hash -t ls
hash -d ls

Первый вызов просит запомнить найденный путь, второй показывает его, третий удаляет запись. Файл программы при этом остаётся на месте.

Проверить контекст исправления

Выполняй очистку в оболочке, где воспроизводится проблема. Запущенный отдельно bash -c 'hash -r' очистит таблицу дочерней оболочки и не изменит родительскую.

Неполадки

3

После очистки запускается неожиданная команда

Имя может обозначать функцию или псевдоним. Проверь type -a ls: таблица внешних путей не описывает все способы разрешения имени в Bash.

Таблица пустая

Это допустимое состояние, например после очистки. Уточни type ls и настройки оболочки. Пустой кэш сам по себе не означает, что внешние программы отсутствуют.

В другом терминале поведение не изменилось

У другой оболочки свой контекст. Повтори наблюдение там, где возникает ошибка, вместо редактирования системных файлов наугад.

Опасно

hash -r не удаляет программы или пользовательские данные. Но он также не является универсальным исправлением command not found: неверный PATH, опечатку и отсутствие файла нужно исправлять по отдельности.

Не задавай ручную привязку к непроверенному исполняемому файлу. Изменение разрешения привычного имени может привести к запуску другого кода с твоими полномочиями.

См. также

  • which — как выяснить, что выполнит оболочка.
  • env-vars — PATH и окружение процесса.
  • bash — встроенные команды и дочерние оболочки.
Загрузка…