Non esiste una risposta facile.
/bin
, /usr/bin
e /usr/share
Come menzionato nelle altre risposte, puoi trovare la maggior parte degli eseguibili sotto /bin
o /usr/bin
, ei file di supporto sono installati in /usr/share
.
/usr/local
e /opt
Esistono tuttavia più directory in cui Ubuntu installa le applicazioni. La variabile PATH
, che determina dove cercare un comando immesso, potrebbe darti un indizio, il mio è come ( echo $PATH
in un terminale):
/usr/local/cuda/bin:/usr/local/texlive/2012/bin/x86_64-linux:/usr/games:/home/gerhard/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Come puoi vedere alcuni software sono installati in /usr/local
e hanno la loro directory e bin
. Un altro posto in cui sono installati molti programmi è /opt
. Le proprietà di queste posizioni sono spiegate dal standard della gerarchia del filesystem , che è un'ottima lettura. Sfortunatamente, la differenza tra /opt
e /usr/local
non è spiegata molto bene, qualcuno su unix stackexchange ha avuto una spiegazione più elaborata:
-
/usr/local
è un posto dove installare i file creati dall'amministratore, di solito usando il comando make. L'idea è di evitare conflitti con i file che fanno parte dei sistemi operativi che potrebbero essere sovrascritti o sovrascrivere quelli locali altrimenti. per esempio. /usr/bin/foo
è parte del sistema operativo mentre /usr/local/bin/foo
è un'alternativa locale,
-
/opt
è una directory per installare i pacchetti separati in ciascuna sottodirectory. Sono già stati creati interi pacchetti forniti da un distributore di software indipendente di terze parti. Ad esempio someapp
verrebbe installato in /opt/someapp
, uno dei suoi comandi sarebbe in /opt/someapp/bin/foo
[e di solito un collegamento simbolico viene eseguito in una delle directory bin
in PATH
, oppure il programma è chiamato da un file desktop (vedi sotto)].
Ricerca di un programma o comando specifico
.desktop
file
Per scoprire dove è installato un programma specifico, puoi eseguire una serie di passaggi. Per prima cosa devi localizzare il suo file .desktop
. I file desktop sono simular alle scorciatoie in Windows e per le applicazioni di sistema si trovano in /usr/share/applications
. I file desktop per le applicazioni disponibili solo per l'utente corrente sono in ~/.local/share/applications
. Prendi ad esempio Google Chrome, che ha il file desktop /usr/share/applications/google-chrome.desktop
e cerca la riga che inizia con Exec=
, questo determina come avviare Google Chrome. Dice:
Exec=/opt/google/chrome/google-chrome
Quindi sai che Google Chrome è in /opt
.
Ora per Mozilla Firefox che si trova in /usr/share/applications/firefox.desktop
. Dice semplicemente
Exec=firefox %u
All'inizio questo non sembra essere di aiuto, ma poi ti rendi conto che firefox
deve essere in una directory che si trova nella variabile PATH
(molto probabilmente un bin
), e possiamo vederlo su (vedi sotto).
Ricerca dei comandi
Per cercare i comandi puoi utilizzare uno o più dei seguenti elementi: type
, which
e whereis
(ho incluso un link alle loro pagine di manuale online).
-
tipo : descrive un comando e indica come sarebbe interpretato se usato come nome del comando. I tipi possibili per un comando sono:
- alias (alias di shell)
- funzione (funzione shell)
- builtin (shell builtin)
- file (file del disco)
- parola chiave (parola riservata della shell)
(il tipo stesso è un comando di comando incorporato in bash, provalo con type type
: P)
L'esecuzione di type firefox
ci dà
firefox is /usr/bin/firefox
che è quello che volevamo sapere
Se un comando è un file (che hai controllato con type
) puoi usare anche:
-
quale : mostra il percorso completo del comando,
L'esecuzione di which firefox
ci dà
/usr/bin/firefox
-
whereis : individua i file binario, di origine e di pagina manuale per un comando.
L'esecuzione di whereis firefox
ci dà
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/lib64/firefox /usr/bin/X11/firefox /usr/share/man/man1/firefox.1.gz
Bonus
Puoi esaminare /usr/bin/firefox
più vicino con ls -l /usr/bin/firefox
e questo dà:
/usr/bin/firefox -> ../lib/firefox/firefox.sh*
Sembra che /usr/bin/firefox
sia "solo" un link simbolico allo script /usr/lib/firefox/firefox.sh
. Se controlli lo script, scopri che lo script chiama /usr/lib/firefox/firefox
.
Puoi riposare in pace ora:)
EDIT : consulta anche la risposta di d4nyll per una buona roadmap.