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.