Linux which, whereis, locate: 3 commando's om de locatie (het pad) van een bestand te vinden

Soms moet je httpd.conf aanpassen maar weet je niet waar het bestand staat, of bestaat een commando met dezelfde naam op twee plekken en weet je niet welke er draait. Het Linux-commando which vindt het bestand dat echt draait, het Linux-commando whereis vindt het uitvoerbare bestand plus configuratiemappen en handleidingen, en het commando locate vindt elk pad met de naam erin. Dit artikel vergelijkt de drie in een tabel, en je kunt ze uitproberen op een virtuele server in je browser.
Op AlmaLinux 9.8 zit which in het pakket which 2.21 en whereis in util-linux 2.37.4, dus beide werken meteen, terwijl locate het pakket mlocate 0.26 apart nodig heeft.
✅ which vs whereis vs locate
De drie commando's zoeken op verschillende plekken. which en whereis doorzoeken ter plekke vaste mappen, terwijl locate namen opzoekt in een vooraf gemaakte bestandslijst (DB).
| Commando | Wat het vindt | Waar het zoekt | Nieuwe bestanden |
|---|---|---|---|
| which | Het ene commandobestand dat draait, plus aliassen | Mappen die in PATH staan | Direct gevonden |
| whereis | Uitvoerbaar bestand · configuratiemappen · handleidingen | Vaste mappen zoals /usr/bin · /etc · /usr/share/man | Direct gevonden |
| locate | Elk bestand en elke map met de naam erin | Een vooraf gemaakte DB (/var/lib/mlocate/mlocate.db) | Gevonden na updatedb |
Zoek dezelfde httpd met which en whereis en het verschil is meteen duidelijk.
~]# 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 toont elk pad dat zelfs maar deels op de naam past, dus [locate httpd.conf] geeft ook de handleiding (httpd.conf.5.gz) en eventuele back-upkopieën terug, niet alleen het configuratiebestand.
Kies op de virtuele server hieronder links which, whereis of locate om de chips te wisselen; klik op een chip om dat commando te typen. Je kunt het ook op je toetsenbord typen.
Wil je bestanden zoeken op grootte of wijzigingsdatum in plaats van op naam, gebruik dan het find-commando; het pad van de map waarin je zit, zie je met het pwd-commando.
✅ Linux-commando which
which doorzoekt de mappen in PATH van voor naar achter en toont het eerste uitvoerbare bestand dat het vindt. Dat is het bestand dat echt draait als je het commando typt.
Op AlmaLinux geeft bash de aliaslijst door aan which, dus voor een commando met een alias krijg je zowel de alias als het echte bestand. Staat het nergens in PATH, dan krijg je [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)In de praktijk is -a de enige optie. Bestaat dezelfde naam in twee PATH-mappen, dan toont het ze allebei, en de bovenste is degene die echt draait.
~]# which ping
/usr/sbin/ping
~]# which -a ping
/usr/sbin/ping
/usr/bin/pingOp AlmaLinux 9.8 is /usr/sbin/ping een link naar /usr/bin/ping, dus het resultaat is hetzelfde. Een programma dat je zelf in /usr/local/bin hebt geïnstalleerd, draait door de volgorde in PATH vóór dat in /usr/bin.
[which cd] toont /usr/bin/cd, maar als je in de shell cd typt, draait de ingebouwde shellopdracht in plaats van dit bestand. Of een commando ingebouwd is, controleer je met [type cd], dat [cd is a shell builtin] toont.
✅ Linux-commando whereis
whereis gebruikt de commandonaam om het uitvoerbare bestand en de handleidingen samen te vinden. Het negeert PATH en doorzoekt vaste mappen zoals /usr/bin · /usr/sbin · /usr/lib64 · /etc · /usr/share, dus zelfs een configuratiemap met dezelfde naam (/etc/httpd) verschijnt.
| Optie | Uitleg | |
|---|---|---|
| -b | Alleen binaries. Voor httpd: /usr/sbin/httpd en /usr/lib64/httpd · /etc/httpd · /usr/share/httpd | |
| -m | Alleen handleidingen (/usr/share/man · /usr/share/info) | |
| -s | Alleen broncode. Op een standaardinstallatie van AlmaLinux 9.8 krijg je alleen de naam, zoals [httpd:] | |
| -l | Lijst met mappen die whereis doorzoekt |
~]# 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.gzWordt er niets gevonden, dan krijg je alleen de naam, zoals [htop:]. which geeft exitcode 1 als het niets vindt en whereis geeft 0, dus gebruik which om in een script te controleren of iets geïnstalleerd is.
✅ Linux-commando locate
locate doorzoekt de schijf niet, maar zoekt namen op in een vooraf gemaakte DB. Daardoor is het snel, maar het vindt geen bestanden die na het bouwen van de DB zijn aangemaakt.
~]# dnf -y install mlocate
~]# updatedbVoer je het direct na de installatie uit, dan is er nog geen DB en krijg je [locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory]; één keer updatedb draaien maakt hem aan. Daarna bouwt mlocate-updatedb.timer de DB één keer per dag opnieuw op.
Een nieuw bestand verschijnt pas na updatedb, en een verwijderd bestand blijft tot dan zichtbaar. Wil je alleen bestanden zien die nu bestaan, voeg dan -e toe.
~]# 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 in /etc/updatedb.conf bevat /tmp · /var/tmp · /mnt · /media, dus bestanden in die mappen verschijnen ook na updatedb niet.
🔲 Opties van het locate-commando
| Optie | Uitleg | |
|---|---|---|
| -i | Hoofdletters negeren | |
| -c | Alleen het aantal overeenkomsten in plaats van paden | |
| -l= -n | Zet er een getal achter om de resultaten tot zoveel te beperken. -l 3 | |
| -b | Alleen de bestandsnaam aan het eind van het pad vergelijken | |
| -e | Bestanden weglaten die in de DB staan maar niet meer bestaan | |
| -S | DB-info (mappen · bestanden · grootte) | |
| -r | Zoeken met een reguliere expressie. locate -r "httpd.conf$" |
ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.