Linux / Befehl cd: Das aktuelle Arbeitsverzeichnis wechseln
cd ist ein Befehl in der Linux-Shell, der das aktuelle Arbeitsverzeichnis ändert. Sie können sich mit einem absoluten oder relativen Pfad bewegen, ohne Argumente ins Home-Verzeichnis wechseln oder mit cd - zum vorherigen Verzeichnis zurückkehren.
cd ist ein Shell-Builtin-Befehl, da er den Zustand der aktuellen Shell ändern muss und kein externes ausführbares Programm ist. Dieser Artikel erklärt die Pfadnavigation, den Umgang mit symbolischen Links, CDPATH und die sichere Verwendung in Skripten, basierend auf Bash.
Ergänzende Befehle und Anwendungsfälle finden Sie in Liste der häufig verwendeten Befehle in Linux.
Was ist der cd-Befehl?
cd steht für change directory und ändert das aktuelle Arbeitsverzeichnis der Shell. Befehle, die danach mit relativen Pfaden ausgeführt werden, suchen nach Dateien und Verzeichnissen basierend auf dem geänderten Verzeichnis.
Sie können den aktuellen Speicherort mit pwd überprüfen.
pwd cd /var/log pwd
Durch Ausführen von type cd können Sie bestätigen, dass es sich um einen Bash-internen Befehl handelt. Wenn er als separates Programm ausgeführt wird, ändert sich nur das Verzeichnis des Kindprozesses und es kann die übergeordnete Shell nicht beeinflussen, daher implementiert die Shell ihn direkt.
Grundlegende Syntax
cd [-L] [-@] [directory] cd -P [-e] [-@] [directory]
Im Allgemeinen müssen Sie nur das Verzeichnis angeben, zu dem gewechselt werden soll.
cd /etc cd projects
Wenn das Verschieben erfolgreich ist, gibt es einen Exit-Status von 0 zurück, und wenn der Pfad nicht existiert oder unzureichende Berechtigungen vorliegen, gibt es einen anderen Wert zurück. In Skripten, in denen Erfolg wichtig ist, sollten Sie den Exit-Status überprüfen.
Verschieben mit absoluten und relativen Pfaden
Verwendung von absoluten Pfaden
Ein absoluter Pfad, der vom Wurzelverzeichnis / ausgeht, zeigt unabhängig vom aktuellen Standort auf dasselbe Ziel.
cd /var/log cd /usr/local/bin cd /
Absolute Pfade sind leichter nachvollziehbar, wenn der Basisstandort in Betriebsanweisungen oder Skripten klar sein muss.
Verwendung relativer Pfade
Relative Pfade werden basierend auf dem aktuellen Arbeitsverzeichnis interpretiert.
cd documents cd projects/web cd ../backup
Der gleiche Befehl kann sich in ein anderes Verzeichnis bewegen oder fehlschlagen, abhängig vom aktuellen Standort beim Ausführen. Wenn der Standort vor und nach der Bewegung wichtig ist, überprüfen Sie mit pwd.
Bewegen zu Heim-, Eltern- und vorherigen Verzeichnissen
Wechsel in das Heimatverzeichnis
Wenn Sie cd ohne Argumente ausführen, wechseln Sie in das Heimatverzeichnis des Benutzers, das durch die Variable HOME angegeben wird. Die Verwendung der Tilde-Erweiterung mit cd ~ hat normalerweise dasselbe Ergebnis.
cd cd ~ cd ~/Downloads
Das Heimatverzeichnis eines anderen Benutzers kann gemäß den Systemkontoinformationen als ~username referenziert werden.
cd ~alice
Sie können dorthin nicht wechseln, wenn der Benutzer nicht existiert oder wenn Sie keine Berechtigung haben, auf den Heimatpfad zuzugreifen.
Darstellung von aktuellem und übergeordnetem Verzeichnis
Ein einzelner Punkt . stellt das aktuelle Verzeichnis dar, und zwei Punkte .. stellen das übergeordnete Verzeichnis dar.
cd . cd .. cd ../.. cd ../../shared
cd. ändert normalerweise nicht Ihren Standort. Um mehrere Ebenen aufzusteigen, verwenden Sie ../ für jeden Schritt. Drei Punkte ... als zwei Ebenen nach oben zu interpretieren, ist kein standardmäßiges Bash-Verhalten.
Zurückkehren zum vorherigen Verzeichnis mit cd -
cd - wechselt in das vorherige Arbeitsverzeichnis, das in OLDPWD gespeichert ist, und gibt, falls erfolgreich, den neuen Pfad aus.
cd /etc cd /var/log cd -
Es ist praktisch, wenn man zwischen zwei Verzeichnissen wechselt. Wenn die Informationen über das vorherige Verzeichnis in der aktuellen Shell noch nicht erstellt wurden, kann ein OLDPWD not set-Fehler auftreten.
Pfade mit Leerzeichen und Sonderzeichen
Setzen Sie Pfade in Anführungszeichen
Pfadnamen mit Leerzeichen sollten in Anführungszeichen gesetzt werden, damit sie als ein einziges Argument übergeben werden.
cd "Project Files" cd '/srv/shared data'
Beim Verwenden einer Variablen als Pfad ist es ebenfalls sicher, sie in doppelte Anführungszeichen zu setzen, um zu verhindern, dass der Wert in mehrere Wörter gespalten oder durch Globbing erweitert wird.
target='/srv/shared data' cd -- "$target"
Backslashes und Namen, die wie Optionen aussehen
Sie können Leerzeichen auch escapen, indem Sie einen Backslash davor setzen.
cd Project\ Files
Wenn ein Name mit einem Bindestrich beginnt, fügen Sie ./ an oder verwenden Sie den Options-End-Indikator --, um zu verhindern, dass er als Option missverstanden wird.
cd ./-archive cd -- -archive
Die Verwendung der Tab-Autovervollständigung ermöglicht es der Shell, Leerzeichen und Sonderzeichen in Pfaden korrekt zu escapen, wodurch Tippfehler reduziert werden.
Verstehen von PWD und OLDPWD
PWD stellt den aktuellen Standort dar
Bash speichert das neue Arbeitsverzeichnis in der Variable PWD nach einem erfolgreichen Wechsel. Sie können es mit dem Befehl pwd vergleichen, um den von der aktuellen Shell gemerkten logischen Pfad zu überprüfen.
printf '%s\n' "$PWD" pwd
~+ wird auch durch den Wert von PWD in der Tilde-Erweiterung von Bash ersetzt.
printf '%s\n' ~+
OLDPWD stellt den vorherigen Standort dar
Nach einem erfolgreichen Wechsel wird das vorherige Arbeitsverzeichnis in OLDPWD gespeichert. cd - verwendet diesen Wert.
printf '%s\n' "$OLDPWD" printf '%s\n' ~-
Unmittelbar nach dem Starten der Shell oder vor dem Wechsel in ein Verzeichnis kann OLDPWD nicht existieren.
Symbolische Links und die Optionen -L, -P
In Pfaden, die symbolische Links enthalten, kann der von der Shell gespeicherte logische Pfad vom physischen Pfad, der vom Dateisystem aufgelöst wird, abweichen.
Logische Pfade mit -L beibehalten
-L ist das Standardverhalten und verarbeitet .. basierend auf den logischen Pfadkomponenten. Wenn Sie sich durch einen symbolischen Linknamen bewegt haben, kann dieser Name auch in PWD beibehalten werden.
cd -L /srv/current pwd
Es bewahrt die vom Benutzer eingegebene Pfadstruktur, was das Arbeiten mit Projektlinks oder dem aktuellen Release-Link erleichtert.
Physische Pfade mit -P folgen
-P interpretiert symbolische Links während der Navigation als ihre physischen Zielpfade. Es wird verwendet, wenn Sie den tatsächlichen Speicherort im Dateisystem überprüfen oder .. basierend auf dem Linkziel verarbeiten müssen.
cd -P /srv/current pwd -P
-e verursacht einen Fehlerstatus, wenn es mit -P verwendet wird, falls der aktuelle physische Pfad nach dem Verschieben nicht bestimmt werden kann.
cd -P -e /srv/current
Häufig besuchte Orte mit CDPATH durchsuchen
CDPATH ist ein Suchpfad, der verwendet wird, wenn cd nach einem Verzeichnisnamen sucht, der nicht mit einem Schrägstrich beginnt. Er ist ähnlich wie PATH für die Suche nach ausführbaren Dateien, gilt jedoch nur für Verzeichniswechsel.
Beispiel für das Einstellen von CDPATH
CDPATH=.:~/projects:/srv/apps export CDPATH cd sample-app
Es sucht nach sample-app an jedem durch Doppelpunkte getrennten Ort. Ein leerer Eintrag oder . steht für das aktuelle Verzeichnis. Um ein Verzeichnis mit demselben Namen am aktuellen Ort zu priorisieren, ist es leicht verständlich, . zuerst zu setzen.
Vorsichtsmaßnahmen bei der Verwendung von CDPATH
Wenn cd ein Verzeichnis in einem nicht-leeren CDPATH-Eintrag findet, kann es den absoluten Pfad, zu dem gewechselt wurde, auf der Standardausgabe anzeigen. Dies ist in einer interaktiven Shell praktisch, kann aber unerwartete Pfade im Skriptausgang vermischen.
In der Automatisierung sollten absolute Pfade oder eindeutige relative Pfade verwendet werden, und falls nötig, den Einfluss von Suchpfaden auf den Befehl mit CDPATH= entfernen.
CDPATH= cd -- ./build
Führen Sie den nächsten Befehl nur aus, wenn die Änderung erfolgreich war.
Wenn cd fehlschlägt, aber der nächste Befehl weiterhin ausgeführt wird, kann dies dazu führen, dass Dateien in einem unbeabsichtigten Verzeichnis erstellt oder gelöscht werden. Es ist sicherer, den Erfolgsstatus mit einem logischen Operator zu verknüpfen.
cd /srv/app && ./deploy.sh
In mehrzeiligen Skripten sollte bei einem Fehler explizit beendet oder der Fehler behandelt werden.
cd /srv/app || {
printf '%s\n' 'Cannot move to the working directory.' >&2
exit 1
}./deploy.sh
Wenn Sie ein Semikolon wie cd path; command verwenden, wird der nächste Befehl ausgeführt, unabhängig davon, ob die Änderung erfolgreich war.
Verwendung von cd in Skripten und Subshells
Warum ein Skript den Speicherort der übergeordneten Shell nicht ändern kann
Ein normal ausgeführtes Shell-Skript läuft in einem separaten Prozess, sodass cd im Skript nur diesen Prozess und seine Kinder betrifft. Nach Beendigung des Skripts bleibt das Arbeitsverzeichnis des Terminals, das es aufgerufen hat, unverändert.
./change-directory.sh pwd
Um den aktuellen Speicherort der Shell zu ändern, können Sie eine Funktion definieren oder das Skript mit source ausführen, aber ein eingebundenes Skript kann auch die Variablen und Optionen der aktuellen Shell ändern, daher sollten Sie überprüfen, ob der Inhalt vertrauenswürdig ist.
source ./change-directory.sh
Eine Untershell, die ihren ursprünglichen Speicherort nach der Operation beibehält
Um in einem bestimmten Verzeichnis zu arbeiten und gleichzeitig den Speicherort der aufrufenden Shell beizubehalten, können Sie eine Untershell mit Klammern erstellen.
( cd /srv/app && ./build.sh )
Verzeichnisänderungen innerhalb der Klammern verschwinden, wenn die Untershell endet. Um in der aktuellen Shell zu wechseln und zurückzukehren, können Sie auch pushd und popd verwenden, anstatt den vorhandenen Pfad direkt zu speichern.
Warum sudo cd nicht funktioniert
sudo cd /root kann im Allgemeinen nicht verwendet werden. cd ist ein integrierter Befehl der aktuellen Shell, und ein von sudo gestarteter Prozess kann das Arbeitsverzeichnis der übergeordneten Shell nicht ändern.
Wenn Sie eine Administrator-Shell selbst benötigen, können Sie eine neue Login-Shell gemäß der Berechtigungspolitik wie folgt starten.
sudo -i
Um einen einzelnen Befehl mit Administratorrechten in einem bestimmten Verzeichnis auszuführen, wechseln Sie entweder in der aktuellen Shell das Verzeichnis und wenden sudo nur auf diesen Befehl an, oder geben Sie den Arbeitsbereich und den Befehl in einer separaten Shell an.
cd /srv/app && sudo ./maintenance.sh sudo sh -c 'cd /srv/app && ./maintenance.sh'
Verwenden Sie Administratorrechte nur, wo erforderlich, und stellen Sie sicher, dass die Pfade und ausführbaren Dateien vertrauenswürdig sind.
Vergleich von cd, pushd und popd
| Befehl | Hauptverwendung | Funktionen |
|---|---|---|
cd |
Wechselt in das angegebene Verzeichnis. | Sie können mit OLDPWD zum vorherigen Speicherort zurückkehren. |
pushd |
Wechselt und speichert dabei den aktuellen Speicherort auf dem Verzeichnisstapel. | Nützlich beim Wechseln zwischen mehreren Speicherorten, und Bash verwaltet den Stapel. |
popd |
Entfernt standardmäßig den obersten Eintrag und wechselt zum neuen obersten Verzeichnis im Stapel. | Kombiniert mit pushd zum Wiederherstellen des gespeicherten Speicherorts. |
dirs |
Überprüft den aktuellen Verzeichnisstapel. | Sie können nur den Stapelzustand anzeigen, ohne zu wechseln. |
Häufig verwendete Verschiebe-Befehle
| Befehl | Beschreibung |
|---|---|
cd |
Zum Home-Verzeichnis des aktuellen Benutzers wechseln. |
cd ~ |
Zum Home-Verzeichnis unter Verwendung der Tilde-Erweiterung wechseln. |
cd .. |
Zum übergeordneten Verzeichnis wechseln. |
cd ../.. |
Zum Verzeichnis zwei Ebenen höher wechseln. |
cd - |
Zum vorherigen Arbeitsverzeichnis zurückkehren. |
cd / |
Zum Root-Verzeichnis des Dateisystems wechseln. |
cd ~/projects |
Zum projects-Verzeichnis unter dem Home-Verzeichnis wechseln. |
cd -P path |
Bewegt sich entlang des physischen Pfads, der aus symbolischen Links aufgelöst wurde. |
Option Zusammenfassung
| Option | Beschreibung |
|---|---|
-L |
Verwendet den logischen Pfad. Dies ist das Standardverhalten von Bash, das es ermöglicht, den Namen des symbolischen Links im Pfad beizubehalten. |
-P |
Interpretiert symbolische Links als den physischen Zielpfad und bewegt sich dorthin. |
-e |
Wird mit -P verwendet und gibt einen Fehlerstatus zurück, wenn der physische aktuelle Pfad nach dem Verschieben nicht ermittelt werden kann. |
-@ |
Auf unterstützten Systemen werden die erweiterten Attribute von Dateien angezeigt, als ob sie Verzeichnisse wären. Dies wird in typischen Linux-Umgebungen möglicherweise nicht unterstützt. |
-- |
Zeigt das Ende der Optionen an und wird verwendet, wenn Verzeichnisnamen, die mit einem Bindestrich beginnen, als Argumente behandelt werden. |
Häufige Fehler
Keine solche Datei oder Verzeichnis
Der Pfad existiert möglicherweise nicht, oder Sie haben den aktuellen Standort falsch angenommen. Überprüfen Sie den Basisstandort mit pwd und prüfen Sie die Groß-/Kleinschreibung sowie Leerzeichen im Pfad.
pwd ls -ld -- "target path"
Zugriff verweigert
Möglicherweise haben Sie keine Ausführungsberechtigung für das Zielverzeichnis oder für ein Zwischenverzeichnis im Pfad. Sie benötigen Ausführungsberechtigungen für jedes Verzeichnis, aus dem der Pfad besteht, um in ein Verzeichnis zu wechseln.
namei -l /path/to/directory
Bevor Sie Berechtigungen beliebig erhöhen, prüfen Sie, ob der Benutzer auf diesen Pfad zugreifen muss, und überprüfen Sie die entsprechenden Gruppen- oder ACL-Richtlinien.
Kein Verzeichnis
Die letzte Komponente oder Zwischenkomponenten des Pfads könnten reguläre Dateien sein. Überprüfen Sie ihre Typen mit file und ls -ld.
file -- "target path" ls -ld -- "target path"
FAQ
Ist es normal, dass beim Ausführen des Befehls cd keine Ausgabe erfolgt?
Ja, das ist normal. Ein erfolgreicher cd zu einem normalen Pfad erzeugt keine Ausgabe. Sie können Ihren aktuellen Speicherort mit pwd überprüfen, und Pfade, die mit cd - oder CDPATH gefunden werden, können nach Erfolg den neuen Pfad ausgeben.
Wie gehe ich zwei Ebenen nach oben zum übergeordneten Verzeichnis?
Verwenden Sie cd ../... Jeder durch einen Schrägstrich getrennte Bestandteil .. steht für einen Schritt zum übergeordneten Verzeichnis.
Kann ich das Verzeichnis des aktuellen Terminals mit einem Skript ändern?
Ein normal gestartetes Skript ändert das Arbeitsverzeichnis der übergeordneten Shell nicht. Dafür verwenden Sie eine Shell-Funktion oder lesen das Skript mit source in die aktuelle Shell ein. Verwenden Sie nur vertrauenswürdigen Code, da dabei auch Variablen und Shell-Optionen verändert werden können.
Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU Bash Handbuch: CD-Builtin-Befehle, GNU Bash Handbuch: Tilde-Erweiterung und POSIX Umgebungsvariablen-Definition: CDPATH.




