Einige Linux-Befehle sind so alltäglich, dass ihre Verwendung kaum noch bewusst wahrgenommen wird. Der Befehl `cd` zum Wechseln von Verzeichnissen gehört definitiv dazu. Es gibt jedoch einige Kniffe, die die Arbeit mit `cd` effizienter gestalten können – oder ihn sogar ganz überflüssig machen.
Ein Befehl im Hintergrund
Wie das Blinzeln, das den ganzen Tag unbewusst geschieht, existieren manche Linux-Befehle am Rande unserer Aufmerksamkeit. Obwohl sie täglich genutzt werden, fallen sie kaum auf, weil sie so klein und unkompliziert sind.
Schon in der ersten Stunde der Nutzung eines Linux-Systems lernt man den Befehl `cd` kennen, der in Bash und anderen Shells enthalten ist. Oftmals ist er aus anderen Betriebssystemen bereits vertraut und bedarf keiner weiteren Erklärung. Er dient dazu, das aktuelle Arbeitsverzeichnis zu ändern. Aber gibt es noch mehr zu wissen?
Tatsächlich gibt es mehr zu entdecken, als man denkt. Im Folgenden finden Sie einige Tipps und Tricks, die Ihre Effizienz steigern können.
Die Standardanwendungen von `cd`
Um die Vollständigkeit zu gewährleisten, werden die Standardanwendungen von `cd` kurz rekapituliert.
Angenommen, Sie befinden sich im Home-Verzeichnis, möchten jedoch nach `/usr/lib/firefox/browser` wechseln und anschließend zum Home-Verzeichnis zurückkehren, können Sie folgende Befehle verwenden:
cd /usr/lib/firefox/browser/
cd /home/dave
Es ist nicht notwendig, den vollständigen Verzeichnispfad einzugeben, denn die automatische Vervollständigung hilft dabei. Nach Eingabe einiger Buchstaben, die den Verzeichnisnamen von anderen unterscheiden, genügt ein Druck auf die Tabulatortaste, um den Namen automatisch zu vervollständigen.
Geben Sie zum Beispiel Folgendes in die Befehlszeile ein:
cd /usr/lib/fire
Drücken Sie nun die Tabulatortaste, und die Shell ergänzt den Rest von „firefox“. Fügen Sie dem Pfad „/b“ hinzu und drücken Sie erneut die Tabulatortaste, wird das Verzeichnis „browser“ ergänzt.
Die Shell fügt einen abschließenden Schrägstrich hinzu, um den Tab-Vervollständigungsprozess zu erleichtern. Im ersten Befehl ist der abschließende Schrägstrich aufgrund dieser automatischen Vervollständigung vorhanden, im zweiten Befehl wurde er hingegen manuell eingegeben.
Die Tilde (~) dient als Kurzform, um von jeder Stelle im Dateisystem schnell zum Home-Verzeichnis zu gelangen. Geben Sie hierzu einfach folgendes ein:
cd ~
Dies sind Beispiele für absolute Pfade, bei denen der gesamte Pfad vom Wurzelverzeichnis des Dateisystems bis zum Zielverzeichnis an `cd` übergeben wird.
Relative Pfade hingegen werden vom aktuellen Arbeitsverzeichnis aus referenziert. Angenommen, im Home-Verzeichnis existiert ein Unterverzeichnis namens `work`. Der Befehl `tree` kann verwendet werden, um die Verzeichnisstruktur im Arbeitsverzeichnis anzuzeigen. Geben Sie hierfür einfach ein:
tree
Das Verzeichnis `work` enthält ein Verzeichnis namens `dev`. Es gibt jedoch auch ein Verzeichnis namens `dev` im Wurzelverzeichnis des Dateisystems. Mit `ls -d` (Verzeichnis) können Sie sich diese anzeigen lassen. Die Option `-hl` (human-readable long listing) bewirkt, dass `ls` gut lesbare Einheiten für die Verzeichnisgrößen verwendet und die Ausgabe im langen Format erfolgt.
Wenn Sie `dev` eingeben, geht die Shell davon aus, dass Sie das `dev` im aktuellen Verzeichnis meinen. Um das `dev` im Wurzelverzeichnis anzuzeigen, fügen Sie einfach einen führenden Schrägstrich hinzu, der das Wurzelverzeichnis des Dateisystems kennzeichnet, wie unten gezeigt:
ls -d dev -hl
ls -d /dev -hl
Der `cd`-Befehl verhält sich in dieser Hinsicht ähnlich wie `ls`. Wenn Sie das Verzeichnis als `dev` referenzieren, wie unten gezeigt, wird davon ausgegangen, dass Sie das Verzeichnis im Arbeitsverzeichnis meinen:
cd dev
Auch längere Pfade ohne führenden Schrägstrich werden relativ zum aktuellen Arbeitsverzeichnis interpretiert, wie hier gezeigt:
cd dev/mobile/android
Verzeichniswechsel mit dem doppelten Punkt
Der Doppelte-Punkt-Identifikator (`..`) steht für das übergeordnete Verzeichnis des aktuellen Arbeitsverzeichnisses. Wenn Sie sich in einem tief verschachtelten Unterverzeichnis befinden, können Sie mit `cd ..` in das übergeordnete Verzeichnis wechseln.
Dadurch wechseln Sie im Verzeichnisbaum um eine Ebene nach oben. Durch Hinzufügen weiterer `..` können Sie im Verzeichnisbaum beliebig viele Ebenen nach oben navigieren.
Geben Sie Folgendes ein:
cd ..
cd ../..
Sie können auch Aliasse erstellen, um diese Manöver durchzuführen:
alias .2="cd ../.."
alias .3="cd ../../.."
Diese können dann wie reguläre Befehle verwendet werden.
Um die Aliasse auch nach einem Neustart Ihres Computers nutzen zu können, müssen Sie sie zu Ihrer `.bashrc`- oder `.bash_aliases`-Datei hinzufügen.
Einfacher Wechsel zwischen zwei Verzeichnissen
Der Bindestrich (`-`) ist ein weiteres Sonderzeichen. Es wechselt das Verzeichnis zurück zu demjenigen, aus dem Sie gerade gekommen sind.
Angenommen, Sie befinden sich im Verzeichnis `c`. Mit `cd` können Sie ins Verzeichnis `forth` wechseln. Mit `cd -` können Sie nun einfach zwischen den beiden Verzeichnissen hin- und herwechseln.
Geben Sie hierzu Folgendes ein:
cd ../her
cd –
cd –
Vor dem Wechsel wird der Name des Zielverzeichnisses angezeigt.
Eine andere Art von Relativität
Die Shell verwendet das aktuelle Arbeitsverzeichnis als „Basisverzeichnis“ für relative Pfade. Mit der Umgebungsvariablen `CDPATH` können Sie jedoch einen anderen Ort als Basisverzeichnis für relative Pfade festlegen. Wenn Sie einen Großteil Ihrer Zeit in einem bestimmten Bereich des Dateisystembaumes verbringen, kann dies täglich viel Tipparbeit (und Zeit) sparen.
Um `work/dev/projects` zum Basisverzeichnis für relative Pfade zu machen, geben Sie Folgendes ein:
export CDPATH=/home/dave/work/dev/projects
Von nun an wird bei Verwendung des Befehls `cd` zuerst geprüft, ob der angegebene Verzeichnisname in der Umgebungsvariablen `CDPATH` existiert. Wenn dies der Fall ist, wird zu diesem Verzeichnis gewechselt.
Egal wo Sie sich im Dateisystem befinden, die Shell prüft nun bei Verwendung von `cd`, ob sich das Zielverzeichnis im Basisverzeichnis befindet. Ist dies der Fall, wird zu diesem Zielverzeichnis gewechselt.
Wenn Ihr Zielverzeichnis mit einem führenden Schrägstrich (/) beginnt, also ein absoluter Pfad ist, wird es von der Umgebungsvariablen `CDPATH` nicht beeinflusst.
Um dies zu demonstrieren, geben wir Folgendes ein:
cd c
cd prolog
cd /usr
cd forth
Die Umgebungsvariable `CDPATH` ist tatsächlich ein Pfad, genau wie die Umgebungsvariable `PATH`. Wenn Sie einen Befehl eingeben, durchsucht die Shell die in `PATH` enthaltenen Pfade nach einer Übereinstimmung. Wenn Sie `CDPATH` verwenden, durchsucht die Shell die in der Umgebungsvariablen `CDPATH` enthaltenen Pfade nach einer Übereinstimmung. Wie `PATH` kann auch `CDPATH` mehrere Pfade enthalten.
Damit die Shell das aktuelle Verzeichnis vor anderen Orten in der Umgebungsvariablen `CDPATH` durchsucht, fügen Sie einfach einen Punkt (`.`) am Anfang des Pfades hinzu:
export CDPATH=.:/home/dave/work/dev/projects
Um Ihre Einstellungen dauerhaft zu speichern, müssen Sie sie in eine Konfigurationsdatei, wie zum Beispiel `.bashrc`, einfügen.
Beachten Sie: Wenn Sie ein Basisverzeichnis festlegen, wirkt sich dies auch auf Verzeichniswechsel in Skripten aus. Um dies zu vermeiden, können Sie bei der Angabe von `CDPATH` entweder absolute Pfade in Ihren Skripten verwenden oder einen Test in Ihrer `.bashrc`-Datei durchführen, wie unten gezeigt:
if test “${PS1+set}”; then CDPATH=.:/home/dave/work/dev/projects; fi
Hier wird ein Test durchgeführt, um zu überprüfen, ob die Befehlszeilen-Prompt-Variable `$PS1` gesetzt ist. Die Umgebungsvariable `CDPATH` wird nur dann gesetzt, wenn der Test erfolgreich ist.
Shopt mit CD verwenden
Mit dem `shopt`-Befehl lassen sich bestimmte Optionen für die Shell festlegen. Einige davon können die Nutzung von `cd` verbessern. Verwenden Sie die Option `-s` (aktivieren) mit `shopt` und übergeben Sie ihr einen Optionsnamen, um sie zu setzen.
Die Option `cdspell` überprüft Ihre Verzeichnisnamen und korrigiert einige häufige Tippfehler, wie zum Beispiel vertauschte, fehlende oder überzählige Zeichen. Wenn ein Verzeichnis gefunden wird, das einer der Korrekturen entspricht, wird der korrigierte Pfad ausgegeben und der `cd`-Befehl wird ausgeführt.
Um die `cdspell`-Option zu setzen und „Desktop“ absichtlich falsch zu schreiben, um zu sehen, ob die Shell dies korrigiert, geben Sie Folgendes ein:
shopt -s cdspell
cd Desktpo
Die Shell hat den Fehler erkannt, korrigiert und ist zum Verzeichnis „Desktop“ gewechselt.
Eine weitere nützliche Option für `shopt` in Verbindung mit `cd` ist `autocd`. Sie macht das Eintippen von `cd` überflüssig. Alles, was Sie eingeben und was kein Befehl, Skript oder eine andere ausführbare Datei ist (z. B. ein Alias), wird als Zielverzeichnis interpretiert. Wenn Sie zu diesem Verzeichnis wechseln können, wird es im Terminalfenster ausgegeben und Sie wechseln zu diesem Verzeichnis.
Als Beispiel geben wir Folgendes ein:
shopt -s autocd
/usr/local/games
/etc
~
Sie sehen! Sie können durch das gesamte Dateisystem navigieren, ohne auch nur einmal `cd` einzugeben!
Die mit `shopt` geänderten Einstellungen wirken sich nur auf interaktive Shells aus, nicht auf Skripte.
Die `cd`-Sammlung
Es ist unwahrscheinlich, dass Sie all diese Tipps umsetzen werden. Aber es ist sehr wahrscheinlich, dass Sie etwas Interessantes oder Nützliches entdeckt haben. Denn alles, was die Navigation in der Befehlszeile beschleunigt oder vereinfacht, ist willkommen!