Hai appena installato uno strumento, ma non sai più se si trova in /usr/bin, /usr/local/bin o altrove. L’ordine dov'è Può recuperare il suo binario, il suo codice sorgente e le sue pagine man. Tuttavia, non risponde alla domanda più importante prima di qualsiasi intervento: quale file eseguirà effettivamente la tua shell?
Per evitare di modificare l’impianto difettoso, incrocio le dita. dov'è con comando -v Tipo

Cosa sta cercando davvero Whereis?
Il caso d’uso più semplice consiste nel fornire il nome di un comando, senza alcuna opzione:
dov'è Bash
dove si trova ssh
dove si trova nginx
L’output può contenere più percorsi sulla stessa riga. dov'è Cerca tre tipi di file: il binario, il codice sorgente e la documentazione del manuale. Esamina le posizioni Linux conosciute e tiene anche conto SENTIERO e di Pertanto, non si limita a scansionare gli eseguibili che la tua shell può avviare.
dove è -b bash
dove si trova -m bash
dove è -s bash
-BRicerca di file binari;-Mricerca pagine di manuale e file informativi;-Scercare le fonti.
Una ricerca sorgente vuota non indica necessariamente che il programma sia installato in modo errato. Spesso le distribuzioni installano il file binario e il manuale senza includere il codice sorgente. /usr/srcPer visualizzare i file effettivamente ispezionati sul tuo computer, usa:
dov'è -l
Là dov’è la pagina di manuale descrive in dettaglio questi percorsi e le opzioni disponibili. Questo comando non è una ricerca ricorsiva di file. Per trovare un file arbitrario in una struttura di directory, utilizzare la guida su trovare su Linux.
Verifica il comando effettivamente eseguito dalla shell
Se il tuo obiettivo è sapere cosa apparirà quando digiti python3, nginx montool, inizia con comando -v :
comando -v python3
comando -v nginx
comando -v mytool
se comando -v mytool >/dev/null 2>&1; allora
echo "Il mio strumento è disponibile"
altro
echo "mytool non è stato trovato" >&2
fi
Non utilizzare dov'è per questo test. Quando non viene trovato alcun file corrispondente, può semplicemente visualizzare il nome seguito da due punti e terminare con un codice di ritorno nullo. Lo script concluderebbe quindi erroneamente che il comando esiste.
Tipo va oltre, spiegando come Bash interpreta il nome:
tipo CD
tipo ls
tipo -a ls
tipo -P ls
tipo CDCDè un comando interno della shell;tipo lsmostra la prima definizione utilizzata;tipo -a lsvisualizza alias, funzioni, funzioni integrate ed eseguibili con quel nome;tipo -P lsSENTIERO.
Là Documentazione di tipo GNU Bash Questo descrive con precisione questi risultati. Se stai usando Zsh, Fish o un’altra shell, consulta la relativa documentazione: la risoluzione di alias e funzioni non è la stessa ovunque.
Capire perché “quale” non racconta tutta la storia
Quale rimane una pratica comune nei tutorial:
quale python3
quale nginx
SENTIEROIl problema è che spesso si tratta di un programma esterno che non conosce lo stato esatto della shell corrente. A seconda dell’implementazione e della distribuzione, potrebbe ignorare un alias, una funzione o un comando integrato. Per un test in uno script di shell, è più adatto. Per comprendere una collisione di nomi in una sessione interattiva, digitare -a fornisce ulteriori informazioni.
Un semplice esempio illustra la differenza:
alias ll='ls -lah'
dov'è ll
quale ll
comando -v ll
tipo II
dov'è impossibile trovare un file denominato LL, perché l’alias non è binario. comando -v E Tipo Tuttavia, vedono la ben nota definizione di Bash. L’articolo su alias in Linux Spiega come verificarli e aggirarli senza eliminare la configurazione.
Le collisioni si verificano spesso dopo l’installazione manuale in /usr/local/bin, l’aggiunta di $HOME/.local/bin o la distribuzione di una versione in /optare
dove si trova python3
tipo -a python3
tipo -P python3
readlink -f "$(type -P python3)"
dov'è può visualizzare più file binari e manuali. digitare -a mostra le versioni trovate da Bash in ordine di risoluzione. comando -v conferma la prima scelta, quindi leggerelink -f risolve qualsiasi potenziale collegamento simbolico. Infine, controlla il proprietario del pacchetto del file:
dpkg -S "$(type -P python3)"
rpm -qf "$(type -P python3)"
pacman -Qo "$(type -P python3)"
Eseguire solo il comando appropriato per la propria distribuzione. Se nessun pacchetto contiene il file, potrebbe provenire da un’installazione manuale. Prima di sostituirlo, individuare la sua versione, il suo target effettivo e i servizi che lo utilizzano. Il tutorial su archivi tar.gz su Linux /usr/local/bin deve rimanere tracciabile.
Bash memorizza anche alcuni percorsi che sono già stati risolti. Dopo aver spostato o sostituito un eseguibile, svuota questa cache e poi controlla di nuovo:
hash -r
comando -v python3
tipo -a python3
Se viene caricato prima il file sbagliato, correggere l’ordine di piuttosto che eliminare un file binario casuale. La guida su PERCORSO su Linux il documento descrive in dettaglio il test temporaneo e la modifica permanente.
Per controllare il software installato sotto /optareÈ possibile sostituire i percorsi di ricerca per i file binari o i manuali. L’opzione -F contrassegna la fine dell’elenco delle cartelle e l’inizio dei nomi da cercare:
dove è -b -B /opt/mytool/bin /usr/local/bin -f mytool
dove si trova -m -M /opt/mytool/share/man -f mytool
SENTIEROné il comando eseguito dalla shell. Pertanto, tieni presente il seguente ordine prima di rimuovere o sostituire un programma:
- utilizzo
comando -vper scoprire la definizione attiva; - lancio
digitare -aper rilevare le collisioni; - risolvere i collegamenti con
leggerelink -f - controlla il pacchetto proprietario del file;
-
per trovare i file binari e la relativa documentazione.
Grazie a questi controlli, saprai quale file verrà avviato, da dove proviene e dove trovare il suo manuale. Potrai quindi correggere un’installazione o un… senza cancellare accidentalmente la versione corretta.