Mac OS X: Herkömmliche Orte, an denen Binärdateien gespeichert werden sollen

61

Ich habe eine Anwendung heruntergeladen, die eine Befehlszeilenanwendung ist, und möchte sie an einer Stelle platzieren, an der ich sie über die Befehlszeile ausführen kann, ohne den Pfad explizit eingeben zu müssen.

  1. Was sind die herkömmlichen Pfade für so etwas? /usr/bin? Gibt es verschiedene Optionen, eine, wenn ich es für alle Benutzer möchte, und eine, wenn ich es nur für einen bestimmten Benutzer möchte, wie z. B. mein Administratorkonto?

  2. Oder sollte ich es in einem eigenen Verzeichnis unter dem Anwendungsverzeichnis ablegen und dem Pfad hinzufügen? Wenn ja, welche Datei steuert, wo der Pfad festgelegt wird?

Jason S
quelle

Antworten:

53

Kernantwort: Sie wollen wahrscheinlich /usr/local/bin. Je nachdem, wie aktuell Ihr macOS ist, müssen Sie möglicherweise Ihre Standardeinstellungen aktualisieren $PATH. Siehe unten für weitere Details.

UPDATE 12-01-2018 Irgendwann, seit ich meine ursprüngliche Antwort geschrieben habe, hat Apple seine Standardeinstellung geändert $PATH. Infolgedessen ist vieles, was ich im Folgenden sage, für neuere Macs irrelevant. Wenn Sie echo $PATHein Terminal eingeben und /usr/local/bindas erste sind, können Sie alles ignorieren, was Sie zum Ändern Ihres Terminals benötigen $PATH.

Ursprüngliche Antwort

Macs sind in dieser Hinsicht ungewöhnlich. Die Standardvariable $PATHfür einen normalen Benutzer sieht folgendermaßen aus:

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

Durch Setzen /usr/local/bin nach /usr/bin und /binkehrt Mac das übliche System um. Normalerweise können Sie etwas einfügen /usr/local/bin(beispielsweise einen zweiten Perl-Interpreter, der auf eine nicht standardmäßige Weise kompiliert wurde), und dann trifft ein normaler Benutzer zuerst den benutzerdefinierten und nicht den systemweiten Interpreter. Das ist gut. Benutzer können Varianten erhalten, aber das System bleibt rein. In Anbetracht der Standardeinstellung von Apple $PATHwerden Objekte in /usr/binoder /binvor allem in gefunden /usr/local/bin. (Dies macht im Grunde den Zweck der Installation zunichte, z. B. das benutzerdefinierte Perl in /usr/local/bin.)

Um dies zu beheben, können Sie den regulären Benutzer ändern, $PATHindem Sie die .profileDatei im Basisverzeichnis des Benutzers bearbeiten . (Diese Datei ist möglicherweise nicht vorhanden, wenn Sie eine brandneue Installation haben. Erstellen Sie sie in diesem Fall.)

Teilweise verwandt: Homebrew bietet eine hervorragende Paketverwaltung für Macs. Standardmäßig installiert Homebrew Software in /usr/local, aber dies geschieht auf eine Weise, die es sehr einfach macht, Dinge zu entfernen und später in einen Vanillezustand zurückzukehren.

Telemachus
quelle
1
Auf meinem frisch installierten OsX 10.13.6 (High Sierra) enthält der Pfad standardmäßig zuerst / usr / local / bin (obwohl der Ordner noch nicht existiert).
Legolas
1
@Legolas Apple scheint geändert zu haben, wie sie damit umgehen. Ich werde den Beitrag bearbeiten.
Telemachus
9

/usr/local/binund /usr/local/sbines lohnt sich, sie zu Ihrem Pfad hinzuzufügen, da viele Makefiles für Quell-Builds standardmäßig dort installiert werden.

Wenn Sie MacPorts , es lohnt Zugabe /opt/local/binund /opt/local/sbinals gut.

Der beste Weg, dies zu tun, ist das Hinzufügen

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

zu der .bashrcDatei in Ihrem Ausgangsverzeichnis (die ausgeblendet ist, daher ist die CLI der beste Weg, dies zu tun) oder, wenn Sie den systemweiten Pfad ändern möchten, fügen Sie dieselbe Zeile hinzu /etc/bashrc(nicht ausgeblendet), aber Sie werden müssen sudodies tun.

Wenn Sie .bashrcbei keinem Benutzer zu Hause eine haben, können Sie eine erstellen und diese Zeile hinzufügen. Denken Sie jedoch daran, die Berechtigungen für die von Ihnen erstellte Datei zu ändern, damit sie für den betreffenden Benutzer lesbar ist (offensichtlich nicht relevant, wenn Sie machst es für dein eigenes Profil).

Am $PATHEnde wird der Standardpfad des Systems an das angefügt, was Sie zuvor eingegeben haben. Beachten Sie, dass das System nach Binärdateien in der angegebenen Reihenfolge sucht. Wenn Sie also eine Binärdatei installieren /usr/localoder /opt/localdiese ebenfalls standardmäßig auf dem System installiert ist, werden zuerst die von Ihnen installierten Versionen gefunden, was (wenn auch selten) zu Problemen führen kann. Es lohnt sich, darauf zu achten.

Gute Informationen gibt es hier .

Ich sollte beachten, dass oben davon ausgegangen wird , dass Sie Bash für die Shell verwenden. Dies ist die Standardeinstellung unter Mac OS X 10.4 (Tiger) und Mac OS X 10.5 (Leopard), jedoch nicht auf früheren Systemen, die tcshstattdessen verwendet wurden. die hat eine andere Syntax.

Ich hoffe das hilft...

avstrallen
quelle
1
/usr/local/binist bereits in einem Standard-OS X $PATH(obwohl zu spät - siehe meine Antwort). Wenn Sie MacPorts verwenden, sollte das Installationsprogramm Ihren Pfad nach Bedarf ändern - zumindest nach meiner Erfahrung. Das heißt, es ist gut für die Benutzer zu wissen, was es tut (und warum).
Telemachus
Gut gesehen @Telemachus: Immer wenn ich einen Mac für mich selbst baue, passe ich als Erstes die Hölle aus dem Weg an, sodass ich mich nie erinnern kann, was Standard ist und was mir gehört!
Avstrallen
1
Ich weiß, was Sie von dem MacPorts-Installationsprogramm halten, das die Pfade in .profile anpasst, aber ich hatte in der Vergangenheit eine Gelegenheit, in der ich aus irgendeinem Grund nicht wusste, warum dies fehlschlug (was mich verdammt verwirrte) eine ganze Weile!) ... also seitdem neige ich dazu, es von Hand
einzudrahten
"Was ist versteckt, so ist die CLI der beste Weg, um dies zu tun": dumme Frage, wie führen Sie TextEdit für eine Datei von der Eingabeaufforderung aus?
Jason S
Keine dumme Frage: Verwenden Sie den openBefehl mit dem Dateinamen als Argument und er sollte mit dem Standard-Texteditor (TextEdit als Standard) geöffnet werden.
Avstrallen
7

Ich neige dazu, mitzugehen /usr/local. Hier ist eine nette Erklärung, warum , die sich auf Filesystem Hierarchy Standard (FHS) bezieht wiederum sagt über /usr/local:

Tertiäre Hierarchie für lokale Daten, die für diesen Host spezifisch sind. Verfügt normalerweise über weitere Unterverzeichnisse, z. B. bin, lib, share

John Topley
quelle
Ja, diesbezüglich ist es ziemlich dasselbe wie bei anderen * nix-Betriebssystemen.
jtbandes
2
Bitte zitieren Sie die wesentlichen Teile der Antwort aus dem / den Verweis (en), da die Antwort ungültig werden kann, wenn sich die verlinkte (n) Seite (n) ändern.
DavidPostill