Skip to content
Snippets Groups Projects
03_Linux-Intro.tex 19 KiB
Newer Older
Jakob Moser's avatar
Jakob Moser committed
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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404
\setbeamercolor{progress bar}{bg=color3!50!black!30,fg=color3}
\setbeamercolor{alerted text}{fg=color3}
\label{sec:Linux}
\section{\texorpdfstring{\faIcon{terminal} Linux-Einführung}{Linux-Einführung}}

\begin{frame}
    \begin{center}
        \Huge\faIcon{linux} \\
        \vspace{4mm}
        \normalsize Wer hat schon mal etwas mit Linux zu tun gehabt?
    \end{center}
\end{frame}

\subsection{Überblick}

\begin{frame}{Was ist das?}
    \begin{itemize}
        \item Freies Betriebssystem, Alternative zu z.B. Windows und macOS
        \item Gibt es in vielen Varianten
        \item Beliebt als Server-Betriebssystem, auf Privatcomputern seltener
        \begin{itemize}
            \item Unter Colis aber beliebt
        \end{itemize}
        \item Am Institut laufen fast alle Computer mit Linux
    \end{itemize}
\end{frame}

\begin{frame}{Wie bedient man das?}
    \begin{itemize}
        \item Es gibt grafische Oberflächen (wie bei Windows und macOS)...
        \item ... aber auch rein textbasierte Oberflächen
        \item Letztere nutzt man sehr häufig auf Servern
    \end{itemize}
\end{frame}    

\begin{frame}{Die Konsole}
    \begin{itemize}
        \item Gewöhnungsbedürftig, kann aber sehr viel
        \item Am Institut: \keys{Alt + F2}, dann "`\textit{konsole}"' eingeben, um Konsole zu öffnen (oder im Startmenü suchen)
        \item Am eigenen Computer: Verbindung zum Pool aufbauen über einen "`SSH-Client"'
        \item Suchmaschine hat auf (fast) alles eine Antwort
    \end{itemize}
\end{frame}

\begin{frame}{In den Pool gehen, ohne in den Pool zu gehen: SSH}
	\textbf{Mit Linuxrechnern verbinden - \structure{ssh} (\structure{s}ecure \structure{sh}ell)}

	\begin{itemize}
	\item Remote-Zugriff auf ein Linux-Terminal von zu Hause aus
	\item Optional auch mit grafischer Oberfläche (läuft nicht immer flüssig)
	\item Linux/Mac/Windows 10 zu Hause? Prima!
	\begin{itemize}
		\item \texttt{ssh \textless login\textgreater @last.cl.uni-heidelberg.de}
		\item \texttt{ssh \textless login\textgreater @ella.cl.uni-heidelberg.de}
		\item \texttt{ssh \textless login\textgreater @pool.cl.uni-heidelberg.de -p 2222} (Ausnahme!)
		\item ...
	\end{itemize}
	\item Ansonsten gibt's für Windows z.B. \href{https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html}{PuTTY}
	\item Empfehlung: Mal ausprobieren, bei Problemen melden
	\end{itemize}
\end{frame}

\begin{frame}{Benutzung der Pool-Rechner}
    \begin{itemize}
        \item Rechner, wenn ihr sie nicht braucht, auf \textbf{Standby} (= Sleep) schalten
        \item Wenn ihr nur kurz weg seid: Standby-Modus (sperrt auch automatisch die Sitzung)
        \item Bei Verlassen des Rechners: Abmelden, \textbf{danach "`Sleep"' anklicken}
        \item Bildschirm aus? \textbf{Taste drücken}
        \item Rechner aus? Ignorieren (wir kümmern uns drum)
        \item In den tiefen Stunden der Nacht werden alle Rechner einmal neu gestartet
    \end{itemize}
\end{frame}

\begin{frame}{Computer, User und Dateien}
    \begin{itemize}
        \item Computer, User und Daten sind nicht aneinander gebunden
        \item viele User an einem Computer
        \item pers\"onliche Daten an allen Computern (Home-Verzeichnisse)
        \item Euer Speicherplatz im home-Verzeichnis ist begrenzt!\\ Derzeitigen Stand
                abfragen: \alert{quota -s}
            \begin{itemize}
                \item Speicherplatz: Soft \textbf{37 GB}, Hard \textbf{42 GB}
                \item {\lq}Dateien{\rq}: Soft \textbf{200.000}, Hard \textbf{250.000}
            \end{itemize}
        \item \textcolor{cwarning}{Zugriffssperre}: Wer zu lange über der quota ist, wird gesperrt.
        \item Kein Problem: muss man nur aufr\"aumen (nur Papierkorb reicht nicht)
    \end{itemize}
\end{frame}

\begin{frame}{Platzangst: Projektverzeichnisse}
    \begin{itemize}
        \item Für größere Softwareprojekte könnt ihr bei uns um ein Projektverzeichnis bitten
        \item Genauso wie die Home-Verzeichnisse auf allen Computern verfügbar
    \end{itemize}
\end{frame}

\subsection{Grundlagen und einfache Befehle}

\begin{frame}[fragile]{Der Prompt}
    \begin{semiverbatim}
        moser@pool10:~\$
        moser@pool03:~/Desktop\$
        moser@ella:/home/students/\$
    \end{semiverbatim}
    \begin{tabular}{ l l }
        \texttt{moser} & Username \\ 
        \texttt{@} & \textit{Trennsymbol}\\
        \texttt{pool10} & Hostname (z.B. \texttt{pool15} oder \texttt{ella})\\
        \texttt{:} & \textit{Trennsymbol}\\
        \texttt{\textasciitilde} & Aktuelles Verzeichnis\\
        \texttt{\$} & \textit{Trennsymbol}
    \end{tabular}
\end{frame}

\begin{frame}{Linux Baumstruktur}
    \begin{itemize}
        \item Innerhalb von Verzeichnissen können neben Dateien weitere Verzeichnisse liegen
        \item Ähnelt der Struktur eines Baumes mit vielen Verzweigungen
        \item Wo eine Datei liegt, wird anhand ihres \textbf{Pfades} beschrieben
        \item Übrigens: Die Endungen von Dateien sind Linux egal. \texttt{tagebuch.txt} kann auch ein \texttt{gif} sein.
    \end{itemize}
\end{frame}

\begin{frame}{Linux Baumstruktur}
    \includegraphics[width=\textwidth]{../img/baumstruktur.png}
    % https://publicdomainvectors.org/en/free-clipart/Barren-tree/49392.html
\end{frame}


\begin{frame}{Pfade}
    \textbf{Absolute Pfade}
    \begin{itemize}
        \item beschreiben den Ort einer Datei vom Wurzelverzeichnis aus \alert{/}
        \item sind im System eindeutig
        \item z.B. \alert{/home/students/hfischer/folien/einfuehrung.pdf}
    \end{itemize}
    \textbf{Relative Pfade}
    \begin{itemize}
        \item beschreiben den Ort abhängig vom aktuellen ``Aufenthaltsort'' oder dem Benutzer
        \item beginnen mit einem relativen Anker (\alert{\textasciitilde} oder \alert{.} oder \alert{..})
        \item \alert{\textasciitilde/folien/einfuehrung.pdf}\\
         \alert{./folien/einfuehrung.pdf} (= \alert{folien/einfuehrung.pdf}) \\
         \alert{../hfischer/folien/einfuehrung.pdf}\\
    \end{itemize}
\end{frame}

\begin{frame}{Pfade: Anker}
    Alle Dateipfade beginnen also mit einem Anker:
    \begin{tabular}{ l l }
        \alert{/} & Das Wurzelverzeichnis (root-Verzeichnis) \\
        \alert{\textasciitilde} & Das eigene Homeverzeichnis. \\
        & (normalerweise unter \alert{/home/students/\textit{username}}) \\
        \alert{.} & Das aktuelle Verzeichnis. \\
        & (Diesen Anker kann man oft weglassen) \\
        \alert{..} & Das überliegende Verzeichnis
    \end{tabular}

    \smallskip % Die Leerzeile darüber muss bleiben!
    Wichtig außerdem: Gro{\ss}- und Kleinschreibung macht einen Unterschied!
\end{frame}

\begin{frame}{Befehle}
    \begin{itemize}
        \item Hinter Befehle kann oder muss man üblicherweise Parameter schreiben.
        \item Beispiel: \texttt{ls -a /home/students/piersig}
        \item Man beachte, dass Befehlsname und etwaige Parameter jeweils mit einem Leerzeichen voneinander getrennt werden.
    \end{itemize}
\end{frame}

\begin{frame}{Navigation im Baum}
    \textbf{Verzeichnis wechseln - \structure{cd} (\structure{c}hange \structure{d}irectory)}\\
    \begin{description}[\alert{cd \textless absoluter Pfad\textgreater}]
        \item[\alert{cd \textless absoluter Pfad\textgreater}]  wechselt in den angegebenen absoluten Pfad
        \item[\alert{cd \textless relativer Pfad\textgreater}]  wechselt in den angegebenen relativen Pfad
        \item[\alert{cd \textasciitilde}]wechselt in das eigene Homeverzeichnis (noch kürzer: nur \alert{cd})
        \item[\alert{cd ..}]wechselt in das höher gelegene Verzeichnis
        \item[...]
    \end{description}
    \smaller
    \textbf{Beispiele:}\\
    \alert{cd /home/students/moser/} wechselt ins Home des Users \textit{moser}\\
    \alert{cd Desktop} wechselt in das Verzeichnis \textit{Desktop} im aktuellen Verzeichnis\\
     \alert{cd} wechselt ins Home-Verzeichnis des eingeloggten users\\
\end{frame}

\begin{frame}{Ordnerverwaltung}
    \textbf{aktuellen Pfad anzeigen - \structure{pwd} (\structure{p}rint \structure{w}orking \structure{d}irectory) }\\[0.5cm]
    
    \textbf{Ordnerinhalte anzeigen - \structure{ls} (\structure{l}i\structure{s}t directory contents)}
    \begin{description}
        \item[\alert{ls \textless Pfad\textgreater}]zeigt Inhalt des entsprechenden Verzeichnisses
        \item[\alert{ls}]zeigt Inhalt des aktuellen Verzeichnisses
        \item[\alert{ls -l}] zeigt den Inhalt + allerlei n\"utzliche Informationen
        \item[\alert{ls -la}] zeigt den Inhalt + Informationen + versteckte Dateien an\\[0.5cm]
    \end{description}

    \textbf{Ordner erstellen - \structure{mkdir} (\structure{m}a\structure{k}e \structure{dir}ectory) }
    \begin{description}
        \item[\alert{mkdir einOrdner}]erstellt Ordner \texttt{einOrdner} in aktuellem Verzeichnis
        \item[\alert{mkdir \textasciitilde/einOrdner}] erstellt Ordner \texttt{einOrdner} im home Verzeichnis
    \end{description}
\end{frame}

\begin{frame}{Dateiverwaltung I}

    \textbf{Dateien kopieren - \structure{cp} (\structure{c}o\structure{p}y files and directories)}
    \begin{description}
        \item[\alert{cp eineDatei ../eineDatei}]kopiert \texttt{eineDatei} in das übergelegene Verzeichnis
        \item[\alert{cp -r einOrdner einOrdner2}]kopiert \texttt{einOrdner} (ins selbe Verzeichnis)\\[0.5cm]
    \end{description}

    \textbf{Dateien verschieben/umbenennen - \structure{mv} (\structure{m}o\structure{v}e/rename files)}:
    \begin{description}
        \item[\alert{mv -i file1 file2}] benennt die Datei \texttt{file1} in \texttt{file2} um (bestätigen mit \keys{Y})
        \item[\alert{mv -i pfad1/file pfad2/file}] verschiebt die Datei
    \end{description}
    Wenn ihr \alert{-i} weglasst, werden Dateien ggfs. ohne Rückfrage überschrieben. Überschriebene Dateien sind \textbf{\textcolor{cwarning}{weg}}!\\[0.5cm]
\end{frame}

\begin{frame}{Dateiverwaltung II}
    \textbf{Dateien löschen - rm (\structure{r}e\structure{m}ove files or directories)}
    \begin{description}
        \item[\alert{rm -i \textless Datei\textgreater}] löscht eine Datei
        \item[\alert{rm -i -r \textless Verzeichnis\textgreater}] löscht ein ganzes Verzeichnis mit Inhalt und Unterordnern
    \end{description}
    Mit \alert{rm} entfernte Dateien sind auch \textbf{\textcolor{cwarning}{weg}}! (nicht im Papierkorb)
    Und wenn ihr \alert{-i} weglasst, gibt es noch nicht mal eine Rückfrage...
\end{frame}

\begin{frame}{Textdateien anschauen und anlegen}
    \textbf{Textdateien betrachten - \structure{cat}}
    \begin{description}
        \item[\alert{cat \textless Dateiname\textgreater}] schreibt den Inhalt einer Textdatei ins Terminal
        % \item[\alert{/}] sucht einen Begriff $\rightarrow$ \structure{n} zeigt nächstes Suchergebnis
        % \item[\alert{q}] beendet die Leseansicht\\[0.5cm]
    \end{description}
    \textbf{Leere Dateien anlegen - \structure{touch}}
    \begin{description}
        \item[\alert{touch \textless Dateiname\textgreater}] legt eine leere Datei mit dem entsprechenden Namen an
    \end{description}
\end{frame}

\begin{frame}{Textdateien editieren}
    \textbf{Texteditoren}
    \begin{itemize}
        \item Es gibt eine breite Auswahl an Editoren für das Terminal
        \item Natürlich sind nicht unbedingt alle auf jedem System standardmäßig installiert
        \item Beliebte Editoren: \texttt{nano}, \texttt{vi}, \texttt{vim}, \texttt{emacs}
        \item Neue Datei anlegen oder existierende bearbeiten z.B. mit \\
                \textbf{\alert{vim \textless Dateiname\textgreater}}
    \end{itemize}
    \textbf{Trick 17: Ausgabeweiterleitung mit \texttt{\textgreater, \textgreater\textgreater}}
    \begin{description}
        \item[\alert{echo "Hallo" \texttt{ \textgreater\textgreater} hallo.txt}] hängt ``Hallo'' an den Inhalt der Datei \texttt{hallo.txt} an
    \end{description}
\end{frame}

\begin{frame}{Auf den Spuren Gutenbergs}
    \textbf{Dateien drucken - \structure{lp} (\structure{l}ine \structure{p}rinter devices)}
    \begin{description}
        \item[\alert{lp -h miller \textless Pfad\textgreater}]sendet die Datei zum Standard-Drucker
        \item idealerweise \texttt{.txt} oder \texttt{.pdf} Dateien\\[0.5cm]
    \end{description}
    \textbf{Druck-Status \"uberpr\"ufen}
    \begin{itemize}
        \item Web-Interface unter \structure{\url{http://miller:631/jobs}}
        \item g\"unstiger Seitenpreis von kostenlos Euro
        \item Quota: pro User 30 Seiten pro 7 Tage
    \end{itemize}
\end{frame}

\begin{frame}{Wir nehmen einfach die Datei und schieben sie auf last}
    \textbf{Dateien übers Netzwerk verschieben - rsync}
    \begin{description}
        \item[\alert{rsync \textless Quelle\textgreater\ \textless Ziel\textgreater}] kopiert die Datei von der Quelle ans Ziel 
        \item[\alert{rsync hi.txt hfischer@last.cl.uni-heidelberg.de:\textasciitilde /briefe/}] kopiert die Datei \texttt{hi.txt} aus dem lokalen Working Directory auf den Server last in das Home-Verzeichnis des Nutzers in den Unterordner \texttt{briefe} 
    \end{description}
\end{frame}

\begin{frame}{Linux Manual Pages}
    \textbf{Hilfe zu Befehlen - \structure{man} (\structure{man}ual pager utils)}
    \begin{description}
        \item[\alert{man \textless Befehl\textgreater}]zeigt die Man-Page zum angegebenen Befehl
    \end{description}
    \smaller
    \textbf{Beispiel:}\\
    \alert{man man} Wie, wozu und weshalb nutze ich eigentlich \texttt{man}?

    \medskip
    \normalsize
    Wem die Konsole noch zu unheimlich ist, dem sei \url{https://linux.die.net/man/} ans Herz gelegt, oder ihr benutzt eine Suchmaschine.
\end{frame}

\begin{frame}{Wildcards}
    \textbf{Der Asterisk}
    \begin{itemize}
        \item erfasst mehrere Dateien gleichzeitig
        \item ersetzt beliebig viele Zeichen (auch null)\\[0.5cm]
    \end{itemize}
    \textbf{Beispiel: \structure{rm *.txt}}\\
    \begin{itemize}
        \item \texttt{lel.txt} - wird gelöscht 
        \item \texttt{lel.pdf} - wird nicht gelöscht
        \item \texttt{asd.txt} - wird gelöscht
        \item \texttt{lel.pdf.txt} - wird gelöscht
    \end{itemize}
    Erinnerung: Dateiendungen sind für den User, nicht für das System!
\end{frame}

\begin{frame}{Weitere nützliche Befehle}
    \begin{description}
        \item[\alert{grep}] Im Inhalt von Dateien suchen
        \item[\alert{find}] Dateien suchen (z.B. nach Namen)
        \item[\alert{less}] Textdatei in einem Pager ansehen, inklusive Suchfunktion 
        \item[\alert{head}] Die ersten paar Zeilen einer Datei ausgeben
        \item[\alert{tail}] Die letzten paar Zeilen einer Datei ausgeben    
    \end{description}
    Gute Quellen für mehr Informationen zu einem Befehl sind neben \alert{man}
    Websites wie \href{https://wiki.ubuntuusers.de}{\texttt{wiki.ubuntuusers.de}} oder \href{https://www.cyberciti.biz/faq}{\texttt{www.cyberciti.biz/faq}}.
\end{frame}

\subsection{Arbeiten im Netzwerk und mit Anderen}

\begin{frame}{Netzwerke und ihre Benutzer}
    \textbf{Rechner im Netzwerk}
    \begin{itemize}
        \item{alle Rechner sind im Netz}
        \item{alle User können auf viele Rechner}
        \item{allen Usern stehen dieselben Daten zur Verfügung}
        \item{allen Usern stehen dieselben Resourcen zur Verfügung}
    \end{itemize}
    
    \textbf{User und Gruppen}
    \begin{itemize}
        \item jeder User hat einen Usernamen und mind. eine Gruppe (students/mitarb)
        \item z.B.: \alert{schubert} in \alert{students}
        \item alle Gruppen kann man mit dem \alert{groups} Befehl auflisten
    \end{itemize}
\end{frame}

\begin{frame}{Zugriffsrechte I}
    Die UNIX-Kürzel für drei Zugriffstypen:
    \begin{description}[r]
        \item[\alert{r}]Leserechte. Erlaubnis, die Datei zu lesen bzw. den Verzeichnisinhalt einzusehen
        \item[\alert{w}]Schreibrechte: Erlaubnis, die Datei zu verändern oder gar zu löschen
        \item[\alert{x}]Ausführrechte (eXecute): Erlaubnis, die Datei als Programm auszuführen
    \end{description}
    \vspace{1.5em}
    Und für die Klassen der User- und Gruppenverwaltung:
    \begin{description}[r]
        \item[\alert{u}]Der User, dem die Datei gehört
        \item[\alert{g}]Die User, die in der Gruppe sind, der die Datei gehört
        \item[\alert{o}]Alle anderen User des Systems
    \end{description}
\end{frame}

\begin{frame}{Zugriffsrechte II}
    Welche Zugriffsrechte nun für eine Datei oder ein Verzeichnis gesetzt sind, sieht man mit \alert{ls -l \textless Pfad\textgreater}.
    \\[.5cm]
    Zwei typische Einträge könnten so aussehen:\\
    {\color{cwarning}\texttt{ uuugggooo\\}}
    \texttt{drwxrwxrwx 160 moser  students   5440 Oct 21 21:25 topics\\
    -rw-r-----   145 moser  students   2670 Mar 18 13:12 cheat}
    \\[.5cm]
    Die erste Datei ist hier ein Verzeichnis (Directory), das User, Group und Other lesen, verändern und betreten dürfen.
    Die zweite Datei ist kein Verzeichnis, nur der User darf lesen und schreiben, die Gruppe darf nur lesen, und die anderen dürfen überhaupt nichts.
\end{frame}

\begin{frame}{Zugriffsrechte III}
    \textbf{Dateirechte verändern - \structure{chmod} (\structure{ch}ange \structure{mod}e)}
    \begin{description}[Hi] % Das Hi definiert nur, dass die Einrückung zwei Zeichen weit sein soll
    \item[\alert{chmod \textless Klasse(n)\textgreater\textbf{+}\textless Rechte\textgreater \hspace{1pt} \textless Datei\textgreater}]\hspace{10cm}Vergibt den angegebenen Klassen die angegebenen Rechte
    \item[\alert{chmod \textless Klasse(n)\textgreater \textbf{-}\textless Rechte\textgreater \hspace{1pt} \textless Datei\textgreater}]\hspace{10cm}Entzieht den angegebenen Klassen die angegebenen Rechte
    \end{description}
        
    \smaller
    \textbf{Beispiele:}\\
    \alert{chmod go-rwx \textless Datei\textgreater} entzieht den Usern in der Gruppe und den anderen Lese-, Schreib- und Ausführrechte \\
    \alert{chmod u+w \textless Datei\textgreater} gibt dem Besitzer Schreibrechte\\
    \alert{chmod a-w \textless Datei\textgreater} entzieht allen die Schreibrechte (= \alert{chmod ugo-w})

    \normalsize
    \textit{Datei} kann hier immer auch ein \textit{Verzeichnis} sein.
\end{frame}

\begin{frame}{Mit Linux herumspielen und den Pooltest absolvieren}
    \begin{center}
        \includegraphics[width=0.8\textwidth]{../img/yalikejazz.png}
        \\
        \url{https://yalikejazz.cl.uni-heidelberg.de/}
    \end{center}
\end{frame}

\begin{frame}{Mit Linux herumspielen und den Pooltest absolvieren}
    \begin{itemize}
        \item Ermöglicht euch, gefahrlos mit einem Linux-Terminal herumzuspielen und Befehle zu üben.
        \item Es gibt einige Übungsaufgaben im Stile der Aufgaben, die im Pooltest abgefragt werden.
        \item Weil die Linux-Umgebung lediglich im Browser simuliert wird, sind nicht alle üblichen Programme verfügbar. Besonders relevant: es gibt \textbf{kein} \texttt{nano}, \texttt{vim} oder \texttt{emacs}.
        \begin{itemize}
            \item Falls ein Texteditor nötig ist, kann man \texttt{vi} verwenden. Hier gelten die gleichen Tastenkürzel wie bei \texttt{vim}, also insbesondere die komplizierte Methodik zum Schließen des Editors: \keys{ESC} + \texttt{:wq} zum Speichern und \keys{ESC} + \texttt{:q!} zum Verwerfen der Änderungen.
            \item Zum Füllen einer Textdatei braucht es nicht immer einen Editor.
        \end{itemize}
    \end{itemize}
\end{frame}