Команды which, whereis и locate в Linux: 3 способа узнать расположение (путь) файла

Уведомление о партнёрских ссылках v3.1
Уведомление о партнёрских ссылках v3.2 (мобильная версия)
Тестовая средаСемейство RHELAlmaLinux 9.8Учётная запись rootПроверено 2026-10-07
Команды поискаwhichwhereislocate

Бывает, что нужно отредактировать httpd.conf, но непонятно, где лежит файл, или команда с одним и тем же именем есть в двух местах, и неясно, какая из них запускается. Команда which в Linux находит файл, который действительно выполняется, команда whereis в Linux — исполняемый файл, папки конфигурации и справочные страницы, а команда locate — все пути, в которых встречается это имя. Различия трёх команд сведены в таблицу, а набрать их самостоятельно можно на виртуальном сервере прямо в браузере.

В AlmaLinux 9.8 which входит в пакет which 2.21, а whereis — в util-linux 2.37.4, поэтому обе команды доступны сразу, а для locate нужно отдельно установить пакет mlocate 0.26.

✅ Разница между which · whereis · locate

Три команды ищут в разных местах. which и whereis сразу просматривают заданные папки, а locate ищет имена в заранее созданном списке файлов (БД).

КомандаЧто ищетГде ищетНовые файлы
whichОдин запускаемый файл команды, псевдонимы (alias)Папки, перечисленные в PATHНаходит сразу
whereisИсполняемый файл · папки конфигурации · справочные страницыЗаданные папки вроде /usr/bin · /etc · /usr/share/manНаходит сразу
locateВсе файлы и папки, содержащие это имяЗаранее созданная БД (/var/lib/mlocate/mlocate.db)Находит после updatedb

Если искать один и тот же httpd командами which и whereis, разница видна сразу.

~]# which httpd
/usr/sbin/httpd
~]# whereis httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd /usr/share/man/man8/httpd.8.gz

locate показывает все пути, в которых совпадает хотя бы часть имени, поэтому по команде [locate httpd.conf] выводятся не только файл конфигурации, но и справочная страница (httpd.conf.5.gz), и сохранённые резервные копии.

Если на виртуальном сервере ниже выбрать слева which · whereis · locate, сменятся чипы, а нажатие на чип вводит соответствующую команду. Можно набирать и с клавиатуры.

Симулятор команд поиска расположения файловAlmaLinux 9.8
[root@server work]#
Работает только в браузере и не трогает настоящий сервер. Если выбрать команду слева, сменятся чипы ниже, а нажатие на чип вводит эту команду. Найдите один и тот же httpd тремя командами и сравните результаты, а в locate создайте новый файл и поищите его до и после updatedb. Если что-то пошло не так, нажмите [Start over], а чтобы увидеть доступные команды, введите uknew help.

Чтобы искать файлы не по имени, а по размеру или дате изменения, используйте команду find, а путь к папке, в которой вы находитесь, показывает команда pwd.

✅ Команда which в Linux

which по порядку, начиная с первой, просматривает папки из PATH и показывает первый найденный исполняемый файл. Именно он и запускается, когда вы вводите команду.

В AlmaLinux bash передаёт which список псевдонимов, поэтому для команды с псевдонимом выводятся и псевдоним, и реальный файл. Если команды нет нигде в PATH, появится [no команда in (PATH)].

~]# which ll
alias ll='ls -l --color=auto'
	/usr/bin/ls
~]# which htop
/usr/bin/which: no htop in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)

Опция фактически одна — -a. Если одно и то же имя есть в двух папках PATH, она показывает оба файла, а запускается тот, что выведен первым.

~]# which ping
/usr/sbin/ping
~]# which -a ping
/usr/sbin/ping
/usr/bin/ping

В AlmaLinux 9.8 /usr/sbin/ping — это ссылка на /usr/bin/ping, поэтому результат одинаковый. Если программа, которую вы установили сами, лежит в /usr/local/bin, из-за порядка в PATH она запустится раньше той, что в /usr/bin.

[which cd] показывает /usr/bin/cd, но если ввести cd в оболочке, выполнится не этот файл, а встроенная команда оболочки. Встроенная ли это команда, проверяют через [type cd] — выводится [cd is a shell builtin].

✅ Команда whereis в Linux

whereis по имени команды находит исполняемый файл вместе со справочными страницами. Она не учитывает PATH и просматривает заданные папки вроде /usr/bin · /usr/sbin · /usr/lib64 · /etc · /usr/share, поэтому выводится даже папка конфигурации с тем же именем (/etc/httpd).

ОпцияОписание
-bТолько исполняемые файлы. Для httpd — /usr/sbin/httpd и /usr/lib64/httpd · /etc/httpd · /usr/share/httpd
-mТолько справочные страницы (/usr/share/man · /usr/share/info)
-sТолько исходники. В стандартной установке AlmaLinux 9.8 выводится одно имя, вроде [httpd:]
-lСписок папок, которые просматривает whereis
~]# whereis -b httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd
~]# whereis -m httpd
httpd: /usr/share/man/man8/httpd.8.gz
~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1ossl.gz /usr/share/man/man1/passwd.1.gz

Если ничего не найдено, выводится только имя, вроде [htop:]. Если which ничего не находит, она возвращает код завершения 1, а whereis — 0, поэтому, чтобы проверить в скрипте, установлена ли программа, используют which.

✅ Команда locate в Linux

locate не просматривает диск, а ищет имена в заранее созданной БД. Поэтому она работает быстро, но не находит файлы, созданные после построения БД.

~]# dnf -y install mlocate
~]# updatedb

Если запустить её сразу после установки, БД ещё нет, и появится [locate: can not stat () `/var/lib/mlocate/mlocate.db’: No such file or directory]; один запуск updatedb её создаёт. После этого mlocate-updatedb.timer пересоздаёт БД раз в день.

Только что созданный файл не появится до запуска updatedb, а удалённый будет выводиться до него же. Чтобы видеть только существующие сейчас файлы, добавьте -e.

~]# touch report.txt
~]# locate report.txt
~]# updatedb
~]# locate report.txt
/root/work/report.txt
~]# rm -f report.txt
~]# locate report.txt
/root/work/report.txt
~]# locate -e report.txt

В PRUNEPATHS файла /etc/updatedb.conf указаны /tmp · /var/tmp · /mnt · /media, поэтому файлы из этих папок не появляются даже после запуска updatedb.

🔲 Опции команды locate

ОпцияОписание
-iИскать без учёта регистра
-cВместо путей — только количество совпадений
-l= -nДобавьте число — выводится не больше этого количества. -l 3
-bИскать только в имени файла в конце пути
-eПропускать файлы, которые есть в БД, но уже не существуют
-SСведения о БД (число папок · файлов · размер)
-rПоиск по регулярному выражению. locate -r “httpd.conf$”

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 9   +   1   =