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

Бывает, что нужно отредактировать 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.gzlocate показывает все пути, в которых совпадает хотя бы часть имени, поэтому по команде [locate httpd.conf] выводятся не только файл конфигурации, но и справочная страница (httpd.conf.5.gz), и сохранённые резервные копии.
Если на виртуальном сервере ниже выбрать слева which · whereis · locate, сменятся чипы, а нажатие на чип вводит соответствующую команду. Можно набирать и с клавиатуры.
Чтобы искать файлы не по имени, а по размеру или дате изменения, используйте команду 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$” |
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.