Qual è la differenza fondamentale tra locate
whereis
e which
comando.
La differenza fondamentale che ho osservato è che locate
individua tutti i nomi di file correlati nell'intero filesystem, mentre whereis
e which
i comandi forniscono solo la posizione (sistema/indirizzo locale del file) dell'applicazione installata. Quanto è accurata la mia osservazione?
Come vengono implementati internamente questi comandi. Perché locate
funziona così velocemente rispetto alla ricerca con trattino, mentre locate
deve cercare un nome file particolare che corrisponda alla stringa di destinazione nell'intera gerarchia del filesystem?
Risposta accettata:
which
trova l'eseguibile binario del programma (se è nel tuo PERCORSO). man which
spiega più chiaramente:
che restituisce i percorsi dei file (o collegamenti) che sarebbero
eseguiti nell'ambiente corrente, se i suoi argomenti fossero stati forniti come comandi in una shell rigorosamente conforme a POSIX. Lo fa cercando nel PATH i file eseguibili che corrispondono ai nomi degli argomenti. Non segue collegamenti simbolici.
whereis
trova i file binari, sorgente e man per un programma. Ad esempio
$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz
Puoi ottenere ulteriori dettagli passando l'output di questi comandi come argomenti a ls -l
o file
$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8
$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8
locate
infatti trova tutti i file che hanno il modello specificato ovunque nei loro percorsi. Puoi dirgli di trovare solo i file e le directory i cui nomi (piuttosto che percorsi completi) includi il modello con -b
opzione, che di solito è ciò che desideri, e fornisce un elenco meno ingombrante.
locate
è veloce perché utilizza un database binario che viene aggiornato periodicamente (una volta al giorno, da cron
). Puoi aggiornarlo tu stesso per assicurarti che i file aggiunti di recente vengano trovati eseguendo sudo updatedb
Un'altra cosa su locate
– non importa se i file esistono ancora o meno, quindi per evitare di trovare file eliminati di recente, usa -e
. Spesso faccio anche pipe a less
poiché l'elenco può essere lungo. In genere lo faccio:
sudo updatedb && locate -b -e gimp | less
Come funziona il trattino di Unity è spiegato qui:utilizza Zeitgeist per indicizzare i file di sistema e imparare dai modelli di utilizzo e consente ad altre applicazioni di utilizzare questi dati, quindi sta facendo molto più lavoro di locate
.