linux_ws2122/chapters/05-directory-structure.tex

222 lines
10 KiB
TeX

% <#>-----------------------------------------------------------------------<#>
\section{Verzeichnisstrukturen}%
\label{sec:verzeichnisstrukturen}
Das Konzept der Verzeichnisstruktur von Unix-artigen Betriebssystemen ist
annähernd identisch. Es gibt jedoch Besonderheiten zwischen den einzelnen
Abspaltungen von Unix hinsichtlich Linux und BSD, als auch der jeweiligen
Distributionen und Abspaltungen: Debian, RHEL, OpenBSD etc. Da jedoch die
Vielfalt zu groß für dieses Kapitel wäre, werden diese hier nicht näher
behandelt.
% >---------------------------------------------------------------------------<
\subsection{/ (root directory, Wurzelverzeichnis)}%
\label{sec:verzeichnisstrukturen.root}
% NOTE: Missing reference to chapter where devices will be mounted
Das Wurzelverzeichnis \textit{/} ist die oberste Verzeichnisebene. Es enthält
alle weiteren Unterverzeichnisse und Dateien unabhängig, ob diese sich auf einem
physikalisch anderen Gerät befinden. Dazu später mehr.
% >---------------------------------------------------------------------------<
\subsection{/bin/}%
\label{sec:verzeichnisstrukturen.bin}
Systemrelevante Programme, beispielsweise jene, welche Bestandteil der GNU Core
Utility Collection sind werden in dem Verzeichnis \textit{/bin/} gespeichert.
Dies sind zum Beispiel \textit{chmod}, \textit{chown}, \textit{chgrp},
\textit{id}, \textit{cp}, \textit{mv} oder \textit{rm}. Im Regelfall sind alle
Programme, welche notwendig sind das System erfolgreich zu booten im Verzeichnis
\textit{/bin/} hinterlegt.
% >---------------------------------------------------------------------------<
\subsection{/boot/}%
\label{sec:verzeichnisstrukturen.boot}
In dem Verzeichnis \textit{/boot/} befindet sich der Linux Kernel. Der Linux
Kernel wird als Datei gespeichert. Im Dateinamen aller unterschiedlichen
Kernelversionen befindet sich in der Regel die folgende Zeichenkette, wenn je
nach Distribution diese nicht überschrieben wurde: \textit{vmlinux}.
% NOTE: Missing reference to chapter where linux system will be booted
Neben dem Kernel befindet sich in dem Verzeichnis passend zu den installierten
Kernelversionen noch die Datei \textit{initramdisk}. Sie wird in den
\acrshort{acr:ram} während des Bootvorgangs geladen und startet den Kernel. Mehr
zum Bootvorgang unter Linux in einem späteren Kapitel.
% >---------------------------------------------------------------------------<
\subsection{/boot/EFI/}%
\label{sec:verzeichnisstrukturen.efi}
Das Verzeichnis \textit{/boot/EFI} ist ausschließlich bei Systemen vorhanden,
welches statt der \acrshort{acr:bios} Bootmethode \acrshort{acr:uefi} verwendet.
Das Verzeichnis beinhalter die unterschiedlichen Bootloader. Beispielweise den
von Windows, GRUB oder systemd-boot.
Ratsam ist es daher das Verzeichnis \textit{/boot/EFI} als seperate Partition zu
behandeln, sodass wenn mehrere Systeme installiert sind ein und die selbe EFI
Partition verwendet werden kann. Dies hat den Vorteil, dass ausschließlich eine
Partition in der Firmware des Motherboards angeben werden muss, damit die
Firmware die entsprechenden Bootloader von den jeweiligen Systemen findet.
% >---------------------------------------------------------------------------<
\subsection{/dev/}%
\label{sec:verzeichnisstrukturen.dev}
Physische als auch virtuelle Peripheriegeräte, beispielsweise die physisch
verbaute oder dem Gastsystem zugewiesene virtuelle Festplattte, werden neben
anderen Geräten im Verzeichnis \textit{/dev/} als Datei abgebildet. Siehe
Kapitel
\ref{sec:benutzer-gruppen-und-berechtigungen.dateiberechtigungen.einfach}, um
aus der Attributszeichenkette erkennen zu können, bei welcher Datei es sich um
ein Blockdevice handelt.
Auf diese speziellen Dateien kann anschließend mit anderen Programmen
zugegriffen werden. Beispielsweise das Einbinden eines Blockgerätes (Festplatte)
an einen beliebigen Einbindungspunkt - siehe \textit{mount} Befehl.
% >---------------------------------------------------------------------------<
\subsection{/etc/}%
\label{sec:verzeichnisstrukturen.etc}
In dem Verzeichnis \textit{/etc/} sind Konfigurationsdateien von Programmen
enthalten. Im Regelfall werden diese durch die Entwickler bereitgestellt.
Beispielsweise durch Installation des entsprechenden \acrshortpl{acr:rpm}.
Sind keine Konfigurationsdateien für ein Programm im Verzeichnis \textit{/etc/}
vorhanden. Können diese auch unter \textit{/usr/} gespeichert sein. Ein
manuelles platzieren der Konfigurationsdateien unter \textit{/etc/} würde das
Standardverhalten des Programms übersteuern.
% >---------------------------------------------------------------------------<
\subsection{/home/}%
\label{sec:verzeichnisstrukturen.home}
Es ist das Standardverzeichnis für normale bzw. reale Benutzer. Dieses
Verzeichnis wird manchmal auch mit anderen Linux-Distributionen geteilt, sofern
das gleiche Heimatverzeichnis von mehreren Benutzern unterschiedliche
Distributionen verwendet werden soll.
% >---------------------------------------------------------------------------<
\subsection{/lib/}%
\label{sec:verzeichnisstrukturen.lib}
Bibliotheken, welche gemeinsam durch mehrere Programme, welche sich in den
Verzeichnissen \textit{/bin/} und \textit{/sbin} befinden, geteilt werden,
werden im Verzeichnis \textit{/lib} gespeichert.
% >---------------------------------------------------------------------------<
\subsection{/media/}%
\label{sec:verzeichnisstrukturen.media}
In dem Verzeichnis \textit{/media/} werden entfernbare Dateisysteme eingebunden.
Beispielsweise der USB-Stick, eine USB-Festplatte oder eine CD bzw. DVD, welche
sich im Laufwerk befindet.
Desktopmanager wie Gnome, Cinnamon, Xfce oder KDE übernehmen hier die Funktion,
das Gerät automatisch unter \textit{/media/} einzubinden.
% >---------------------------------------------------------------------------<
\subsection{/mnt/}%
\label{sec:verzeichnisstrukturen.mnt}
Andere Systempartitionen, beispielsweise die C: oder D: Partition von
Windowssystemen auf einem Dualboot System, werden unter \textit{/mnt/}
eingebunden. Im Regelfall auch nur temporär, beispielsweise wenn der
Systemadministrator versucht unter Linux auf die Windowspartitionen zu
zugreifen.
% >---------------------------------------------------------------------------<
\subsection{/opt/}%
\label{sec:verzeichnisstrukturen.opt}
Das Verzeichnis \textit{/opt} ist das Standardverzeichnis für proprietäre
Programme und steht für \textit{optional package tree}. In diesem Verzeichnis
legen daher im Regelfall proprietäre Programme Binär-, Konfigurations-, und
Bibliotheksdateien ab.
Beispielsweise, wenn man einen TeamSpeak 3 Server oder Druckertreiber von
Brother installieren möchte, werden diese unter \textit{/opt} installiert.
% >---------------------------------------------------------------------------<
\subsection{/root/}%
\label{sec:verzeichnisstrukturen.root}
Der Benutzer \textit{root} besitzt sein eigenes Heimatverzeichnis direkt
unterhalb des Wurzelverzeichnisses. Es ist das Verzeichnis \textit{/root/}. Es
wird gesondert geführt und ausschließlich der Benutzer \textit{root} besitzt
Berechtigungen von dem Verzeichnis zu lesen und zu schreiben als auch es
betreten zu können.
% >---------------------------------------------------------------------------<
\subsection{/run/}%
\label{sec:verzeichnisstrukturen.run}
Programme, welche ausgeführt werden und Informationen auslagern speichern diese
im Verzeichnis \textit{/run/}. Dies können beispielsweise Unix-Sockets oder auch
temporäre Einstellungsparameter sein, welche nur zur Laufzeit des Programms
vorhanden sind.
Die Dateien werden nicht im Verzeichnis \textit{/tmp/} gespeichert, da Dateien
und Verzeichnisse unter \textit{/tmp/} automatisch entfernt werden können.
Beispielsweise, wenn das System bemerkt der Speicherplatz geht zur Neige.
Der Dienst \textit{systemd-resolved} speichert als gutes Beispiel unter
\textit{/run/systemd/resolve/resolv.conf} die \textit{resolv.conf} Datei ab,
welche von \textit{/etc/resolv.conf} per symbolischen link referenziert wird.
% >---------------------------------------------------------------------------<
\subsection{/sbin/}%
\label{sec:verzeichnisstrukturen.sbin}
Das Verzeichnis \textit{/sbin} ist identisch zu dem Verzeichnis \textit{/bin}.
Es enthält jedoch ausschließlich Programme welche für den Benutzer \textit{root}
vorgesehen sind.
% >---------------------------------------------------------------------------<
\subsection{/srv/}%
\label{sec:verzeichnisstrukturen.srv}
Stellt das System beispielsweise Mail-, Web- oder andere Dienste bereit, werden
die persistenten Daten unter \textit{/srv/} gespeichert. Dieses Verzeichnis ist
nicht automatisch Bestandteil jeder Distribution. Es kann daher sein, das gerade
bei Distributionen, welche einen minimalistischen Ansatz fahren nicht vorhanden
ist.
% >---------------------------------------------------------------------------<
\subsection{/tmp/}%
\label{sec:verzeichnisstrukturen.tmp}
Das \textit{/tmp/} Verzeichnis ist der generelle Speicherort für temporäre
Dateien. Ältere Systeme verwenden eine eigene Partition für das Verzeichnis
\textit{/tmp/}, um die Größe zu limitieren. Neuere Systeme, welche systemd
verwenden, richten das Verzeichnis \textit{/tmp/} als
\nameref{sec:dateisysteme.tmpfs}
Dateisystem ein und limitieren dieses auf eine prozentuale Größe.
% >---------------------------------------------------------------------------<
\subsection{/usr/}%
\label{sec:verzeichnisstrukturen.usr}
Anwendungen und Dateien die von realen Benutzern verwendet werden, werden im
Gegensatz zu Anwendungen und Dateien welche vom System verwendet werden, unter
\textit{/usr/} gespeichert. Aus diesem Grund sind unterhalb von \textit{/usr/}
auch Verzeichnisse wie \textit{/usr/bin}, \textit{/usr/sbin} oder
\textit{/usr/lib} enthalten. Alle Unterverzeichnisse von \textit{/usr/} sind für
Benutzer nur lesbar und betretbar. Dateien sind in der Regel ebenfalls nur
lesbar eventuell noch ausführbar.
% >---------------------------------------------------------------------------<
\subsection{/var/}%
\label{sec:verzeichnisstrukturen.var}
Der Grundgedanke des Verzeichnisses \textit{/var/} ist, dass es das Gegenstück
zu \textit{/usr/} abbilden soll. Hier können Benutzer beliebig Dateien oder
Verzeichnisse erstellen. Allerdings sind können diese Eingeschränkt sein.
Ein gutes Beispiel sind Logdateien. Würden Logdateien eines Programms, welche
aus dem Verzeichnis \textit{/usr/bin} oder \textit{/usr/sbin} ausgeführt werden,
in das Verzeichnis \textit{/usr/} speichern, würde dies gegen das Konzept des
Verzeichnisses \textit{/usr/} sprechen. Aus diesem Grund werden Logdateien in
das Verzeichnis \textit{/var/log} gespeichert.