cd in 128 seconds

next:

Skript

Notizen

intro

cd ist ein internes Shell-Kommando, mit dem man das aktuelle Verzeichnis der Shell verändert.

Jeder Prozess unter Linux – nicht nur eine Shell – hat ein aktuelles Verzeichnis. Wenn eine Datei geöffnet werden soll, kann diese auf zwei Arten identifiziert werden:

  • über einen absoluten Pfad, z.B. /home/testuser/file oder

  • über einen relativen Pfad, z.B. file

Wenn die Datei sich im aktuellen Verzeichnis befindet, dann verweisen die beiden Pfade auf dieselbe Datei.

Wie absolute Pfade unter Linux funktionieren, wird in diesem Video erklärt.

testuser@learnlinux: ~/cd-test$ ls -ld /proc/self/cwd
lrwxrwxrwx. 1 testuser testuser 0 Apr 25 04:22 /proc/self/cwd -> /home/testuser/cd-test

testuser@learnlinux: ~/cd-test$ realpath dir
/home/testuser/cd-test/dir

testuser@learnlinux: ~/cd-test$ realpath /home/testuser/cd-test/dir
/home/testuser/cd-test/dir
call types

cd kann auf unterschiedliche Arten aufgerufen werden:

  • ohne Argumente: dies wechselt ins Homeverzeichnis des Users

  • mit einem ASCII-Bindestrich als Argument: dies wechselt ins vorherige aktuelle Verzeichnis; mehrfache Eingabe wechselt zwischen diesen beiden Verzeichnissen hin und her

  • mit einem absoluten Verzeichnispfad als Argument

  • mit einem relativen Verzeichnispfad, der mit ./ oder dem Namen eines Unterverzeichnisses beginnt

  • oder mit einem relativen Verzeichnispfad, der mit ../ beginnt: dies wechselt mindestens eine Verzeichnisebene nach oben, also etwa von /home/testuser zu /home

testuser@learnlinux: /$ cd

testuser@learnlinux: ~$ pwd
/home/testuser

testuser@learnlinux: ~$ cd -
/

testuser@learnlinux: /$ pwd
/

testuser@learnlinux: /$ cd -
/home/testuser

testuser@learnlinux: ~$ pwd
/home/testuser

 

testuser@learnlinux: /$ cd /home/testuser/cd-test/ ; echo "$PWD"
/home/testuser/cd-test

testuser@learnlinux: ~/cd-test$ cd logical_dir ; echo "$PWD"
/home/testuser/cd-test/logical_dir

testuser@learnlinux: ~/cd-test/logical_dir$ cd -
/home/testuser/cd-test

testuser@learnlinux: ~/cd-test$ cd ./logical_dir ; echo "$PWD"
/home/testuser/cd-test/logical_dir

testuser@learnlinux: ~/cd-test/logical_dir$ cd ../../.. ; echo "$PWD"
/home
details

cd unterscheidet zwischen logischen und physischen Pfaden. Diese sind nur dann nicht identisch, wenn in dem logischen Pfad wenigstens ein symbolischer Link auftaucht.

Symbolische Links werden in diesem Video erklärt.

testuser@learnlinux: ~/cd-test$ ls -ld *_dir
lrwxrwxrwx. 1 testuser testuser   12 Apr 25 04:21 logical_dir -> physical_dir
drwxrwx---. 2 testuser testuser 4096 Apr 25 04:19 physical_dir

testuser@learnlinux: ~/cd-test$ realpath logical_dir
/home/testuser/cd-test/physical_dir

testuser@learnlinux: ~/cd-test$ realpath physical_dir
/home/testuser/cd-test/physical_dir
options

Dies sind die beiden Optionen für cd:

cd -L verwendet logische Pfade. Dies ist die Standardvorgehensweise.

cd -P wandelt einen logischen Pfad in den physischen Pfad um und wechselt dann in das Verzeichnis

testuser@learnlinux: /$ cd /home/testuser/cd-test ; echo "$PWD"
/home/testuser/cd-test

testuser@learnlinux: ~/cd-test$ ls -ld *_dir
lrwxrwxrwx. 1 testuser testuser   12 Apr 25 04:21 logical_dir -> physical_dir
drwxrwx---. 2 testuser testuser 4096 Apr 25 04:19 physical_dir

testuser@learnlinux: ~/cd-test$ cd logical_dir ; echo "$PWD"
/home/testuser/cd-test/logical_dir

testuser@learnlinux: ~/cd-test/logical_dir$ cd .. ; echo "$PWD"
/home/testuser/cd-test

testuser@learnlinux: ~/cd-test$ cd -P logical_dir ; echo "$PWD"
/home/testuser/cd-test/physical_dir
recommendations

Sehr häufig wechselt man erst in ein Verzeichnis und lässt sich dann dessen Inhalt anzeigen. Es bietet sich also an, cd und ls in einer Shellfunktion zusammenzufassen.

testuser@learnlinux: ~$ cdl () { test $# -eq 1 || return 1; cd "$1" && ls -lhLa; }

testuser@learnlinux: ~$ cdl ls-test
total 24K
drwxrwx--- 3 testuser testuser 4.0K Mar 30 22:37 .
drwx------ 3 testuser testuser 4.0K Mar 29 20:51 ..
drwxrwx--- 2 testuser testuser 4.0K Mar 30 03:34 directory
-rw-rw---- 1 testuser testuser    0 Mar 30 03:33 dir.txt
-rw-rw---- 1 testuser testuser    0 Mar 29 20:52 .hidden_file
-rw-rw---- 1 testuser testuser    0 Mar 30 03:33 symlink
-rw-rw---- 1 testuser testuser 8.0K Mar 29 20:53 visible_file
-rw-rw---- 1 testuser testuser    0 Mar 30 22:40 visible_file2
-rw-rw---- 1 testuser testuser   10 Mar 30 22:37 visible_file3
see also

Eine mächtigere Version von cd sind die internen Shell-Kommandos pushd und popd. Sie verwalten beliebig viele Verzeichnisse in einem Ring, in dem man an eine andere Position springen kann; man muss die Pfade also nur einmal eingeben.

pushd und popd werden in diesem Video erklärt.

testuser@learnlinux: ~/ls-test$ cd /

testuser@learnlinux: /$ pushd /etc
/etc /

testuser@learnlinux: /etc$ pushd /home/testuser/
~ /etc /

testuser@learnlinux: ~$ pushd /home/testuser/cd-test/physical_dir/
~/cd-test/physical_dir ~ /etc /

testuser@learnlinux: ~/cd-test/physical_dir$ pushd +1
~ /etc / ~/cd-test/physical_dir

testuser@learnlinux: ~$ pushd +1
/etc / ~/cd-test/physical_dir ~

testuser@learnlinux: /etc$ pushd +1
/ ~/cd-test/physical_dir ~ /etc

 

testuser@learnlinux: /$ # much better with aliases

testuser@learnlinux: /$ alias p=pushd pp='pushd +1' p0='pushd -0' d=dirs

testuser@learnlinux: /$ d
/ ~/cd-test/physical_dir ~ /etc

testuser@learnlinux: /$ pp
~/cd-test/physical_dir ~ /etc /

testuser@learnlinux: ~/cd-test/physical_dir$ pp
~ /etc / ~/cd-test/physical_dir

testuser@learnlinux: ~$ pp
/etc / ~/cd-test/physical_dir ~

testuser@learnlinux: /etc$ p0
~ /etc / ~/cd-test/physical_dir

testuser@learnlinux: ~$