linux-labs

Вики / Базовые команды

which / type / whereis — где команда

Команда bash Базовое

Найти, какой бинарь выполнится, 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 + исходники

См. также