forked from blinry/nutsh-vorkurs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3-file-system.nutsh
117 lines (96 loc) · 5.16 KB
/
3-file-system.nutsh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
lesson_name("Dateisystem und Pfade")
make_home
"Auf UNIX-Systemen steht Ihnen ein eigenes Verzeichnis zur Verfügung, in dem Sie Daten speichern können. Dieses heißt unter Linux *Heimat-* oder *Home-Verzeichis*. Weil es so wichtig ist, ist `cd` so eingestellt, dass es standardmäßig ins Home-Verzeichnis geht, wenn man keine Argumente aufführt. Probieren Sie das einmal aus!"
prompt {
if command == "cd" {
expect("cd")
break
}
}
"Der Teil des Promptes, der das aktuelle Verzeichnis anzeigt, enthält nun einfach nur eine Tilde - dies ist eine weitere Abkürzung: Sie können immer, wenn Sie Ihr Home-Verzeichnis meinen, eine Tilde dafür schreiben."
"Um herauszufinden, wie Ihr Homeverzeichnis unabgekürzt heißt, können Sie den Befehl `pwd` benutzen (\"print working directory\"), der den ganzen Pfad des aktuellen Ordners ausgibt."
prompt {
if command == "pwd" {
expect("pwd")
break
}
}
"Der Pfad, der da ausgegeben wird, beginnt mit einem Schrägstrich (*Slash*), sehen Sie? `/` ist das sogenannte *Wurzelverzeichnis*, der oberste Ort in der Verzeichnishierarchie. Lassen Sie uns dort einmal hingehen."
prompt {
if run("pwd") == "/" {
expect("cd /")
break
}
if help {
expect("echo help")
"Um direkt in ein Verzeichnis zu wechseln, gibt es ja den Befehl `cd [verzeichnis]`. Und wir möchten in das Verzeichnis, das `/` heißt."
}
}
"Von hier aus können Sie nicht weiter \"hochgehen\". Wenn Sie mögen, schauen Sie sich hier kurz um und gehen Sie in einige Ordner hinein. Interessant sind beispielsweise die Ordner `/bin` (enthält Programme), `/dev` (enthält Gerätedateien) oder `/etc` (Konfigurationsdateien). Kaputtmachen können Sie dabei nichts - Sie haben nur in Ihrem Homeverzeichnis Schreibrechte."
"Wenn Sie weitermachen möchten, gehen Sie wieder dorthin zurück (zum Beispiel mit `cd ~` oder einfach mit `cd`.)."
prompt {
if run("pwd") == run(`echo "$HOME"`) {
expect("cd ~")
break
}
}
"Zwei ganz wesentliche Konzepte sind *absolute* und *relative* Pfade."
"Immer, wenn Sie einen Pfad \"vom aktuellen Verzeichnis aus\" angeben, ist das ein relativer Pfad. Sie haben ja zum Beispiel schon den Befehl `cd schrank` benutzt, \"schrank\" ist hierbei ein relativer Pfad, weil Sie damit das Verzeichnis \"schrank\" im aktuellen Verzeichnis meinen."
"Absolute Pfade hingegen beginnen immer mit einem Slash, und beziehen sich aufs Wurzelverzeichnis. Der Befehl `cd /schrank` zum Beispiel würde versuchen, in das Verzeichnis \"schrank\" im Wurzelverzeichnis, ganz oben in der Verzeichnishierarchie zu wechseln."
"Noch ein Beispiel: Wenn Sie hinter `ls` einen Verzeichnisnamen schreiben, listet es die Inhalte dieses Verzeichnisses auf. Lassen Sie sich (von hier aus) die Inhalte des Wurzelverzeichnisses anzeigen."
prompt {
if output =~ "var" && output =~ "usr" {
if ! run("pwd") == "/" {
expect("cd; ls /")
break
} else {
expect("cd /; ls")
"OK, aber bitte gehen Sie zurück ins Homeverzeichnis und schreiben Sie das Verzeichnis als Argument hinter `ls`."
}
}
if help {
expect("echo help")
"Stellen Sie sicher, dass Sie in Ihrem Homeverzeichnis (~) sind. Dann lassen Sie sich mit `ls` den Inhalt des Verzeichnisses \"/\" ausgeben."
}
}
"Und die Inhalte des Verzeichnisses `/dev`, wo Dateien liegen, über die man die Hardware ansprechen kann?"
prompt {
if output =~ "null" && output =~ "tty" {
if !(run("pwd") == "/dev") {
expect("cd; ls /dev")
break
} else {
expect("cd /dev; pwd; ls")
"OK, aber bitte gehen Sie zurück ins Homeverzeichnis und schreiben Sie das Verzeichnis als Argument hinter `ls`."
}
}
}
"Und nun versuchen Sie Folgendes: Lassen Sie sich die Inhalte von `/dev` anzeigen, ohne dass der Pfad mit einem Slash beginnt. Mit anderen Worten, benutzen Sie einen Pfad relativ zu Ihrem Home-Verzeichnis! Dafür werden Sie einige `..` brauchen, die Sie mit Slashes getrennt aneinanderhängen können, um mehrere Verzeichnisse hochzugehen."
prompt {
if output =~ "null" && output =~ "tty" {
if run("pwd") == run(`echo "$HOME"`) {
if command =~ `ls\s+\.\.` {
expect("cd /dev; ls ../dev; cd ~") // Cheat ;-)
break
}
if command =~ `ls\s+/` {
expect("cd; ls /dev")
"Das ist ein absoluter Pfad. Probieren Sie, einen relativen zu benutzen."
}
} else {
expect("cd /dev; ls")
"Bitte bleiben Sie in Ihrem Homeverzeichnis."
}
}
if help {
expect("echo help")
"Probieren Sie erstmal aus, was `ls ..` tut. Und dann, was `ls ../..` tut. Jedes \"..\" lässt den Pfad eine Stufe höher enden. Sobald Sie damit im Wurzelverzeichnis angekommen sind, steigen Sie von dort wieder \"herab\" ins Verzeichnis \"dev\"."
}
}
"Gut gemacht! Probieren Sie das an weiteren Beispielen aus, bis Sie glauben, das Prinzip verstanden zu haben. Dann gehen Sie mit `echo fertig` zur nächsten Lektion."
prompt {
if ready {
expect("echo fertig")
break
}
}