Ich spiele mit Befehlen herum, aber wo sind die Befehle? Ich höre es oft durch den Pfad, aber was bedeutet das? Dieser Artikel wurde für Anfänger geschrieben, die darüber nachdachten. Ich lese den Code des Befehls nicht.
Übrigens wird jeder Befehl auf Mac und zsh ausprobiert, für Unix-Serien ist er jedoch ähnlich.
Um früher abzuschließen, bedeutet das Durchlaufen des Pfads **, die Position des externen Befehls im Befehlssuchpfad zu registrieren, damit der externe Befehl ausgeführt werden kann, ohne ihn im Pfad anzugeben **. Details werden unten beschrieben.
Die Befehle umfassen ** interne Befehle (integrierte Befehle) **, die in die Shell integriert sind, und ** externe Befehle **, die als Dateien in einem bestimmten Verzeichnis abgelegt werden, wie unten gezeigt.
Versuchen wir die Position des Befehls ls
mit dem Befehl which
.
$ which ls
Ausgabe:
/bin/ls
Anscheinend ist es direkt unter "/ bin".
Nun schauen wir in / bin
.
$ ls /bin
Ausgabe:
[ chmod dash df expr ksh ln mv pwd sh sync unlink
bash cp date echo hostname launchctl ls pax rm sleep tcsh wait4path
cat csh dd ed kill link mkdir ps rmdir stty test zsh
Sie haben eine Datei mit demselben Namen wie Ihr Lieblingsbefehl.
Wenn Sie sich den Inhalt des Befehls ls
ansehen, sehen Sie, dass es sich um eine ** Binärdatei ** handelt.
$ od -h /bin/ls | more
Ausgabe:
0000000 facf feed 0007 0100 0003 0000 0002 0000
0000020 0013 0000 0710 0000 0085 0020 0000 0000
0000040 0019 0000 0048 0000 5f5f 4150 4547 455a
0000060 4f52 0000 0000 0000 0000 0000 0000 0000
(Abkürzung)
Interne Befehle werden beim Starten des Computers in den Speicher geladen, aber ** externe Befehle existieren als Dateien auf der Festplatte (z. B. unter / bin
) und werden jedes Mal von der Festplatte geladen **.
Dies bedeutet, dass Sie beim Ausführen eines externen Befehls ** den direkten Pfad zum Ausführen des externen Befehls ** angeben können.
** Beispiel: Führen Sie den Befehl ls direkt aus, um den Speicherort der Datei anzugeben. **
$ /bin/ls
Sie können den Befehl wie oben beschrieben ausführen, er ist jedoch problematisch, sodass eine Umgebungsvariable namens "PATH" vorhanden ist. Dies wird streng als ** Befehlssuchpfad (Befehlssuchpfad) ** bezeichnet.
Auch wenn Sie den Pfad nicht direkt angeben, durchsucht das Programm den Befehlssuchpfad ohne Berechtigung, sodass Sie den Befehl ls
wie unten gezeigt ausführen können.
$ ls
Um den Inhalt von "PATH" einmal anzuzeigen, verwenden Sie den Befehl "echo", um "PATH" anzuzeigen.
$ echo $PATH
Ausgabe:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
Bei Betrachtung der Ergebnisse wurden einige Verzeichnisse getrennt durch :
ausgegeben.
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Library/Apple/usr/bin
Diese geben den Ort (Pfad) des externen Befehls an.
Wenn Sie versuchen, einen Befehl auszuführen, der "PATH" nicht übergibt oder nicht existiert, erhalten Sie Folgendes.
** Beispiel: für zsh **
zsh: command not found: hogehoge
Wenn Sie den Befehl bereits hätten eingeben sollen, aber "nicht gefunden" usw. angezeigt wird. Oft geht der "Pfad" nicht vorbei.
Um "PATH" zu übergeben, müssen Sie den Pfad des Verzeichnisses, in dem der gewünschte Befehl abgelegt ist, zur ** Umgebungsvariablen "PATH" hinzufügen. ** ** **
Zum Beispiel, wenn Sie den Befehl php
unter / hogehoge / bin
verwenden möchten
Fügen Sie / hogehoge / bin
zur Umgebungsvariablen PATH
hinzu.
Versuchen Sie es mit dem Befehl export
hinzuzufügen.
$ export PATH="/hogehoge/bin:$PATH"
Überprüfen Sie, ob es mit "echo" hinzugefügt wurde. (Sie können auch den hinzugefügten Befehl ausprobieren.)
$ echo $PATH
Ausgabe:
/hogehoge/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
Wie oben erwähnt, können Sie Umgebungsvariablen mit dem Befehl "export" hinzufügen. Es ist jedoch mühsam, jedes Mal mit dem Befehl "export" hinzuzufügen, also grundsätzlich ** in der Konfigurationsdatei der von Ihnen verwendeten Shell. Anhängen. ** ** **
Dies überschreibt automatisch "PATH", wenn Sie die Shell starten.
** Beispiel: für zsh **
Fügen Sie mit export
in die .zshrc
-Datei im HOME-Verzeichnis ein.
.zshrc
export PATH="/hogehoge/bin:$PATH"
Am Ende habe ich "$ PATH" geschrieben, wodurch die vorhandene Umgebungsvariable "PATH" erweitert wird. Mit anderen Worten, es hat die gleiche Bedeutung wie:
.zshrc
export PATH="/hogehoge/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
Wenn Sie zu diesem Zeitpunkt den vorhandenen vollständig überschreiben, ** können verschiedene Befehle nicht verwendet werden. Seien Sie also vorsichtig. ** ** ** Wenn Sie beispielsweise Folgendes tun, werden Befehle wie unter ** / bin nicht gelesen. ** ** **
.zshrc
export PATH="/hogehoge/bin"
Wie oben beschrieben, ermöglicht die Umgebungsvariable "PATH" die Ausführung eines vorgegebenen externen Befehls, ohne den Pfad direkt anzugeben. Wenn Sie nichts über die Shell-Einstellungsdatei wissen, können Sie die verwendete Shell überprüfen und googeln, wie sie geschrieben wird.
"PATH" hat Priorität. In den folgenden Fällen wird es beispielsweise in der Reihenfolge von "/ hogehoge / bin" auf der linken Seite gelesen.
PATH=/hogehoge/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
Zum Beispiel, wenn es Befehle php
in / hogehoge / bin
und / use / local / bin
gibt,
$ php
Wenn Sie ausführen, ist dies der Befehl "php" von "/ hogehoge / bin".
Wie Sie sehen können, müssen Sie bei der Angabe von "PATH" auch auf die Priorität achten.
Die Position externer Befehle wird von FHS (Filesystem Hierarchy Standard) in Form von ** "Lassen Sie uns diese Befehle an dieser Position platzieren!" ** standardisiert.
Unabhängig davon, mit welchem Linux-System Sie spielen, wird auf einen Blick klar, dass "dieses / bin
-Verzeichnis Kernbefehle enthält, die auch im Notfall verwendet werden können".
(Obwohl es standardisiert ist, wird es nicht erzwungen, so dass seltsame Befehle für jedes Betriebssystem an seltsamen Orten sein können.)
In der folgenden Tabelle sind die Positionen der durch diese standardisierten externen Befehle und die Unterschiede zwischen ihnen zusammengefasst. Schauen wir uns jedoch die einzelnen Befehle an.
Verzeichnis | Einzelbenutzermodus | Zusammenfassung |
---|---|---|
/bin | verfügbar | Die, die auch im Notfall verwendet werden kann |
/usr/bin | außer Betrieb | General |
/usr/local/bin | außer Betrieb | Mein eigenes Skript |
/sbin | verfügbar | Erfordert Superuser- (Root-) Berechtigungen |
/usr/sbin | außer Betrieb | Erfordert Superuser- (Root-) Berechtigungen |
/bin Platzieren Sie die ** wichtigsten externen Befehle **, die im Einzelbenutzermodus verwendet werden können, in diesem Verzeichnis. Der Einzelbenutzermodus wird im Notfall verwendet, z. B. wenn das Betriebssystem nicht normal gestartet werden kann.
Wie ich zu Beginn bestätigt habe, war der folgende Befehl im / bin
meines Macbook Pro enthalten.
[ chmod dash df expr ksh ln mv pwd sh sync unlink
bash cp date echo hostname launchctl ls pax rm sleep tcsh wait4path
cat csh dd ed kill link mkdir ps rmdir stty test zsh
Wenn Sie diese Befehle nicht kennen, können Sie sie nachschlagen und feststellen, dass sie alle einfach und wichtig sind.
/usr/bin Anstatt es im Einzelbenutzermodus zu verwenden, setzen Sie im Grunde die vom Paketmanager (Paketverwaltungssystem) verwalteten Befehle. Es gibt verschiedene Paketmanager für jedes Betriebssystem, aber ich werde sie hier nicht erwähnen. Überprüfen Sie im Verzeichnis auf Ihrem Computer, welche Befehle tatsächlich verfügbar sind.
/usr/local/bin Fügen Sie nicht verwaltete Befehle in den Paket-Manager ein, die im Einzelbenutzermodus nicht verwendet werden.
Übrigens, Homebrew, ein Paketmanager, der Mac-Benutzern vertraut ist, Verwenden Sie dieses Verzeichnis. Auf der Homebrew-Seite erfahren Sie, warum Homebrew diesen Speicherort verwendet.
https://docs.brew.sh/FAQ#why-does-homebrew-prefer-i-install-to-usrlocal
Übersetzt heißt es:
Apple hat dieses Verzeichnis für Nicht-Systemdienstprogramme zugewiesen. Dies bedeutet, dass sich standardmäßig keine Dateien in / usr / local befinden, sodass Sie sich keine Sorgen machen müssen, Ihre vorhandenen oder Systemtools zu ruinieren.
Es wird grundsätzlich genauso behandelt wie das Verzeichnis jeder obigen Hierarchie, aber im Gegensatz zu "bin" werden Verwaltungsbefehle abgelegt, mit denen der Systemadministrator herumspielen kann. Diese stehen regulären Benutzern nicht zur Verfügung, da sie Superuser- (Root-) Berechtigungen erfordern.
Wie ich zuvor geschrieben habe, ist die Schlussfolgerung
Durch PATH zu gelangen bedeutet, die Position eines externen Befehls im Befehlssuchpfad zu registrieren, damit der externe Befehl ausgeführt werden kann, ohne ihn im Pfad anzugeben.
Es war das.
Ich habe nicht viele Artikel gefunden, in denen interne und externe Befehle beim Durchlaufen des Pfads erwähnt wurden, also habe ich diesmal geschrieben.