\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{ngerman}
%\usepackage{hyperref}
%\usepackage{graphicx}
\usepackage{geometry}
\geometry{a4paper, left=25mm, top=10mm}
\title{Workstation Linuxkurs}
\author{Paul Hänsch}

\begin{document}
\maketitle

\section{Tag 2}

\subsection{Navigation im Dateisystem}
Wenn der Benutzer eine Kommndozeilenumgebung öffnet, so befindet er sich normalerweise in seinem Heimverzeichnis. In jedem Fall lässt sich das aktuelle Arbeitsverzeichnis feststellen durch Eingabe des Befehls '\verb#pwd#' (print working directory - gib das Arbeitsverzeichnis aus).\\
\verb#pwd#\\
$\Rightarrow$\\
\verb#/home/user#\\

'/home/user' (in diesem Beispiel) ist das Verzeichnis, in dem wir gerade arbeiten. Mit dem Befehl '\verb#cd#' (change directory - ändere das Verzeichnis) können wir ein anderes Verzeichnis (auf das wir Ausführungsrechte haben) betreten. Bevor wir das tun, wollen wir uns aber nochmal umschauen:\\
\verb#ls#\\
$\Rightarrow$\\
...\\

Der Befehl '\verb#ls#' wird alle Dateien im Heimverzeichnis des Benutzers auflisten. Auf den Abdruck der Befehlsausgabe soll hier verzichtet werden, da der Grundzustand des Heimverzeichnisses sich je nach Distribution und Benutzerumgebung stark unterscheiden kann.\\
Mit '\verb#cd ./#' wechseln wir in das (nicht aufgelistete) ``Unterverzeichnis'' './'. Das schauen wir uns sogleich näher an:\\
\verb#cd ./#\\
\verb#ls#\\
$\Rightarrow$\\
...\\

Hoppla.. das sieht ziemlich genau so aus, wie vorher. Warum das ganze? Das Verzeichnis './' ist ein Sonderfall: './' ist immer das Verzeichnis, in dem wir uns gerade befinden. Dessen können wir uns auch noch einmal vergewissern:\\
\verb#pwd#\\
$\Rightarrow$\\
\verb#/home/user# ...das gleiche wie vorher.\\

Es gibt ein weiters ``Sonderverzeichnis'', das ist '../':\\
\verb#cd ../#\\
\verb#pwd#\\
$\Rightarrow$\\
\verb#/home#\\

Wir sehen, dass wir nicht mehr im Verzeichnis '/home/user/' sind, sondern ``nur'' noch in '/home/'. Wir sind ein Verzeichnis \textbf{aufgestiegen}, denn '../' ist immer das \textbf{übergeordnete} Verzeichnis, des Verzeichnisses in dem wir uns gerade befinden.\\
\verb#ls#\\
$\Rightarrow$\\
\verb#alice bob carl dave eve fiona user#\\

Da wir uns in '/home' befinden, hat uns '\verb#ls#' nun alle Dateien und Verzeichnisse unterhalb von '/home/' aufgelistet. wir sehen die Heimverzeichnisse aller Benutzer im System, darunter auch unser eigenes. Vielleicht ist unser Heimverzeichnis das einzige in der Liste, zum Beispiel an unserem Privatrechner, vielleicht existieren aber auch noch 20.000 weitere Benutzer im System, das könnte auf einem Universitätsrechner der Fall sein. Steigen wir noch ein Verzeichnis weiter auf:\\
\verb#cd ../#\\
\verb#pwd#\\
$\Rightarrow$\\
'/'\\

Der Pfad, in dem wir uns befinden wird jetzt nur noch durch einen Schrägstrich (oft englisch als ``slash'' bezeichnet) repräsentiert. Das heißt wir haben die Oberste Verzeichnisebene erreicht, das ``Stamm-'' oder ``Wurzelverzeichnis'' (englisch ``root'' - Wurzel). Wenn wir noch einmal '\verb#cd ../#' eingeben, so wird dies keine Wirkung haben.\\
\verb#ls#\\
$\Rightarrow$\\
\verb#bin    etc    media   proc   sys   var#\\
\verb#boot   home   mnt     root   tmp      #\\
\verb#dev    lib    opt     sbin   usr      #\\

Was wir hier sehen ist eine Auflistung der Unterverzeichnisse (und -dateien) vom Stammverzeichnis. J nach Distribution wird sich die Liste etwas unterscheiden. Im wesentlichen ist sie aber nicht nur bei allen Linuxdistributionen sondern sogar bei allen Unix-Systemen gleich. Unabhangig davon ob wir z.B. vor einem BSD, Solaris oder MacOS X sitzen.\\

Mit '\verb#ls#' können wir auch in die Verzeichnisse hinein gucken, ohne sie zu betreten:\\
\verb#ls /bin/#\\
$\Rightarrow$\\
...\\

\verb#ls /boot/#\\
$\Rightarrow$\\
...\\

\verb#ls /dev/#\\
$\Rightarrow$\\
...\\

...\\

\begin{itemize}
  \item \textbf{/bin} enthält ausführbare Programme, die für das System sehr grundlegend sind.
  \item \textbf{/boot} enthält den Systemkernel und einige Dateien, die damit unmittelbar in Zusammenhang stehen.
  \item \textbf{/dev} enthält Gerätedateien, das ist furchtbar interessant und wir werden in einem der nächsten Kapitel dazu kommen.
  \item \textbf{/etc} enthält systemweite Konfigurationsdateien.
  \item \textbf{/home} enthält die Heimverzeichnisse der Benutzer.
  \item \textbf{/lib} enthält sogenannte Softwarebibliotheken, die von Programmen eingebunden werden um auf bestimmte Funktionen zuzugreifen. Näheres hierzu gehört eher in einen Programmierkurs.
  \item \textbf{/media} ist in einigen Linuxdistributionen vorgesehen um die Verzeichnisbäume externer Laufwerke zu beherbergen.
  \item \textbf{/mnt} dient traditionell dem gleichen Zweck, ist allerdings älter.
  \item \textbf{/opt} wird in einigen Distributionen verwendet um Applikationen zu beherbergen die selbst eine Komplexe Verzeichnisstruktur mitbringen. Z.B. OpenOffice.org.
  \item \textbf{/proc} enthält laufende Prozesse (klingt komisch, ist aber so).
  \item \textbf{/root} ist das Heimverzeichnis des Benutzers root.
  \item \textbf{/sbin} enthält Programme zur Systemverwaltung.
  \item \textbf{/sys} enthält virtuelle Dateien, die den Status des Systems beschreiben.
  \item \textbf{/tmp} ist das systemweite Verzeichnis für temporäre Dateien.
  \item \textbf{/usr} enthält Daten für weniger grundlegende Programme wie z.B. die grafische Benutzeroberfläche.
  \item \textbf{/var} enthält Dateien, die sich im Normalbetrieb des Systems ohne Zutun des Benutzers verändern, z.B. die Systemlogbücher.
\end{itemize}

So wie wir in Verzeichnisse hinein schauen können, ohne sie zu betreten, können wir z.B. auch von unserem Heimverzeichnis aus in das Wurzelverzeichnis gucken:\\
\verb#cd ~# (bringt uns immer in unser Heimverzeichnis)\\
\verb#ls /#\\
$\Rightarrow$\\
...\\

Soso, der alleinstehende Schrägstrich bezeichnet also das Wurzelverzeichnis. Bleiben wir noch in unserem Heimverzeichnis, wir können alles von hier aus machen. Wir können wie gerade schon einmal getan wieder einen Blick ins Verzeichnis '/boot' werfen.\\
\verb#ls /boot/#\\
$\Rightarrow$\\
...\\

Wie nicht anders zu erwarten sehen wir wieder den Inhalt vom '/boot'-Verzeichnis (mindestens einen Kernel und wahrscheinlich noch mehr). Die Verzeichnisangabe begann mit einem Schrägstrich (``slash''), das heißt, dass wir einen Verzeichnispfad ausgehend vom Stammverzeichnis angegeben haben. Solche Pfadangaben bezeichnen wir als \textbf{absolute Pfadangaben}, da sie immer vollkommen \textbf{eindeutig} sind.\\

Das Gegenteil von absoluten Pfadangaben sind \textbf{relative Pfadangaben}. Während aabsolute Pfadangaben immer vom Stammverzeichnis des Dateibaums ausgehen, geht eine relative Pfadangabe von dem Verzeichnis aus, in dem sich der Benutzer im Augenblick befindet. Wechseln wir zur Demonstaration in unser Heimverzeichnis:\\
\verb#cd ~#\\

Hier können wir nun ein Unterverzeichnis anlegen, das geschieht mit dem Befehl '\verb#mkdir#':\\
\verb#mkdir verz1#\\
\verb#ls#\\
$\Rightarrow$\\
... \verb#verz1# ...

Wir sehen in der Verzeichnisausgabe des Heimverzeichnis unser frisch angelegtes unterverzeichnis 'verz1'. mit '\verb#ls#' wollen wir uns dessen Inhalt ausgeben lassen:\\
\verb#ls verz1/#\\
$\Rightarrow$\\
(keine Ausgabe)\\

Wir erhalten keine Ausgabe, das heißt das neu angelegte Verzeichnis ist leer (wie nicht anders zu erwarten). Wir haben uns nur den (nicht vorhandenen) Inhalt von 'verz1' anzeigen lassen, wir haben das Verzeichnis dabei \textbf{nicht} betreten.\\
Vorhin sind wir ein Verzeichnis aufgestiegen, wiederholen wir das einfach mal:\\
\verb#cd ../#\\

Versuchen wir jetzt noch einmal den Inhalt vom gerade angelegten Verzeichnis anzeigen zu lassen, so wie wir es eben getan haben:\\
\verb#ls verz1/#\\
$\Rightarrow$\\
\verb#ls: cannot access verz1: No such file or directory#\\

``Kann auf verz1 nicht zugreifen: Keine solche Datei bzw. Verzeichnis''. Das Verzeichnis 'verz1', existiert offenbar nicht. Wir haben es gerade angelegt und wir haben es seitdem nicht gelöscht, es gibt also keinen Grund, warum es nicht existieren sollte. Es  existiert schlicht und ergreifend nicht an dem \textbf{Ort} zu dem wir uns hinbewegt haben.\\

Nochmal kurz zu absoluten und relativen Pfadangaben:
\begin{itemize}
  \item \textbf{absolute Pfadangaben} beginnen \textbf{immer} mit einem Schrägstrich ('/'), dieser repräsentiert das Stammverzeichnis.
  \item \textbf{relative Pfadangaben} beginnen \textbf{niemals} mit einem Schrägstrich. Sie gehen immer von dem Verzeichnis aus, in dem sich der Benutzer im Augenblick befindet (siehe '\verb#pwd#').
\end{itemize}

Immer wenn wir '\verb#ls verz1/#' ausgeführt haben, haben wir uns also einer relativen Pfadangabe bedient. Wir können, von dem Ort aus, an dem wir uns befinden, das Verzeichnis über seinen absoluten Pfad ansprechen. Erinnern wir uns daran, dass wir im Heimverzeichnis waren, als wir 'verz1' angelegt haben. Dann muss der absolute Pfad von 'verz1' also (in diesem Beispiel) '/home/user/verz1/' sein:\\
\verb#ls /home/user/verz1/#\\
$\Rightarrow$\\
(keine Ausgabe)\\

Es ging offenbar alles gut. Eine absolute Pfadangabe funktioniert unabhängig davon, wo wir uns befinden. Wir befinden uns (wie uns auch '\verb#pwd#' verraten kann) im verzeichnis '/home/'. Von hier aus ist der \textbf{relative} Pfad zu 'verz1' folglich (in diesem Beispiel) 'user/verz1/'.
\verb#ls /home/user/verz1/#\\
$\Rightarrow$\\
(keine Ausgabe)\\

\subsection{Zusammenfassung}
Wir haben gelernt, wie wir uns im Dateisystem Bewegen, wie wir Ordner (gleichbedeutend Verzeichnisse) erstellen und wir haben einen flüchtigen Blick auf die in Unix üblichen Verzeichnisse (/bin, /boot, /etc ...) geworfen. Folgende Befehle haben wir verwendet:\\

\begin{itemize}
  \item \verb#pwd# - zeigt an, in welchem Verzeichnis wir uns aktuell befinden
  \item \verb#cd# - bringt uns in ein angegebenes Verzeichnis
    \subitem \verb#cd ./# bringt uns in das Verzeichnis, in dem wir uns gerade befinden (tut also genau nichts)
    \subitem \verb#cd ../# bringt uns vom aktuellen Verzeichnis ein Verzeichnis nach oben (z.B. von '/home/user' nach '/home')
    \subitem \verb#cd /# bringt uns ins Stammverzeichnis (egal von wo)
    \subitem \verb#cd /var/spool/cron# bringt uns direkt ins Verzeichnis '/var/spool/cron'
  \item \verb#mkdir# - erstellt ein Verzeichnis
    \subitem \verb#mkdir foo# erstellt das Unterverzeichnis 'foo' im aktuellen Verzeichnis
    \subitem \verb#mkdir /tmp/bar# erstellt das Unterverzeichnis 'bar' direkt unterhalb von '/tmp'
\end{itemize}

\end{document}
