Отличия между командами 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"