Qual'è la differenza tra Locate / whereis / which


13

Qual è la differenza di base tra locate whereise il whichcomando.

La differenza di base che ho osservato è che locateindividua tutti i nomi dei file correlati nell'intero filesystem, mentre i comandi whereise whichforniscono solo la posizione (sistema / indirizzo locale del file) dell'applicazione installata. Quanto è accurata la mia osservazione?

Come vengono implementati questi comandi internamente. Perché locatefunziona così velocemente rispetto alla ricerca del trattino, mentre locatedeve cercare un particolare nome di file corrispondente alla stringa di destinazione nell'intera gerarchia del filesystem?


2
e che dire type? : P
jamesmstone,

@jamesmstone che cosa intendi per typefavore, ti prego di elaborare
Chinmaya B

2
Mi dispiace, stavo solo cercando di aggiungere alla tua domanda. typeè un altro comando che sembra (ai miei occhi) fare una cosa simile a quelle che hai citato.
jamesmstone,

@jamesmstone Non credo ci sia alcun comando di tipo che funzioni nel mio sistema. Non riesco a trovare alcun manuale o pagina di informazioni per il typecomando. Ho provato man typee info type.
Chinmaya B,

Hmm, mi chiedo perché ... Stai usando bash?
jamesmstone,

Risposte:


17

whichtrova l'eseguibile binario del programma (se presente nel PERCORSO). man whichspiega più chiaramente:

che restituisce i percorsi dei file (o collegamenti) che verrebbero eseguiti nell'ambiente attuale, se i suoi argomenti fossero dati come comandi in una shell strettamente conforme a POSIX. Lo fa cercando nel PERCORSO i file eseguibili che corrispondono ai nomi degli argomenti. Non segue collegamenti simbolici.

whereistrova i file binari, di origine e della pagina man per un programma. Per esempio

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

È possibile ottenere ulteriori dettagli passando l'output di questi comandi come argomenti a ls -lofile

$ 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

locateinfatti trova tutti i file che hanno il modello specificato ovunque nei loro percorsi. Puoi dirlo per trovare solo file e directory i cui nomi (piuttosto che percorsi completi) includono il modello con l' -bopzione, che di solito è quello che vuoi, e fornisce un elenco meno ingombrante.

locateè veloce perché utilizza un database binario che viene periodicamente aggiornato (una volta al giorno, da cron). Puoi aggiornarlo tu stesso per assicurarti che i file aggiunti di recente vengano trovati eseguendosudo updatedb

Ancora una cosa locate: non importa se i file esistono ancora o meno, quindi per evitare di trovare file eliminati di recente, utilizzare -e. Spesso faccio pipa anche lessperché l'elenco può essere lungo. In genere faccio:

sudo updatedb && locate -b -e gimp | less

Il modo in cui funziona il dash di Unity è spiegato qui : utilizza Zeitgeist per indicizzare i file di sistema e apprendere dai modelli di utilizzo e consente ad altre applicazioni di utilizzare questi dati, quindi sta facendo molto più lavoro di locate.


puoi confrontare il trattino e individuare le prestazioni del comando e i dettagli di implementazione? L'aggiornamento del database binario dovrebbe essere effettuato dopo la creazione di qualsiasi nuovo file nel sistema, non è vero, quindi quel periodo sarebbe corretto indefinito o è gestito dai processi di sistema?
Chinmaya B,

2
@Creator l'aggiornamento automatico del database viene eseguito da cron, una volta al giorno. Puoi verificare quando installi qualcosa con cui non riesci a trovare immediatamente i file locate. Il trattino usa un indice completamente diverso - più lento perché fa più cose (ho modificato la mia risposta)
Zanna

1
Quindi, per riassumere, individuare è utile e più potente di quale o dove, ma è stupido mentre il trattino è più potente e implementa l'apprendimento automatico. e grazie per il sudo updatedbtuo comando è molto utile non lo sapevo, anche se l'ho usato regolarmente.
Chinmaya B,

@Creator sì, l'hai detto meglio :) felice che abbia aiutato
Zanna,

0

Semplicemente

$ which samba

quale comando cerca nell'elenco dei programmi elencati in basso attraverso le impostazioni del PERCORSO

$ whereis samba

dove comando cerca anche programmi che non sono presenti nell'impostazione PERCORSO

$locate samba

Trova anche i file per nome file ma non cerca la struttura della directory stessa ma solo un database preparato da updatedb. Per questo motivo individuare è più veloce di trovare ma meno preciso. Esempi:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.