Вики / Базовые команды
which / type / whereis — где команда
Найти, какой бинарь выполнится, builtin это или alias, где лежит и man к нему.
Когда набираешь команду, оболочка ищет её в каталогах из $PATH (см. env-vars).
Эти команды отвечают на вопрос «что именно выполнится и откуда»:
type(встроенная в bash) — самая точная: различает alias, функцию, builtin и файл.command -v— переносимый способ узнать путь/факт наличия (для скриптов).which— отдельная программа, показывает только путь к файлу (не видит alias/builtin).whereis— бинарь + исходники + man-страницу.
type ls # ls is aliased to `ls --color=auto` (видит alias!)
type -a python3 # ВСЕ варианты по PATH (где ещё лежит)
type cd # cd is a shell builtin
command -v git # /usr/bin/git (или пусто + код возврата 1, если нет)
which python3 # /usr/bin/python3
whereis nginx # nginx: /usr/sbin/nginx /etc/nginx /usr/share/man/...
Проверка «есть ли команда» в скрипте (надёжно):
if command -v docker >/dev/null 2>&1; then
echo "docker есть"
fi
which нашёл, а команда «not found» (или наоборот)
which не знает про alias/builtin/функции и читает свой $PATH, который может
отличаться от текущего. Доверяй type — он спрашивает саму оболочку.
Запускается «не та» версия
type -a имя покажет все совпадения по PATH в порядке поиска — первое и выполнится.
Поправь порядок в $PATH или зови по полному пути.
command not found хотя пакет установлен
Бинарь не в $PATH (часто /usr/local/sbin, ~/.local/bin). Проверь echo $PATH
и whereis имя — см. env-vars.
type -a cmd # alias/builtin/функция/файл — все варианты
command -v cmd # путь или пусто (для скриптов)
which cmd # только путь к файлу
whereis cmd # бинарь + man + исходники
См. также
- Справка (man, --help, tldr) — Базовые команды
- alias — псевдонимы команд — Базовые команды
- Переменные окружения и PATH — Базовые команды