2010-05-19 13 views
82

So che quando si è in shell, gli unici comandi che possono essere utilizzati sono quelli che possono essere trovati in qualche directory impostata su PATH. Anche io non so come vedere quali dir sono sulla mia variabile PATH (e questa è un'altra buona domanda che potrebbe essere risolta), quello che mi piacerebbe sapere è:Shell - Come trovare la directory di qualche comando?

Vengo a shell e scrivo:

$ lshw 

Voglio sapere un comando sulla shell che può dirmi DOVE si trova questo comando. In altre parole, dove si trova questo "file eseguibile"?

Qualcosa di simile:

$ location lshw 
/usr/bin 

Chiunque?

risposta

106

Se stai usando Bash o zsh, utilizzare questo:

type -a lshw 

Questo mostrerà se il bersaglio è un comando interno, una funzione, un alias o un eseguibile esterno. Se quest'ultimo, mostrerà ogni posto che appare nel tuo PATH.

bash$ type -a lshw 
lshw is /usr/bin/lshw 
bash$ type -a ls 
ls is aliased to `ls --color=auto' 
ls is /bin/ls 
bash$ zsh 
zsh% type -a which 
which is a shell builtin 
which is /usr/bin/which 

In Bash, per funzioni type -a mostrerà anche la definizione della funzione. Puoi usare declare -f functionname per fare la stessa cosa (devi usarlo per zsh, dal momento che type -a non lo fa).

+0

Grazie a tutti quelli che hanno risposto, ma questa risposta è stata la più emozionante! Grazie! Stavo pensando che sono pazzo, perché ho definito (molto tempo fa) un modo per farlo: 'aggiorna', e questo ha fatto 'apt-get update; apt-get dist-upgrade 'per me. Ma per ora, stavo cercando di trovare qualche file update.sh da qualche parte, e non riuscivo a trovarlo. Ecco perché ho iniziato questa domanda. Ma ora, usando 'type -a update' ho scoperto che questo era solo un alias definito sul mio .bashrc che si trova sul mio ~ home. Grazie davvero. –

+0

@Gabriel: Se non si ha familiarità con 'locate', può aiutare a trovare i file. Usa un database mantenuto da 'updatedb' che viene eseguito da un cron job. Poiché 'locate' cerca un database piuttosto che l'intero filesystem è molto più veloce di' find' (che potrebbe essere usato come ultima risorsa). –

+0

Grazie. Studierò questo strumento e vedrò come updateb è programmato per funzionare sul cronjob di Ubuntu. –

42

Ti piace questa:

which lshw 
+4

anche quale -a lshw per vedere tutti i comandi che corrispondono al percorso. – AlG

+0

Credo che funzioni solo con i comandi (eseguibili sul $ PATH), non con le funzioni. –

5
~$ echo $PATH 
/home/jack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 
~$ whereis lshw 
lshw: /usr/bin/lshw /usr/share/man/man1/lshw.1.gz 
15

PATH è una variabile di ambiente, e possono essere visualizzati con il comando echo:

echo $PATH 

Si tratta di un elenco di percorsi separati dal carattere due punti ' : '

Il comando which t ells voi quale file viene eseguito quando si esegue un comando:

which lshw 

a volte quello che si ottiene è un percorso di un collegamento simbolico; se si vuole tracciare che puntano a cui la vita reale eseguibili, è possibile utilizzare readlink e dei mangimi l'uscita di which:

readlink -f $(which lshw) 

Il parametro -f istruisce readlink continuare a seguire il link simbolico in modo ricorsivo.

Ecco un esempio dalla mia macchina:

$ which firefox 
/usr/bin/firefox 

$ readlink -f $(which firefox) 
/usr/lib/firefox-3.6.3/firefox.sh 
0

La shell Korn, ksh, offre la whence built-in, che identifica altra shell built-in, macro, ecc Il comando which è più portabile, però.

+1

In ksh, 'dove -a' è simile al '' di Bash' -a'. –

Problemi correlati