So verwenden Sie pushd und popd unter Linux

Viele Linux-Benutzer sind möglicherweise noch nicht mit den Befehlen `pushd` und `popd` vertraut, obwohl diese schon lange existieren. Sie können die Navigation in Verzeichnissen über die Kommandozeile erheblich beschleunigen. Wir zeigen Ihnen, wie diese funktionieren.

Was genau bewirken pushd und popd?

Eine der Innovationen, die Bill Joy in seine C-Shell von 1978 einbrachte, war das Konzept eines Verzeichnisstacks und die zugehörigen Befehle `pushd` und `popd` zur Manipulation dieses Stacks. Aufgrund der weit verbreiteten Übernahme wurden Verzeichnisstacks und die Befehle `pushd` und `popd` schnell in andere Shells (wie Bash) und sogar in andere Betriebssysteme integriert.

Das Stapelprinzip ist einfach: Elemente werden nacheinander auf den Stapel gelegt, wobei das zuletzt hinzugefügte Element immer ganz oben liegt. Wenn Elemente vom Stapel entfernt werden, geschieht dies in der Reihenfolge von oben nach unten. Solche Stapel werden oft als LIFO (Last In, First Out)-Warteschlangen bezeichnet.

In der Praxis sind `pushd` und `popd` etwas flexibler, aber dieses Modell ist ein guter Ausgangspunkt.

Da wir von einem Verzeichnisstapel sprechen, ist es kaum überraschend, dass das „d“ in `pushd` und `popd` für „directory“ steht. Mit diesen Befehlen können Sie Verzeichnisse auf den Verzeichnisstapel legen oder von dort entfernen.

Aber welchen praktischen Nutzen hat das?

Wie pushd den Stack füllt

Wenn Sie `pushd` verwenden, passieren drei Dinge:

  1. Sie wechseln das Verzeichnis, ähnlich wie bei der Verwendung von `cd`.
  2. Der Name und der Pfad des Verzeichnisses werden dem Stack hinzugefügt.
  3. Der Stack wird als durch Leerzeichen getrennte Liste von Verzeichnissen angezeigt.

Beachten Sie in den folgenden Beispielen, wie der Verzeichnisstack mit jedem neuen `pushd`-Befehl wächst. Achten Sie auch darauf, dass sich die Spitze des Stapels links befindet – hier werden neue Einträge angezeigt.

Nach dem ersten `pushd`-Befehl befinden sich zwei Einträge im Stack: das Verzeichnis, das Sie verlassen haben, und das Verzeichnis, in das Sie gewechselt sind.

Als Beispiel geben wir Folgendes ein:

pushd ~/Desktop
pushd ~/Music
pushd ~/Documents
pushd ~/Pictures
pushd ~

Der letzte `pushd`-Befehl hat uns zurück in unser Home-Verzeichnis gebracht, daher sind der erste und der letzte Eintrag im Stack die Tilde (~), die unser Home-Verzeichnis darstellt. Dies zeigt, dass ein Verzeichnis, selbst wenn es bereits im Stack vorhanden ist, bei weiteren `pushd`-Befehlen erneut hinzugefügt wird.

Beachten Sie auch, dass der Eintrag ganz links im Stack, der zuletzt hinzugefügt wurde, Ihr aktuelles Verzeichnis ist.

Das Kommando dirs

Sie können den Befehl `dirs` verwenden, um den aktuellen Zustand des Verzeichnisstacks anzuzeigen, wie unten dargestellt:

dirs

Dies beeinflusst den Stack nicht, sondern dient nur zur Anzeige. Einige Optionen, die Sie mit `pushd` verwenden können, beziehen sich auf die Position der Verzeichnisse im Stack.

Um die numerische Position der einzelnen Verzeichnisse anzuzeigen, können Sie die Option `-v` (vertikal) wie unten gezeigt verwenden:

dirs -v

Wenn Sie anstelle der Tilde (~) den ausgeschriebenen Pfad zu Ihrem Home-Verzeichnis sehen möchten, können Sie die Option `-l` (langes Format) wie folgt hinzufügen:

dirs -v -l

Ein Verzeichnis zum Stack hinzufügen

Wie wir gesehen haben, erledigt der `pushd`-Befehl drei Dinge: er wechselt Ihr aktuelles Verzeichnis, fügt das neue Verzeichnis dem Stack hinzu und zeigt den Stack an. Sie können die Option `-n` (keine Rotation) verwenden, um dem Stack ein Verzeichnis hinzuzufügen, ohne das aktuelle Verzeichnis zu ändern.

Hier ist unser Verzeichnis-Stack:

dirs -v -l

Nun verwenden wir den `pushd`-Befehl mit der Option `-n` und dem Verzeichnis `/home/dave` als Parameter. Anschließend prüfen wir den Verzeichnisstack erneut.

Wir geben Folgendes ein:

pushd -n /home/dave
dirs -v -l

Das Verzeichnis `/home/dave` wurde dem Stack in Slot 1 hinzugefügt, was der zweite Platz im Stack ist. Es kann nicht die oberste Position einnehmen, da Slot Null immer das aktuelle Verzeichnis ist.

Wir haben das aktuelle Verzeichnis `~/Videos` nicht verlassen, daher wurde es nicht an eine andere Position im Stack verschoben.

Verzeichniswechsel durch Rotation des Stacks

Sie können numerische Parameter mit `pushd` verwenden, um zu einem beliebigen Verzeichnis im Stack zu wechseln, wobei der Stack rotiert wird. Das zu verschiebende Verzeichnis wird dann zum ersten Eintrag im Stack.

Sie beziehen sich auf die Verzeichnisse im Stack durch ihre Positionsnummer. Sie können von oben oder unten im Stack zählen. Bei positiven Zahlen wie +3 zählen Sie von oben; bei negativen Zahlen wie -2 zählen Sie von unten.

Das Verzeichnis `/home/dave/Documents` befindet sich an Position drei. Wir können den folgenden Befehl verwenden, um dieses Verzeichnis zu verschieben:

pushd +3

Die Verzeichnisse im Stapel oberhalb des von uns ausgewählten Verzeichnisses werden an das untere Ende des Stapels verschoben. Unser gewähltes Verzeichnis nimmt nun die oberste Position ein und wir wechseln in dieses Verzeichnis.

Wenn wir in das Verzeichnis am unteren Ende des Stapels wechseln möchten, können wir den folgenden Befehl verwenden:

pushd -0

Das letzte Verzeichnis wird in den ersten Slot verschoben, und alle anderen werden im Stack nach unten verschoben. Wir wechseln in das Verzeichnis `~/Pictures`.

Der Befehl popd

Mit dem Befehl `popd` können Sie Verzeichnisse aus dem Stack entfernen.

Wenn wir uns den Verzeichnisstapel ansehen, können wir erkennen, dass sich an Position 1 das Verzeichnis `/home/dave` befindet. Um dieses aus dem Stack zu entfernen, geben wir die entsprechende Nummer an `popd` weiter:

dirs -v -l
popd +1

Das Verzeichnis `/home/dave` wurde entfernt, und die darunter liegenden Verzeichnisse im Stack sind jeweils um eine Position nach oben gerückt.

Genauso wie bei `pushd` können wir auch bei `popd` von unten im Stack zählen. Um das letzte Verzeichnis aus dem Stack zu entfernen, geben wir Folgendes ein:

popd -0

Das Verzeichnis `~/Music` wird von der letzten Position im Stack entfernt.

Um das Verzeichnis zu wechseln, etwas zu tun und dann zum vorherigen Verzeichnis zurückzukehren, können Sie `pushd` und `popd` zusammen verwenden.

Wir verwenden `pushd`, um in ein anderes Verzeichnis zu wechseln. Wir verwenden `popd`, um das oberste Verzeichnis im Stack zu verwerfen und in das Verzeichnis an der zweiten Position zu wechseln. Dies ist das Verzeichnis, aus dem Sie gerade gewechselt sind, so dass Sie effektiv zu dem Verzeichnis zurückkehren, in dem Sie sich ursprünglich befanden.

Wir geben Folgendes ein:

pushd ~
popd

Wir haben im Verzeichnis `~/Projects` begonnen, sind in das Home-Verzeichnis gewechselt und dann wieder in das Verzeichnis `~/Projects` zurückgekehrt.

Rotation durch den gesamten Stack

Wir veranschaulichen, wie man durch einen Stack mit einigen verschachtelten Verzeichnissen rotiert, aber Sie können beliebige Verzeichnisse überall im Dateisystem verwenden.

Unsere tiefste Verschachtelungsebene ist:

/home/dave/Projects/htg/articles

Ausgehend vom Home-Verzeichnis arbeiten wir uns schrittweise durch jedes Verzeichnis bis zum Verzeichnis `articles`. Dann betrachten wir den Verzeichnisstack.

Wir geben Folgendes ein:

pushd ~/Projects
pushd htg
pushd articles
dirs -v -l

Indem Sie wiederholt den Befehl `pushd +1` eingeben, können Sie den Stack der Verzeichnisse durchlaufen. Wenn Sie dies häufig tun, wäre `pushd +1` ein guter Kandidat für einen Alias.

Geben Sie Folgendes ein:

pushd +1

Das Überschreiben des Stacks

Es ist leicht, zu alten Gewohnheiten zurückzukehren und das Verzeichnis mit `cd` zu wechseln. Wenn Sie dies tun, überschreiben Sie das erste Verzeichnis im Stack. Das ist unvermeidlich, da der erste Slot für das aktuelle Arbeitsverzeichnis reserviert ist – keine der anderen Positionen ändert sich.

Dazu geben Sie Folgendes ein:

dirs -v -l
cd ~/Music
dirs -v -l

Nachdem Sie sich an die Befehle `pushd` und `popd` gewöhnt haben (und diese vielleicht verwenden, um ein paar Aliase zu erstellen), haben Sie eine sehr schnelle Möglichkeit, zwischen Verzeichnissen zu wechseln.

Aus diesem Grund bevorzugen wir die Kommandozeile. Effizienz ist Trumpf, oder?