Mac OS X: luoghi convenzionali in cui i file binari dovrebbero vivere


61

Ho scaricato un'applicazione che è un'applicazione da riga di comando e desidero metterla da qualche parte dove posso eseguirla dalla riga di comando senza dover digitare esplicitamente il percorso.

  1. Quali sono i percorsi convenzionali utilizzati per qualcosa del genere? /usr/bin? Esistono diverse opzioni, una se la voglio per tutti gli utenti e una se la voglio solo per un determinato utente, come il mio account amministratore?

  2. O dovrei inserirlo nella propria directory nella directory Applicazioni e aggiungerlo al percorso? In tal caso, quale file controlla dove è impostato il percorso?

Risposte:


53

Risposta principale: probabilmente lo desideri /usr/local/bin. A seconda della recente macOS, potrebbe essere necessario aggiornare le impostazioni predefinite $PATH. Vedi sotto per ulteriori dettagli.

AGGIORNAMENTO 12-01-2018 Ad un certo punto da quando ho scritto la mia risposta originale, Apple ha cambiato il suo valore predefinito $PATH. Di conseguenza, molto di ciò che dico di seguito è irrilevante per i recenti Mac. Se si digita echo $PATHun terminale ed /usr/local/binè il primo, è possibile ignorare tutto ciò che segue sulla modifica di $PATH.

Risposta originale

I Mac sono insoliti in questo senso. La $PATHvariabile predefinita per un utente normale è simile alla seguente:

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

Mettendo /usr/local/bin dopo /usr/bin e /bin, Mac inverte il solito sistema. Normalmente, puoi inserire qualcosa /usr/local/bin(ad esempio un secondo interprete Perl, compilato in un modo non standard), e quindi un utente normale colpirà prima quello personalizzato anziché quello a livello di sistema. Questo è buono. Gli utenti possono ottenere varianti, ma il sistema rimane puro. Dato il valore predefinito di Apple $PATH, tuttavia, gli elementi in /usr/bino /binverranno trovati prima di qualsiasi cosa in /usr/local/bin. (Questo sostanzialmente vanifica lo scopo di installare, ad esempio, il Perl personalizzato /usr/local/bin.)

Per risolvere questo problema, puoi cambiare l'utente normale $PATHmodificando il .profilefile nella home directory dell'utente. (Tale file potrebbe non esistere, se si dispone di un'installazione nuovissima. In tal caso, crearlo.)

Semi-correlati: Homebrew offre un'eccellente gestione dei pacchetti per Mac. Per impostazione predefinita, Homebrew installa il software /usr/local, ma lo fa in un modo che rende molto facile rimuovere le cose e tornare in uno stato successivo.


1
Sul mio OsX 10.13.6 appena installato (High Sierra), il percorso contiene prima / usr / local / bin (anche se la cartella non esiste nemmeno) per impostazione predefinita.
Legolas,

1
@Legolas Apple sembra aver cambiato il modo in cui gestiscono questo. Modifica il post.
Telemaco,

9

/usr/local/bine /usr/local/sbinvale la pena aggiungerlo al tuo percorso, dato che molti makefile per le build di origine sono installati in modo predefinito.

Se usi MacPorts , vale la pena aggiungerlo /opt/local/bine /opt/local/sbinpure.

Il modo migliore per farlo è aggiungere

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$PATH

al .bashrcfile nella directory home (che è nascosto, quindi l'interfaccia della riga di comando è il modo migliore per farlo) oppure, se si desidera modificare il percorso di sistema, aggiungere la stessa riga a /etc/bashrc(non nascosto), ma si è necessario sudofarlo.

Se non hai un .bashrca casa di nessun utente, puoi crearne uno e aggiungere questa riga ad esso, ma ricorda di modificare le autorizzazioni sul file che crei per renderlo leggibile dall'utente in questione (ovviamente non pertinente se tu ' lo stai facendo per il tuo profilo).

Alla $PATHfine accoda il percorso predefinito del sistema a qualunque cosa tu abbia inserito prima. Si noti che il sistema cerca i binari nell'ordine dei percorsi indicati, quindi se si installa un binario /usr/localo /opt/localche è installato anche di default sul sistema, le versioni installate verranno trovate per prime, il che può (sebbene raramente) turbare le cose. Vale la pena fare attenzione.

Buone informazioni sono qui .

Devo notare che quanto sopra presuppone che tu stia utilizzando Bash per la shell, che è l'impostazione predefinita su Mac OS X v10.4 (Tiger) e Mac OS X v10.5 (Leopard), ma non sui sistemi precedenti, che tcshinvece utilizzavano , che ha una sintassi diversa.

Spero che aiuti...


1
/usr/local/binè già in un OS X predefinito $PATH(anche se troppo tardi - vedi la mia risposta). Se usi MacPorts, il suo programma di installazione dovrebbe modificare il tuo percorso secondo necessità, almeno nella mia esperienza. Detto questo, è bene che gli utenti sappiano cosa sta facendo (e perché).
Telemaco,

@Telemachus ben individuato: ogni volta che costruisco un Mac per me stesso, personalizzo per prima cosa l'inferno, quindi non riesco mai a ricordare ciò che è standard e ciò che è mio!
avstrallen,

1
So cosa stai pensando all'installer di MacPorts che personalizza i percorsi in .profile, ma in passato ho avuto un'occasione in cui per qualche motivo, non so cosa, questo non è riuscito a rimanere (che mi ha confuso l'inferno per un bel po '!) ... quindi da allora tendo a collegarlo a mano ...
avstrallen,

"che è nascosto, quindi l'interfaccia della riga di comando è il modo migliore per farlo": domanda stupida, come si esegue TextEdit su un file dal prompt dei comandi?
Jason S,

Non è una domanda stupida: usa il opencomando con il nome del file come argomento e dovrebbe aprirsi con qualsiasi cosa sia impostato come editor di testo predefinito (TextEdit come standard).
avstrallen,

7

Tendo ad andare con /usr/local. Ecco una bella spiegazione del perché , che si riferisce al Filesystem Hierarchy Standard (FHS) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢, che in turn dice di /usr/local:

Gerarchia terziaria per dati locali, specifica per questo host. In genere ha ulteriori sottodirectory, ad esempio bin, lib, share.⁢


Sì, è praticamente lo stesso di altri sistemi operativi * nix al riguardo.
jtbandes,

2
Si prega di citare le parti essenziali della risposta dai collegamenti di riferimento, in quanto la risposta può diventare non valida se le pagine collegate cambiano.
DavidPostill
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.