Linux which, whereis, locate: 3 comandi per trovare la posizione (percorso) di un file

A volte devi modificare httpd.conf ma non sai dove sia il file, oppure un comando con lo stesso nome esiste in due posti e non è chiaro quale venga eseguito. Il comando which di Linux trova il file che viene davvero eseguito, il comando whereis trova l'eseguibile più le cartelle di configurazione e i manuali, e il comando locate trova ogni percorso che contiene il nome. Questo articolo confronta i tre in una tabella e ti fa provarli su un server virtuale nel browser.
Su AlmaLinux 9.8 which è nel pacchetto which 2.21 e whereis in util-linux 2.37.4, quindi funzionano subito, mentre locate richiede di installare a parte il pacchetto mlocate 0.26.
✅ which vs whereis vs locate
I tre comandi cercano in posti diversi. which e whereis frugano sul momento cartelle fisse, mentre locate cerca i nomi in un elenco di file (DB) creato in anticipo.
| Comando | Cosa trova | Dove cerca | File nuovi |
|---|---|---|---|
| which | L'unico file di comando che viene eseguito, più gli alias | Cartelle elencate nel PATH | Trovati subito |
| whereis | Eseguibile · cartelle di configurazione · manuali | Cartelle fisse come /usr/bin · /etc · /usr/share/man | Trovati subito |
| locate | Ogni file e cartella che contiene il nome | Un DB creato in anticipo (/var/lib/mlocate/mlocate.db) | Trovati dopo updatedb |
Cerca lo stesso httpd con which e whereis e la differenza salta subito all'occhio.
~]# 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 mostra ogni percorso che corrisponde anche solo in parte al nome, quindi digitando [locate httpd.conf] escono anche il manuale (httpd.conf.5.gz) ed eventuali copie di backup, non solo il file di configurazione.
Sul server virtuale qui sotto scegli which, whereis o locate a sinistra per cambiare i chip; facendo clic su un chip si digita quel comando. Puoi anche scriverlo con la tastiera.
Per trovare file per dimensione o data di modifica invece che per nome, usa il comando find; per vedere il percorso della cartella in cui sei, usa il comando pwd.
✅ Comando which di Linux
which cerca nelle cartelle del PATH dalla prima in poi, una alla volta, e mostra il primo eseguibile che trova. È il file che viene davvero eseguito quando digiti il comando.
Su AlmaLinux bash passa a which l'elenco degli alias, quindi per un comando con alias ottieni sia l'alias sia il file reale. Se non è da nessuna parte nel PATH, compare [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 pratica l'unica opzione è -a. Quando lo stesso nome esiste in due cartelle del PATH li mostra entrambi, e quello in cima è quello eseguito davvero.
~]# which ping
/usr/sbin/ping
~]# which -a ping
/usr/sbin/ping
/usr/bin/pingSu AlmaLinux 9.8 /usr/sbin/ping è un link che punta a /usr/bin/ping, quindi il risultato è lo stesso. Un programma installato da te in /usr/local/bin viene eseguito prima di quello in /usr/bin per l'ordine del PATH.
[which cd] mostra /usr/bin/cd, ma quando digiti cd nella shell viene eseguito il comando interno della shell e non questo file. Controlla se un comando è interno con [type cd], che stampa [cd is a shell builtin].
✅ Comando whereis di Linux
whereis usa il nome del comando per trovare insieme l'eseguibile e i manuali. Ignora il PATH e cerca in cartelle fisse come /usr/bin · /usr/sbin · /usr/lib64 · /etc · /usr/share, quindi compare perfino una cartella di configurazione con lo stesso nome (/etc/httpd).
| Opzione | Descrizione | |
|---|---|---|
| -b | Solo binari. Per httpd: /usr/sbin/httpd e /usr/lib64/httpd · /etc/httpd · /usr/share/httpd | |
| -m | Solo manuali (/usr/share/man · /usr/share/info) | |
| -s | Solo sorgenti. In un'installazione predefinita di AlmaLinux 9.8 compare solo il nome, come [httpd:] | |
| -l | Elenco delle cartelle in cui cerca 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.gzSe non trova niente compare solo il nome, come [htop:]. which restituisce codice di uscita 1 quando non trova nulla, whereis invece 0, quindi in uno script usa which per controllare se qualcosa è installato.
✅ Comando locate di Linux
locate non cerca sul disco; cerca i nomi in un DB creato in anticipo. Per questo è veloce, ma non trova i file creati dopo la creazione del DB.
~]# dnf -y install mlocate
~]# updatedbSe lo esegui subito dopo l'installazione non c'è ancora il DB e compare [locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory]; eseguendo updatedb una volta viene creato. Da lì in poi mlocate-updatedb.timer ricostruisce il DB una volta al giorno.
Un file nuovo compare solo dopo updatedb, e uno cancellato continua a comparire fino ad allora. Per vedere solo i file che esistono adesso, aggiungi -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 in /etc/updatedb.conf include /tmp · /var/tmp · /mnt · /media, quindi i file in queste cartelle non compaiono nemmeno dopo updatedb.
🔲 Opzioni del comando locate
| Opzione | Descrizione | |
|---|---|---|
| -i | Ignorare maiuscole e minuscole | |
| -c | Solo il numero di corrispondenze invece dei percorsi | |
| -l= -n | Aggiungi un numero per limitare i risultati a quel numero. -l 3 | |
| -b | Confrontare solo il nome del file alla fine del percorso | |
| -e | Escludere i file presenti nel DB ma che non esistono più | |
| -S | Informazioni sul DB (cartelle · file · dimensione) | |
| -r | Cercare con un'espressione regolare. locate -r "httpd.conf$" |
ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.