2016-01-25 3 views
6

Sul mio Mac ho usato molto bash. Per le mie impostazioni di ambiente ho aggiunto /usr/bin e /usr/local/bin a $PATH come al solito.

Mentre so che cosa sono circa /usr/bin e /usr/local/bin, sono curioso che dovrebbe andare prima di un altro, per convenzione? E c'è una ragione specifica per quello?

Simile è per /usr/lib e /usr/local/lib - si spera che la risposta sia la stessa o simile.

un po 'di più - Solo un'estensione della domanda originale, come si ordinerebbe quanto segue in $ PATH seguendo la convenzione e perché?

/bin 
/sbin 
/usr/bin 
/usr/sbin 
/usr/local/bin 
/usr/local/sbin 
/opt/local/bin 
/opt/local/sbin 
+0

Vedere anche [questa domanda correlata] (http://unix.stackexchange.com/questions/8656/usr-bin-vs-usr-local-bin-on-linux). – e0k

+0

Grazie per l'aiuto. Anche quel post è stato molto utile. – Bruce

risposta

17

/usr/bin è dove vanno i binari forniti dal sistema operativo. /usr/local/bin è dove vanno i binari forniti dall'utente. Quando si digita il nome di un comando sulla riga di comando, la shell cerca tale comando nei percorsi contenuti nella variabile di ambiente $PATHnell'ordine. Un modello comune è quello di avere /usr/local/bin precedere /usr/bin in $PATH. Questo ti permette di installare versioni alternative dei binari e farli "sovrascrivere" con garbo i binari forniti dal sistema operativo. E gli aggiornamenti del sistema operativo non comprimono i pacchetti installati dall'utente. Questo schema è particolarmente utilizzato in OSX dal popolare strumento di gestione dei pacchetti Homebrew.

Ad esempio, al momento della stesura di questo documento, OSX El Capitan fornisce git versione 2.5.4 (in /usr/bin). Se si desidera una versione più recente, è possibile utilizzare Homebrew per installare git versione 2.7.0 (in /usr/local/bin). Poiché /usr/local/bin arriva prima dello /usr/bin nella variabile di ambiente $PATH, quando si esegue il comando git in una shell, verrà utilizzata la versione Homebrew più recente.

su fresco nuovo Mac con OSX El Capitan (mi capita di avere uno), il file /etc/paths contiene quanto segue:

/usr/local/bin 
/usr/bin 
/bin 
/usr/sbin 
/sbin 

che produce la seguente variabile $PATH ambiente:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 

che è compatibile con homebrew. Raccomando di attenersi a questo predefinito OSX. Se vuoi davvero includere /usr/local/sbin (elencato nella tua domanda sopra), lo metterei prima dello /usr/sbin per ragioni simili a sopra. Per quanto riguarda /opt/local/bin e /opt/local/sbin, non ho trovato personalmente la necessità di aggiungerli al percorso ma sembra che potrebbero andare in un punto simile come gli analoghi /usr/local, dal momento che /opt contiene tradizionalmente i binari installati dall'utente.

Nota: la stessa spiegazione si applica a /usr/lib rispetto a /usr/local/lib.

+0

Grazie mille. In realtà, stavo modificando la domanda - ti dispiacerebbe rispondere un po 'più tardi? – Bruce

+0

Sicuro. Ho appena aggiornato la mia risposta. – Asaph

+1

Ottima risposta. Grazie per l'aiuto! – Bruce