diff options
| author | Hans J. Koch <hjk@linutronix.de> | 2009-06-17 22:53:34 +0200 |
|---|---|---|
| committer | Hans J. Koch <hjk@linutronix.de> | 2009-06-17 22:53:34 +0200 |
| commit | 4cf35b9e1368f3b36c780e62eb397950983acc0d (patch) | |
| tree | 0cc6cdfa69a4f9eeb05120412679b06ea7c11e8d /linux-basics/filesystem-structure | |
| parent | 60a7cc5df57e39f5ea34f76f3464741192686ad2 (diff) | |
handout/hints for linux-basics/filesystem-structure
Diffstat (limited to 'linux-basics/filesystem-structure')
3 files changed, 175 insertions, 7 deletions
diff --git a/linux-basics/filesystem-structure/Makefile b/linux-basics/filesystem-structure/Makefile new file mode 100644 index 0000000..1e609fd --- /dev/null +++ b/linux-basics/filesystem-structure/Makefile @@ -0,0 +1,9 @@ +all: + pdflatex pres_file-system-structure_de.tex + pdflatex hints_file-system-structure_de.tex + pdflatex handout_file-system-structure_de.tex + pdflatex handout_file-system-structure_de.tex + +clean: + rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out + 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} diff --git a/linux-basics/filesystem-structure/hints_file-system-structure_de.tex b/linux-basics/filesystem-structure/hints_file-system-structure_de.tex index 83a58ef..4f2864f 100644 --- a/linux-basics/filesystem-structure/hints_file-system-structure_de.tex +++ b/linux-basics/filesystem-structure/hints_file-system-structure_de.tex @@ -1,6 +1,7 @@ -\documentclass{article} +\documentclass{lxarticle} \usepackage{german} \usepackage[utf8]{inputenc} +\usepackage{lxheaders} \begin{document} |
