Linux which, whereis, locate: 3 polecenia do znajdowania położenia (ścieżki) pliku

Czasem trzeba poprawić httpd.conf, ale nie wiadomo, gdzie jest plik, albo polecenie o tej samej nazwie istnieje w dwóch miejscach i nie wiadomo, które się uruchamia. Polecenie which w Linuksie znajduje plik, który faktycznie się uruchamia, polecenie whereis znajduje plik wykonywalny razem z folderami konfiguracji i podręcznikami, a polecenie locate znajduje każdą ścieżkę zawierającą nazwę. Ten wpis porównuje trzy polecenia w tabeli i pozwala wypróbować je na wirtualnym serwerze w przeglądarce.
W AlmaLinux 9.8 which pochodzi z pakietu which 2.21, a whereis z util-linux 2.37.4, więc oba działają od razu, natomiast locate wymaga osobnej instalacji pakietu mlocate 0.26.
✅ which vs whereis vs locate
Trzy polecenia szukają w różnych miejscach. which i whereis przeszukują na bieżąco ustalone foldery, a locate szuka nazw w wcześniej zbudowanej liście plików (DB).
| Polecenie | Co znajduje | Gdzie szuka | Nowe pliki |
|---|---|---|---|
| which | Jeden uruchamiany plik polecenia oraz aliasy | Foldery wymienione w PATH | Znajduje od razu |
| whereis | Plik wykonywalny · foldery konfiguracji · podręczniki | Ustalone foldery, np. /usr/bin · /etc · /usr/share/man | Znajduje od razu |
| locate | Każdy plik i folder zawierający nazwę | Wcześniej zbudowana DB (/var/lib/mlocate/mlocate.db) | Znajduje po updatedb |
Wyszukaj ten sam httpd przez which i whereis, a różnica od razu będzie widoczna.
~]# 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 pokazuje każdą ścieżkę pasującą choćby do części nazwy, więc [locate httpd.conf] zwraca też podręcznik (httpd.conf.5.gz) i ewentualne kopie zapasowe, a nie tylko plik konfiguracyjny.
Na wirtualnym serwerze poniżej wybierz po lewej which, whereis lub locate, by zmienić chipy; kliknięcie chipa wpisuje to polecenie. Możesz też pisać z klawiatury.
Aby szukać plików według rozmiaru lub daty modyfikacji zamiast nazwy, użyj polecenia find; ścieżkę bieżącego folderu sprawdzisz poleceniem pwd.
✅ Polecenie which w Linuksie
which przeszukuje po kolei foldery z PATH od początku i pokazuje pierwszy znaleziony plik wykonywalny. To ten plik faktycznie się uruchamia, gdy wpiszesz polecenie.
W AlmaLinux bash przekazuje which listę aliasów, więc dla polecenia z aliasem dostajesz i alias, i prawdziwy plik. Jeśli nie ma go nigdzie w PATH, pojawia się [no command 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)W praktyce jedyną opcją jest -a. Gdy ta sama nazwa jest w dwóch folderach PATH, pokazuje oba, a ten na górze faktycznie się uruchamia.
~]# which ping
/usr/sbin/ping
~]# which -a ping
/usr/sbin/ping
/usr/bin/pingW AlmaLinux 9.8 /usr/sbin/ping to dowiązanie do /usr/bin/ping, więc wynik jest ten sam. Program zainstalowany samodzielnie w /usr/local/bin uruchomi się przed tym z /usr/bin ze względu na kolejność w PATH.
[which cd] pokazuje /usr/bin/cd, ale gdy wpiszesz cd w powłoce, uruchamia się wbudowane polecenie powłoki, a nie ten plik. Czy polecenie jest wbudowane, sprawdzisz przez [type cd], które wypisze [cd is a shell builtin].
✅ Polecenie whereis w Linuksie
whereis po nazwie polecenia znajduje razem plik wykonywalny i podręczniki. Pomija PATH i przeszukuje ustalone foldery, takie jak /usr/bin · /usr/sbin · /usr/lib64 · /etc · /usr/share, więc pojawia się nawet folder konfiguracji o tej samej nazwie (/etc/httpd).
| Opcja | Opis | |
|---|---|---|
| -b | Tylko pliki binarne. Dla httpd: /usr/sbin/httpd oraz /usr/lib64/httpd · /etc/httpd · /usr/share/httpd | |
| -m | Tylko podręczniki (/usr/share/man · /usr/share/info) | |
| -s | Tylko źródła. W domyślnej instalacji AlmaLinux 9.8 pojawia się tylko nazwa, np. [httpd:] | |
| -l | Lista folderów przeszukiwanych przez 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.gzGdy nic nie zostanie znalezione, pojawia się tylko nazwa, np. [htop:]. which zwraca kod wyjścia 1, gdy nic nie znajdzie, a whereis zwraca 0, więc w skrypcie sprawdzaj instalację przez which.
✅ Polecenie locate w Linuksie
locate nie przeszukuje dysku; szuka nazw we wcześniej zbudowanej DB. Dzięki temu jest szybki, ale nie znajdzie plików utworzonych po zbudowaniu DB.
~]# dnf -y install mlocate
~]# updatedbUruchomione zaraz po instalacji nie ma jeszcze DB i pojawia się [locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory]; jednorazowe uruchomienie updatedb ją tworzy. Potem mlocate-updatedb.timer odbudowuje DB raz dziennie.
Nowy plik pojawi się dopiero po updatedb, a usunięty będzie widoczny do tego czasu. Aby widzieć tylko istniejące teraz pliki, dodaj -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.txtPRUNEPATHS w /etc/updatedb.conf obejmuje /tmp · /var/tmp · /mnt · /media, więc pliki z tych folderów nie pojawiają się nawet po updatedb.
🔲 Opcje polecenia locate
| Opcja | Opis | |
|---|---|---|
| -i | Ignorowanie wielkości liter | |
| -c | Tylko liczba dopasowań zamiast ścieżek | |
| -l= -n | Dodaj liczbę, by ograniczyć wyniki do tylu. -l 3 | |
| -b | Dopasowanie tylko nazwy pliku na końcu ścieżki | |
| -e | Pomijanie plików, które są w DB, ale już nie istnieją | |
| -S | Informacje o DB (foldery · pliki · rozmiar) | |
| -r | Wyszukiwanie wyrażeniem regularnym. locate -r "httpd.conf$" |
ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.