From 4cf35b9e1368f3b36c780e62eb397950983acc0d Mon Sep 17 00:00:00 2001
From: "Hans J. Koch" <hjk@linutronix.de>
Date: Wed, 17 Jun 2009 22:53:34 +0200
Subject: handout/hints for linux-basics/filesystem-structure

---
 .../handout_file-system-structure_de.tex           | 170 ++++++++++++++++++++-
 1 file changed, 164 insertions(+), 6 deletions(-)

(limited to 'linux-basics/filesystem-structure/handout_file-system-structure_de.tex')

diff --git a/linux-basics/filesystem-structure/handout_file-system-structure_de.tex b/linux-basics/filesystem-structure/handout_file-system-structure_de.tex
index 4c391b2..3661acc 100644
--- a/linux-basics/filesystem-structure/handout_file-system-structure_de.tex
+++ b/linux-basics/filesystem-structure/handout_file-system-structure_de.tex
@@ -1,17 +1,175 @@
-\documentclass{article}
+\documentclass{lxarticle}
 \usepackage{german}
 \usepackage[utf8]{inputenc}
+\usepackage{lxheaders}
+\usepackage{lxextras}
 
 \begin{document}
 
-\section*{Titel}
+\section*{Struktur eines Linux-Dateisystems}
 
-\subsection*{Abschnitt1}
+\subsection*{Root-Filesystem}
 
-Text
+Der Aufbau eines Linux-Systems wird im Wesentlichen durch die
+\emph{Linux Standard Base (LSB)} bestimmt. Diese Vorgabe wurde Anfang 2004
+von einer Arbeitsgruppe der Linux Foundation vorgelegt und Ende 2004 von der
+ISO als Norm ISO/IEC 23360 akzeptiert.
 
-\subsection*{Abschnitt2}
+Bei der Struktur des Dateisystems bezieht sich LSB auf den allgemeineren
+\emph{Filesystem Hierarchy Standard (FHS)}, der auch für andere Unix-Systeme
+gilt. Die meisten heutigen Linux-Distributionen halten sich an diese Vorgaben.
+Auf Embedded Devices werden gelegentlich Vereinfachungen und Abänderungen
+vorgenommen. Das ist legitim, sollte aber nur gemacht werden, wenn es gute
+Gründe dafür gibt. Denn der Grund für diese Standards ist, dass sich ein
+Unix-erfahrener Benutzer möglichst schnell auf jedem System zurechtfindet.
+Es ist lästig, wenn man Konfigurationsdateien erst lange suchen muss, weil
+sie sich nicht im üblichen Verzeichnis befinden.
 
-Text
+\begin{figure}[h]
+\centering
+\includegraphics[height=0.5\textwidth]{images/ordnerbaum-600px.png}
+\caption{Verzeichnisstruktur eines Linux-Systems}
+\label{img:rootfs}
+\end{figure}
+
+Abbildung \ref{img:rootfs} zeigt einen möglichen Verzeichnisbaum für ein
+Linux-System. Das oberste Verzeichnis hat als Name nur einen Schrägstrich
+(\cmd{/}). Es wird als Wurzel- oder root-Verzeichnis bezeichnet. Vorsicht,
+nicht mit dem Benutzer \cmd{root} oder seinem Homeverzeichnis \cmd{/root}
+verwechseln!
+
+Die gängigsten Verzeichnisse haben folgende Inhalte:
+
+\begin{itemize}
+\item \cmd{/boot}: Dateien des Bootloaders, evtl. Kernel
+\item \cmd{/bin}: grundlegende ausführbare Dateien
+\item \cmd{/dev}: Gerätedateien
+\item \cmd{/etc}: Konfigurationsdateien
+\item \cmd{/home}: Benutzerverzeichnisse
+\item \cmd{/lib}: Kernel-Module und dynamische Bibliotheken
+\item \cmd{/mnt}: optional, temporärer Einhängepunkt für Dateisysteme
+\item \cmd{/opt}: zusätzliche Softwarepakete
+\item \cmd{/root}: Home-Verzeichnis des Benutzers root
+\item \cmd{/sbin}: wichtige Systembefehle, vorwiegend zur Benutzung durch root
+\item \cmd{/tmp}: temporäre Dateien)
+\item \cmd{/usr}: 2. Verzeichnisebene, nicht für den Bootvorgang benötigte
+			Programme und Dateien
+\item \cmd{/var}: variable Daten, wie z.B. Log-Dateien
+\end{itemize}
+
+Besondere Erwähnung verdienen die Verzeichnisse \cmd{/sys} und \cmd{/proc},
+die normalerweise virtuelle Dateisysteme des Kernels beinhalten (siehe
+nächsten Abschnitt).
+
+\subsection*{Der \cmd{mount}-Befehl}
+
+Ein Verzeichnisbaum wie oben gezeigt kann auf den verschiedensten
+Datenträgern existieren. Es ist nur wichtig, dass das auf dem Datenträger
+befindliche Dateisystem Gerätedateien und symbolische Links beherrscht. Aus
+diesem Grund eignen sich veraltete Dateisysteme wie FAT nicht für ein
+Linux-Rootfilesystem. Falls ein USB-Stick oder eine SD-Karte ein
+Root-Filesystem enthalten sollen, müssen sie erst mit einem geeigneten
+Dateisystem wie ext2 versehen werden.
+
+Der Linux-Kernel kann sein Root-Filesystem von nahezu jeder beliebigen
+Quelle beziehen. Dazu gehören beliebige Partitionen auf Festplatten,
+USB-Geräten, SD-Karten, Flash-Chips und Ähnlichem. Das Root-Filesystem
+kann sogar auf einem anderen Rechner liegen, wenn dieser es über das
+Netzwerk per NFS veröffentlicht.
+
+Der Bootloader muss dem Kernel mitteilen, wo das gewünschte Root-Filesystem
+liegt. Dies geschieht über die Kernel-Commandline durch Anweisungen, die
+etwa so aussehen:
+
+\begin{itemize}
+\item \cmd{root=/dev/hda1} (erste Partition einer IDE-Festplatte)
+\item \cmd{root=/dev/mmcblk0p1} (erste Partition einer SD-Karte)
+\item \cmd{root=/dev/nfs nfsroot=192.168.0.3:/rfs} (per NFS von anderem Rechner)
+\end{itemize}
+
+Die genauen Gerätenamen sind teilweise Architektur-spezifisch und müssen
+von Fall zu Fall ermittelt werden.
+
+Wenn der Kernel seine Initialisierungsarbeiten beendet hat, versucht er, das
+bis dahin noch undefinierte Wurzelverzeichnis mit dem angegebenen
+Root-Filesystem zu initialisieren. Über das bis dahin leere Verzeichnis ``/''
+erhält man dann Zugriff auf die Dateien des Rootfilesystems.
+
+Diesen Vorgang, bei dem ein Dateisystem einem Verzeichnis zugewiesen wird,
+nennt man \emph{mount}.
+
+Der Kernel selbst sorgt zunächst nur dafür, dass das Wurzelverzeichnis
+initialisiert wird. Alle weiteren mount-Vorgänge werden durch Startskripte
+oder einen Benutzer ausgelöst.
+
+Eine Besonderheit stellen dabei virtuelle Dateisysteme dar. Sie existieren
+nicht physikalisch auf einem Datenträger, sondern es werden bei jeder Anfrage
+die angeforderten Informationen über Verzeichnisse, Dateien und deren Inhalt
+vom Kernel dynamisch generiert.
+
+Ein Beispiel dafür ist das Dateisystem sysfs, das Kernel-Informationen
+über Treiber, Systemzustände und vieles mehr bereitstellt. Es wird
+üblicherweise auf das Verzeichnis \cmd{/sys} im Root-Filesystem gemountet.
+
+Dies kann so geschehen, beispielsweise in einem Bootskript:
+
+\begin{verbatim}
+mount -t sysfs sysfs /sys
+\end{verbatim}
+
+Eine andere Möglichkeit ist das Eintragen dieser mount-Vorgabe in die Datei
+\cmd{/etc/fstab}. Dort würde man eine Zeile der Form
+
+\begin{verbatim}
+sysfs /sys sysfs defaults 0 0
+\end{verbatim}
+
+eintragen. Ein Startskript kann dann einfach \cmd{mount -a} aufrufen, was
+alle in \cmd{/etc/fstab} gelisteten Dateisysteme mountet.
+
+Ein weiteres derartiges virtuelles Dateisystem ist procfs, das standardmäßig
+auf \cmd{/proc} gemountet wird. Es liefert ebenfalls Informationen aus dem
+Kernel, allerdings handelt es sich dabei im Unterschied zum sysfs nicht um
+einzelne Werte, sondern meist um längere Texte. Probieren Sie beispielsweise
+folgende Befehle aus:
+
+\begin{verbatim}
+cat /proc/cpuinfo
+cat /proc/meminfo
+cat /proc/interrupts
+\end{verbatim}
+
+\subsection*{Zugriffsrechte}
+
+Da Unix vom Design her ein Multiuser-Betriebssystem ist, bestand von Anfang
+an die Forderung nach einer Regelung der Benutzerrechte. Jeder Benutzer kann
+gleichzeitig mehreren Benutzergruppen angehören. Jede Datei gehört einem
+Eigentümer und einer Gruppe. Mit der Datei verknüpft sind ausserdem Flags, die
+angeben, welche Rechte der Eigentümer, Angehörige der Gruppe und sonstige
+Benutzer haben. Es werden Lese-, Schreib- und Ausführungsrechte unterschieden.
+
+\begin{figure}[h]
+\centering
+\includegraphics[width=0.5\textwidth]{images/Zugriffsrechte.png}
+\caption{Unix-Flags für Zugriffsrechte}
+\label{img:accessflags}
+\end{figure}
+
+Abbildung \ref{img:accessflags} zeigt diese Flags, manchmal auch
+``Rechte-Maske'' genannt. Der Befehl \cmd{ls -l} zeigt diese Flags an. Mit
+Hilfe des Befehls \cmd{groups} kann man herausfinden, welchen Gruppen man
+angehört.
+
+\newpage
+
+\subsection*{Kontrollfragen}
+
+\begin{enumerate}
+\item Warum ist es wichtig, dass bestimmte Dateien an einem standardisierten
+	Platz im Root-Filesystem liegen?
+\item Welche Möglichkeiten zum Mounten von Dateisystemen kennen Sie?
+\item Welche Bedingungen müssen erfüllt sein, damit Sie eine ausführbare
+	Datei tatsächlich starten dürfen?
+\end{enumerate}
 
 \end{document}
-- 
cgit v1.2.3

