Differenza tra individuare e quale in Linux


27

Qual è la differenza tra locatee whichin Linux?

Perché quando uso locate mentorelenca tutto il mentore ma quando l'ho usato which mentordice "no mentor in ..." - cosa significa?



Ci sono anche wheree whereis.
Jan Tojnar,

in bash, preferiscono: type -all acommand. E se leggo l'XYProblem dietro la tua domanda: hai un comando, puoi vederlo tramite individuare, ma non puoi eseguirlo? quindi modifica il PERCORSO, nel ~/.profilefile del tuo utente specifico , o se sei convinto di sapere cosa fare, nel /etc/profilefile globale [ATTENZIONE: potresti rompere gli script di sistema (e possibilmente molto del sistema operativo) se aggiungi il percorso sbagliato in $ PATH di / etc / profile ... (es: percorsi contenenti comandi che di solito si trovano altrove). Preferisco solo aggiungere alla fine della variabile. E per favore non mettere ::o un . punto qualsiasi in quel PERCORSO.
Olivier Dulac,

Risposte:


45

Qual è la differenza tra locatee which?

locate utilizza un database precedentemente creato per individuare il file.

locatelegge uno o più database preparati da updatedb(8) e scrive i nomi dei file corrispondenti ad almeno uno dei PATTERN sull'output standard, uno per riga.

Trova sorgente (1) - Pagina man di Linux

updatedbcrea o aggiorna un database utilizzato da locate(1). Se il database esiste già, i suoi dati vengono riutilizzati per evitare di rileggere le directory che non sono state modificate.

updatedbdi solito viene eseguito quotidianamente da cron(8) per aggiornare il database predefinito ( /var/lib/mlocate/mlocate.db)

Fonte aggiornatab (8) - Pagina man di Linux


whichcerca un file eseguibile cercandolo nelle directory nella PATHvariabile ambientale.

whichaccetta uno o più argomenti. Per ciascuno dei suoi argomenti stampa stdoutsul percorso completo degli eseguibili che sarebbero stati eseguiti quando questo argomento fosse stato inserito al prompt della shell. Lo fa cercando un eseguibile o uno script nelle directory elencate nella variabile d'ambiente PATH.

usando lo stesso algoritmo di bash(1).

Fonte che (1) - Pagina man di Linux


locate mentorelenca il mentore, ma which mentordice "nessun mentore in ..."

Cosa significa?

Hai alcuni file nominati mentorche puoi trovare nel locatedatabase.

Non hai un file eseguibile o uno script chiamato mentornel tuo PATH.


2
"updatedb" - buono a sapersi non è solo Microsoft che crea nomi troppo specifici per cose. (In Win32, DeleteObjectelimina un oggetto GDI, CloseHandlechiude un handle del kernel, ecc. Allo stesso modo updatedbaggiorna il locateDB)
user253751

"quale" è anche utile nel caso in cui tu abbia più versioni dello stesso programma che si muovono in varie parti del tuo percorso, quindi ti dice quale viene effettivamente eseguito quando esegui il comando. Ciò mi è stato utile in precedenza nella diagnosi di comportamenti imprevisti, ad esempio, mi ha aiutato a capire che avevo lasciato una versione installata manualmente di un'utilità sul mio sistema in modo tale da sovrascrivere la versione installata dal gestore pacchetti.
Carcer,

11

whichè di localizzare un comando ( whichrestituisce un nome percorso dei file / collegamenti che verrebbero eseguiti nell'ambiente attuale)

locateè trovare i file per nome ( locatelegge uno o più database preparati da updatedbe scrive i nomi dei file corrispondenti almeno uno dei modelli all'output standardizzato, uno per riga)


2
Fornisci l'attribuzione per le tue fonti: le descrizioni nella tua risposta sono tratte direttamente dalle pagine man di tali utilità.
Ripristina Monica iamnotmaynard il

5

locateaccetta un modello glob per impostazione predefinita (può essere utilizzato anche un modello Regex) e cerca nel database /var/lib/mlocate/mlocate.dbqualsiasi nome file corrispondente al modello.

whichè un comando per cercare il percorso completo di un comando nelle directory interpretate dalla PATHvariabile d'ambiente.

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.