Отличия между командами which и whereis в Linux

  • which используется для анализа конкретной команды в текущем окружении
  • whereis используется для изучения всех компонентов программы в системе

which

Назначение: Поиск исполняемого файла, который будет запущен при вводе команды в оболочке.

Синтаксис:

which [опции] имя_программы

Особенности:

  • Ищет только исполняемые файлы в каталогах из переменной окружения PATH
  • Возвращает первый найденный путь (если не указана опция -a для вывода всех совпадений)
  • Не находит исходники, документацию или man-страницы
  • Учитывает порядок каталогов в PATH, что полезно для определения приоритета версий

Пример:

$ which python
/usr/bin/python

$ which -a python  # Все вхождения в PATH
/usr/bin/python
/usr/local/bin/python

whereis

Назначение: Поиск бинарных файлов, исходных кодов и man-страниц для указанной программы.

Синтаксис:

whereis [опции] имя_программы

Особенности:

  • Ищет в стандартных системных каталогах (например, /usr/bin, /usr/share/man, /usr/src), игнорируя PATH
  • Выводит все найденные типы файлов: бинарники (-b), man-страницы (-m), исходники (-s)
  • Не учитывает пользовательские пути вне предопределённых каталогов

Пример:

   $ whereis python
   python: /usr/bin/python3.8 /usr/lib/python3.8 /usr/share/man/man1/python.1.gz

   $ whereis -b python  # Только бинарники
   python: /usr/bin/python3.8 /usr/bin/python

Сравнительная таблица

Критерий which whereis
Цель поиска Только исполняемые файлы в PATH Бинарники, исходники, man-страницы
Зависимость от PATH Да Нет (ищет в системных каталогах)
Типы файлов Только исполняемые Бинарники, мануалы, исходники
Приоритет в PATH Учитывает порядок Не учитывает
Псевдонимы (aliases) Не показывает (в bash) Не показывает
Вывод Один путь (по умолчанию) Все найденные файлы

Когда использовать?

  • which:

  • Чтобы определить, какая версия команды выполнится (например, при конфликте версий Python)

  • Для проверки наличия исполняемого файла в PATH

  • whereis:

  • Чтобы найти все компоненты программы: бинарник, документацию, исходники

  • Для быстрого поиска man-страниц (whereis -m ls)

Похожие команды для поиска файлов в системе

  • locate: Быстрый поиск файлов по всей ФС через базу данных (updatedb)
    $ locate myfile.txt
  • find: Глубокий поиск с фильтрацией по параметрам (имя, размер, дата)
    $ find /home -name "*.txt"