1.104.6 – Verwaltung von Dateieigentum

Prüfungskandidaten sollten in der Lage sein, den Benutzer- und Gruppenbesitz von Dateien zu steuern. Dieses Lernziel beinhaltet das Ändern des Besitzers und der Gruppenzugehörigkeit einer Datei sowie des Standardeigentümers von neuen Dateien.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

* chmod
* chown
* chgrp
Im letzten Abschnitt haben wir gesehen, wie Zugriffsrechte gesetzt bzw. verändert werden. All diese Zugriffsrechte beziehen sich ja auf Eigentümer bzw. Gruppen von Usern. Von daher benötigen wir noch die Technik, Eigentümer und Gruppenzugehörigkeit einer Datei zu verändern. Dazu gibt es die Programme chown und chgrp. Diese Programme sollen hier vorgestellt werden.

Ändern des Dateieigentümers mit chown
Um den Eigentümer einer Datei zu wechseln bzw. besser ausgedrückt, eine Datei einem anderen User zu übereignen, existiert das Programm chown. Dieses Programm darf nur vom Systemverwalter ausgeführt werden, ein normaler User kann also nicht seine Dateien anderen Usern übereignen.

Das Programm chown hat eine einfache Aufrufform:

chown [Optionen] Username Datei(en)
chown [Optionen] [Username][.][Gruppenname] Datei(en)
chown [Optionen] –reference=Referenzdatei Datei(en)

Eine oder mehrere Dateien bekommen so als Eigentümer den genannten Usernamen zugewiesen. Der Username kann hier entweder als Name oder als Nummer (UserID – UID) angegeben werden.

Wenn nur ein Username oder eine UserID angegeben wurde, so wird dieser User zum Eigentümer jeder angegebenen Datei und die Gruppenmitgliedschaft der Dateien wird nicht verändert. Wenn dem Username ein Doppelpunkt oder Punkt und ein Gruppenname (oder eine GruppenID) ohne Leerzeichen folgt, dann wird auch die Gruppenzugehörigkeit der Dateien geändert. Wenn dem Usernamen ein Punkt oder Doppelpunkt folgt, aber kein Gruppenname angegeben wird, so wird der angegebene User zum Eigentümer der angegebenen Dateien und die Dateien bekommen die Gruppenzugehörigkeit zu der Gruppe, die die Login-Gruppe dieses Users ist (die Gruppe, die im Gruppenfeld in /etc/passwd für diesen User angegeben ist). Wenn aber der Username weggelassen wurd, aber ein Punkt oder Doppelpunkt, gefolgt von einem Gruppennamen angegeben wurde, so wird nur die Gruppenzugehörigkeit der Dateien verändert, der Eigentümer bleibt unverändert. In diesem Fall arbeitet chown genau wie chgrp.

Wenn statt einem Usernamen und/oder Gruppennamen die Option –reference=Referenzdatei angegeben wurde, so werden Eigentümer und Gruppenzugehörigkeit der angegebenen Dateien so gesetzt, wie die der Referenzdatei.

Wird als Option ein -R oder ein –recursive angegeben, so verändert chown die Eigentümer eines ganzen Verzeichnisbaums, inclusive aller enthaltenen Dateien und Unterverzeichnisse.

Ändern der Gruppenzugehörigkeit einer Datei mit chgrp
Die Gruppenzugehörigkeit einer Datei kann auch mit dem Befehl chgrp gewechselt werden. Die Aufrufform ist ähnlich der von chown:

chgrp [Optionen] Gruppe Datei(en)

Auch hier kann die Gruppe wieder entweder als Gruppenname oder als GruppenID angegeben werden. Die Benutzung von chgrp ist nur dem Eigentümer und dem Superuser (root) erlaubt. Der Eigentümer kann eine Datei nur den Gruppen zuordnen, denen er selbst auch angehört.

Wie schon bei chown und chmod kann auch chgrp mit der Option -R oder –recursive ein ganzer Verzeichnsast rekursiv bearbeitet werden, d.h., daß alle Verzeichnisse und enthaltene Dateien bearbeitet werden.
Sicherstellen der Gruppenzugehörigkeit von Dateien in Verzeichnissen
Wenn ein Verzeichnis für eine bestimmte Gruppe von Usern beschreibbar ist und diese User darin eine gemeinsame Arbeit leisten sollen, so wäre es ja praktisch, wenn alle User innerhalb dieses Verzeichnisses alle Dateien, die sie anlegen, eben der Gruppe zuweisen, der das Verzeichnis angehört. Das ist aber nicht automatisch der Fall.

Jeder User kann beliebig vielen Gruppen angehören. er ist aber immer Mitglied einer sogenannten Login-Gruppe (manchmal auch Initialgruppe genannt). Wenn ein User eine Datei anlegt, so wird diese Datei normalerweise die Gruppenzugehörigkeit der Login-Gruppe dieses Users zugewiesen bekommen.

Um sicherzustellen, daß alle Dateien in einem bestimmten Verzeichnis beim Anlegen immer die Gruppenzugehörigkeit zu der Gruppe bekommen, der das Verzeichnis gehört, muß das Verzeichnis das SGID-Bit gesetzt bekommen. Das wird mit dem Befehl chmod eingestellt, wie auf der letzten Seite beschrieben.

Wenn ein User allerdings nur vorübergehend die Standard-Gruppe wechseln will, so steht im dazu das Kommando newgrp zur Verfügung. Das würde allerdings das Mitdenken aller User voraussetzen, was immer eine Schwachstelle bedeutet…

Wenn also der Systemverwalter ein Verzeichnis für eine bestimmte Projektarbeit anlegt, tut er gut daran, diesem Verzeichnis das SGID-Bit zu setzen, um die Gruppenmitgliedschaft der Dateien in diesem Verzeichnis von vorneherein festzulegen.

1.104.5 – Zugriffsrechte

1.104.5 – Zugriffskontrolle auf Dateien mittels Zugriffsrechten
Prüfungskandidaten sollten in der Lage sein, Dateizugriff mittels Zugriffsberechtigungen zu steuern. Dieses Lernziel beinhaltet Zugriffsrechte auf reguläre und spezielle Dateien sowie Verzeichnisse. Ebenfalls enthalten sind Zugriffsmodi wie suid, sgid und sticky bit, die Verwendung des Gruppenfeldes für die Vergabe von Zugriffsrechten an Arbeitsgruppen, das immutable flag und der voreingestellte Dateierstellungsmodus.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

* chmod
* umask
* chattr
Die Zugriffsrechte unter Linux/Unix sind im Prinzip sehr einfach aufgebaut, jedoch aber auch sehr wirkungsvoll, wenn man weiß, wie sie im Einzelnen angewandt werden. Das Wissen um diese Rechte ist absolutes Grundwissen für alle, die mit Systemverwaltung unter Linux beschäftigt sind und sollte daher im Schlaf beherrscht werden.

Grundsätzlicher Aufbau von Zugriffsrechten
Jede Datei in einem Linux-System – also auch Gerätedateien, Sockets, Pipes, Verzeichnisse, usw. – besitzt in ihrer Inode eine Angabe über die Zugriffsrechte. Außerdem hat jede Datei genau einen Eigentümer und genau eine Gruppe, der sie zugehört. Die Zugriffsrechte beziehen sich immer auf eben diesen Eigentümer der Datei, auf Gruppenmitglieder der Gruppe, der die Datei angehört und auf den Rest der Welt.

Für diese drei Kategorien (Eigentümer, Gruppe, Rest) existiert jeweils eine Angabe, die beschreibt, ob die Datei für die jeweilige Kategorie lesbar (r), beschreibbar (w) und ausführbar (x) ist.

Der Befehl ls -l Dateiname zeigt uns für jede Datei eben diese Angaben. So bedeutet die Ausgabe:

-rw-r—– 1 hans autoren 1519 Jul 29 2000 Testdatei

Die Datei Testdatei ist eine reguläre Datei (-). Sie gehört dem User hans, der sie lesen und verändern darf (rw-). Die Datei gehört zur Gruppe autoren. Mitglieder dieser Gruppe dürfen die Datei lesen (r–). Der Rest der Welt hat keinerlei Rechte auf diese Datei (—).

Das erste Zeichen der Ausgabe zeigt uns also, um was für eine Art Datei es sich handelt. Folgende Dateiarten sind unter Linux definiert:

Zeichen Dateiart
– Reguläre (normale) Datei
d Verzeichnis (directory)
l Symbolischer Link (symlink)
b Blockorientierte Gerätedatei (block device)
c Zeichenorientierte Gerätedatei (character device)
p Feste Programmverbindung (named pipe)
s Netzwerk Kommunikationsendpunkt (socket)

Das dem ersten Zeichen folgende Konstrukt ist die Beschreibung des Zugriffsmodus. Die ersten drei Zeichen beschreiben die Rechte des Eigentümers der Datei, die nächsten drei die Rechte eines Gruppenmitglieds der Gruppe, der auch die Datei zugehört und die letzten drei die Rechte aller anderen User. Ein r bedeutet Leserecht (read), ein w Schreibrecht (write) und ein x Ausführungsrecht (execute). Diese Rechte können numerisch dargestellt werden. Dazu werden die Rechte wie folgt bezeichnet:

Eigentümer Gruppenmitglied Rest der Welt
r w x r w x r w x
4 2 1 4 2 1 4 2 1

Die Nummern werden für jede der drei Kategorien einzeln addiert. Ein Zugriffsrecht von rw-r—– wäre so also numerisch darstellbar als 640. Die 6 errechnet sich aus dem r (4) plus w (2) des Eigentümerrechtes, die 4 ist einfach das Leserecht (r) des Gruppenmitglieds und die 0 entspricht keinem gesetzten Recht.

Für reguläre Dateien sind diese Rechte einfach zu durchschauen. Das Leserecht bedeutet, daß der Inhalt der Datei gelesen werden darf. Das Schreibrecht bedeutet, daß der Inhalt der Datei verändert werden darf (und somit die Datei auch gelöscht werden darf) und das Ausführungsrecht bedeutet, daß die Datei ein Programm ist, das ausgeführt werden darf.

Etwas anders sieht es mit Verzeichnissen aus. Hier bedeutet das Leserecht, daß der Inhalt eines Verzeichnisses aufgelistet werden darf, das Schreibrecht, daß Dateien im Verzeichnis angelegt und gelöscht werden dürfen und das Ausführungsrecht, daß in das Verzeichnis gewechselt werden darf. Das hat einen Haken, zu dem wir später noch kommen werden. Hat nämlich ein User Schreibrecht auf ein Verzeichnis, so darf er darin auch Dateien löschen, auf die er selbst keinerlei Rechte besitzt. Das liegt an der Tatsache, daß ein Verzeichnis genau genommen nur eine Datei ist, die Dateinamen und die dazu passenden Inode-Nummern gespeichert hat. Eine Datei in einem Verzeichnis ist also letztlich nichts anderes als eine Zeile Text in einer Textdatei. Und wer Schreibrechte auf eine Textdatei hat, kann Zeilen daraus löschen!
Spezielle Rechte
Neben diesen sichtbaren Rechten existieren noch drei weitere, die man sich als weitere (führende) Nummer vorstellen kann. Dabei handelt es sich um das Substitute UserID Bit (4), das Substitute GroupID Bit (2) und das Sticky Bit (1).

Substitute UserID Bit (SUID)
Dieses Recht gilt ausschließlich für ausführbare Dateien. Hat eine ausführbare Datei dieses Recht gesetzt, so erscheint in der Darstellung durch das ls -l Kommando statt dem x beim Eigentümerrecht ein s. Jeder User, der dieses Programm ausführt, tut dies unter der effektiven UserID des Users, dem die Datei gehört.

So hat z.B. das Programm /usr/bin/passwd die Aufgabe, daß auch normale User damit ihr eigenes Passwort ändern können. Dieses Passwort wird aber gespeichert in einer Datei, die nur von root beschrieben werden darf. Das Programm /usr/bin/passwd hat als Eigentümer root und hat das Substitute UserID Bit gesetzt. Jeder User, der dieses Programm ausführt tut dies also unter der effektiven UserID von root und hat daher die Rechte von root während der Ausführung. Das ermöglicht es dem Programm, das veränderte Passwort zu speichern.

Das ist beim Passwort-Programm nicht weiter problematisch, eine richtige Sicherheitslücke entsteht, wenn eine Shell mit diesem Bit ausgestattet ist und als Eigentümer root hat. Dann könnte jeder User, der diese Shell ausführt, root-Rechte benutzen!

Substitute GroupID Bit (SGID)
Dieses Recht gilt einerseits für ausführbare Dateien und andererseits für Verzeichnisse. Hat ein ausführbares Programm dieses Recht gesetzt, so gilt der gleiche Mechanismus, wie beim Substitute UserID Bit, nur diesmal eben die Gruppenmitgliedschaft betreffend. Ein User, der dieses Programm ausführt, tut dies als Gruppenmitglied der Gruppe, der das Programm gehört, statt seiner eigentlichen Gruppenkennung. Er hat also die Rechte eines Gruppenmitglieds dieser Gruppe, auch wenn er selbst nicht Mitglied dieser Gruppe ist. Statt dem x beim Gruppenrecht stellt das ls -l Kommando hier ein s dar.

Hat ein Verzeichnis dieses Recht gesetzt, dann liegt der Fall etwas anders. Legt ein User, der Schreibrecht auf ein Verzeichnis hat, in diesem Verzeichnis eine Datei an, so erhält diese Datei normalerweise die Gruppenmitgliedschaft der primären Gruppe des Users, der sie eben angelegt hat. Das führt schnell zum Chaos, wenn z.B. mehrere User zusammen an einem Projekt arbeiten. Alle diese User sind Gruppenmitglieder einer bestimmten Gruppe, aber sie haben diese Gruppe nicht als primäre Gruppe. Das heißt, es kann sein, daß die einzelnen User die Dateien der jeweils anderen Projektmitarbeiter nicht lesen können. Wenn dieses Verzeichnis aber der gemeinsamen Gruppe gehört und eben das Substitute GroupID Bit darauf gesetzt ist, dann werden Dateien in diesem Verzeichnis grundsätzlich unter der GruppenID abgespeichert, der das Verzeichnis gehört. Mit diesem Mechanismus sind Arbeitsverzeichnisse für bestimmte Projektgruppen realisierbar.

Sticky Bit
Das Sticky Bit hat nur eine Bedeutung für Verzeichnisse. Oben wurde schon das Problem erwähnt, daß ein User, der Schreibrecht auf ein Verzeichnis hat, innerhalb dieses Verzeichnisses alle Dateien löschen kann, auch wenn sie ihm nicht gehören und er keinerlei Rechte auf diese Dateien besitzt. Das wird durch das Sticky Bit verhindert.

Ein Verzeichnis in dem jeder User Schreibrecht haben muß, wie etwa das /tmp-Verzeichnis, sollte unbedingt dieses Bit gesetzt haben. Ansonsten kann ein böswilliger User dort die Dateien anderer User löschen.

Das gesetzte Sticky-Bit wird vom ls -l Kommando durch ein t statt des x in der Kategorie “Rechte des Restes der Welt” dargestellt.

Um diese speziellen Rechte auch numerisch darzustellen, wird vor den oben genannten “normalen” Rechten noch eine Oktalziffer angefügt, so daß sich das folgende Bild ergibt:

Sonderrechte Eigentümer Gruppenmitglied Rest der Welt
SUID SGID Sticky r w x r w x r w x
4 2 1 4 2 1 4 2 1 4 2 1

Ein Recht von 4755 bedeutet also, daß das Substitute UserID Bit gesetzt ist (4), der Eigentümer Lese-, Schreib- und Ausführungsrechte (1+2+4=7) hat während sowohl Gruppenmitglieder, als auch der Rest der Welt nur Lese- und Ausführungsrecht (1+4=5) besitzen.

Ändern von Zugriffsrechten mit chmod
Um die oben beschriebenen Rechte vergeben bzw. ändern zu können existiert das Programm chmod (change mode). Es erlaubt, die Rechte von Dateien und Verzeichnisse zu verändern. Die prinzipielle Anwendung ist einfach:

chmod [Optionen] Modus Datei(en)

Die wichtigste Option ist dabei -R oder –recursive, mit dem ganze Unterverzeichnisse mit allen Dateien darin auf einmal bearbeitet werden können.

Als Modus kann entweder ein numerischer, oder ein symbolischer Modus angegeben werden. Der numerische Modus entspricht genau dem, was im letzten Abschnitt dieser Seite beschrieben wurde, er wird hier nicht nochmal erklärt. Nur ein kurzes Beispiel noch, der Aufruf

chmod 644 foo.txt

würde der Datei foo.txt ein Zugriffsrecht von rw-r–r– geben. Mit numerischem Modus ist grundsätzlich immer ein absoluter Wert gesetzt, egal, welche Rechte vorher gesetzt waren.

Der symbolische Modus besteht aus einer Angabe der Rechte durch Buchstaben. Die Grundsätzliche Form ist:

[ugoa] +|-|= [rwxstugo], …

Das führende Zeichen steht für die zu verändernde Kategorie, u steht für User (Eigentümer), g für group (Gruppenmitglied), o für other (Andere) und das a steht für all (Alle). Wird dieses führende Zeichen weggelassen, dann wird standardmäßig a (Alle) angenommen.

Vorsicht, oft wird diese Angabe verwechselt und das o mit dem Begriff Owner (Eigentümer) verwechselt. Das kann fatale Folgen haben, weil man dann die Rechte, die man eigentlich dem Eigentümer geben will, dem Rest der Welt verleiht!

Das folgende Rechenzeichen +, – oder = beschreibt, ob ein Recht den bestehenden Rechten hinzugefügt (+) werden soll, davon abgezogen (-) werden soll oder absolut (=) gesetzt werden soll.

Dem Rechenzeichen folgt die Angabe der zu setzenden (oder addierenden oder subtrahierenden) Rechte in der Form einer Zeichenkette, die aus den Buchstaben r,w,x,s,t,u,g,o besteht. Dabei meinen r, w und x wie üblich Read, Write und Execute. Wird dem User das s-Recht gesetzt, so meint das das Substitute UserID Bit (beispielsweise durch u+s), bekommt hingegen die Gruppe dieses Recht, so ist das Subtitute GroupID Bit gemeint (g+s). Das t steht für das Sticky-Bit und kann nur dem Rest der Welt vergeben werden (o+t).

Folgen dieser Angabe noch ein u, g oder o, so ist dies ein Ausschlußkriterium in Verbindung mit dem a am Anfang. Das nachgestellte u, g oder a schützt also die Rechte der User, Gruppenmitglieder bzw. Anderen vor Veränderung.

Das ganze kann jetzt mehrmals hintereinander angewandt werden, indem mehrere solcher Modi durch Kommas getrennt angegeben werden. So ist es etwa möglich zu schreiben:

chmod u=rwx,g=rx,o-rwx foo

um dem Programm foo das Recht rwxr-x— zu setzen. Gewöhnlich tut man sich aber in diesem Fall leichter mit einer numerischen Angabe (hier 750).

Das praktische an der symbolischen Angabe von Modi ist die Fähigkeit, bestimmte Rechte auf die bestehenden Rechte aufzuaddieren bzw. sie von den bestehenden Rechten abzuziehen. Ein einfaches +x bedeutet z.B., daß allen drei Kategorien User, Group und Other ein Ausführungsrecht zu den schon vorhandenen Rechten gegeben wird.

Wird als Option ein -R oder ein –recursive angegeben, so verändert chmod die Rechte eines ganzen Verzeichnisbaums, inclusive aller enthaltenen Dateien und Unterverzeichnisse.

Voreingestellten Zugriffsmodus mit umask bestimmen
Es bleibt jetzt natürlich die Frage, welche Zugriffsberechtigungen beim Anlegen einer Datei verwendet werden. Um das festzulegen, kennt Unix das Kommando umask, dessen Anwendung aber etwas merkwürdig ist.

Der Befehl umask erwartet eine Maske als Parameter, die sich auf den Zugriffsmodus bezieht, den neu zu erstellende Dateien bekommen sollen. Das Wort Maske bedeutet, daß nicht die Werte eingegeben werden, die gesetzt werden sollen, sondern umgekehrt, die Werte, die nicht gesetzt (maskiert) werden sollen. Die einfachste Möglichkeit besteht darin, die gewünschten oktalen Werte jeweils von 7 abzuziehen:

Wollen wir z.B. dafür sorgen, daß alle unsere Dateien die Zugriffsberechtigung rw-r—– bekommen, also Lese-und Schreibrecht für den Eigentümer, Leserecht für Gruppenmitglieder und keine Rechte für den Rest der Welt, dann entspräche das der oktalen Darstellung 640.

Die dafür notwendige umask wäre dann:

7-6=1
7-4=3
7-0=7

Mit dem Befehl

umask 137

würden also alle Dateien, die wir anlegen die gewünschte Zugriffsberechtigung 640 bekommen. Das hat noch einen kleinen Haken, weil die Verzeichnisse, die wir erstellen würden auch diesen Modus bekämen. Damit wäre für uns selbst das Durchsuchungsrecht (x) nicht gesetzt. Linux hat aus diesem Grund dafür den Mechanismus entwickelt, daß selbst wenn im umask-Kommando das x-Recht gesetzt ist, beim Erzeugen von normalen Dateien dieses Recht nicht gesetzt wird, beim Erzeugen von Verzeichnissen hingegen schon. Ein vernünftiges umask-Kommando setzt also zumindestens für den Eigentümer auch das x-Recht. Damit wäre ein typischer Wert für umask z.B. 022 (rwxr-xr-x) oder 027 (rwxr-x—).

Neben dieser umständlichen Methode gibt es aber auch die symbolische Form, die die Rechte direkt bezeichnet. Sie wird in der Form u=…,g=…,o=… eingegeben, wobei für … immer die entsprechenden Rechte eingesetzt werden. Also würde der Befehl

umask u=rwx,g=rx,o=

die gleiche Wirkung haben wie

umask 027

Typischerweise steht eine umask-Anweisung in einer der Shell-Startdateien wie z.B. /etc/profiles oder ~/.profile. Jeder User kann seine Voreinstellung also selbst einstellen, eine der wenigen Möglichkeiten, mit denen er dem Systemverwalter ins Handwerk pfuschen kann, wenn der versucht, sein System sicher zu machen. Allerdings bezieht sich diese Einstellung ja nur auf die neu anzulegenden Dateien des jeweiligen Users…
Erweiterte Dateiattribute im EXT2-Dateisystem
Dateien auf EXT2-Dateisystemen besitzen neben den oben genannten Attributen noch weitere, die einen zusätzlichen Schutz bieten können. Diese Attribute können mit dem Befehl lsattr angezeigt und mit chattr verändert (gesetzt) werden.

Die wichtigsten dieser Attribute sind:

a (append)
Eine Datei mit a-Attribut kann schreibend nur im Anhängen-Modus geöffnet werden. Das bedeutet, daß ein User, der Schreibrecht auf diese Datei hat, zwar Daten an das Ende der Datei anhängen kann (etwa durch die Verwendung der >>-Umleitung), jedoch keine Veränderungen am bestehenden Inhalt der Datei vornehmen darf. Nur der Superuser kann dieses Attribut setzen oder entfernen.
i (immutable)
Eine Datei mit gesetztem i-Attribut kann nicht modifiziert werden. Sie kann weder gelöscht, noch umbenannt werden, es kann kein Hardlink auf sie angelegt werden und keine Daten können angehängt werden. Nur der Superuser kann dieses Attribut setzen oder entfernen.
s (save-delete)
Wenn eine Datei das s-Attribut gesetzt hat, werden alle Blöcke dieser Datei beim Löschen der Datei mit Nullzeichen überschrieben. Dadurch ist die Datei auch durch Methoden wie dem Dateisystemdebuger nicht wieder herstellbar oder ihr Inhalt ist nicht mehr einsehbar, wenn sie einmal gelöscht wurde.

Eine Liste aller möglichen Attribute entnehmen Sie der Handbuchseite von chattr.

1.104.4 – Verwalten von Diskquotas

Prüfungskandidaten sollten in der Lage sein, Diskquotas für Benutzer zu verwalten. Dieses Lernziel beinhaltet das Einrichten von Diskquotas für ein Dateisystem, das Bearbeiten, Prüfen und Erstellen von Berichten über Userquotas.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

* quota
* edquota
* repquota
* quotaon
Das Erstellen von Diskquotas hatte in der ersten Version der LPI101 Prüfung nur eine Bewertung von 1, es ist also fragwürdig, ob überhaupt nur eine Frage zu diesem Thema in der Prüfung vorkommt. Trotzdem ist es ein offizielles Thema und wird daher hier behandelt. Abgesehen von der niedrigen Bewertung ist es aber doch so, daß es ein sehr praktischer Mechanismus ist, den man in der Systemverwaltung häufig brauchen kann.

Worum geht es? Quotas sind Mechanismen, die es erlauben, bestimmten Usern oder Gruppen einen eingeschränkten Platz auf einem bestimmten Dateisystem zu gewähren. Das heißt, es ist z.B. möglich, einem User fest vorzugeben, wieviel Platz er in seinem Homeverzeichnis nutzen darf. Damit kann verhindert werden, daß ein User übermäßig viel Platz in Anspruch nimmt und so den anderen Usern Platz wegnimmt. In der Praxis findet man diesen Mechanismus häufig bei Webservern, die bestimmten Usern eine eingeschränkte Menge Platz anbieten, um Webseiten darauf abzulegen.

Das Prinzip der Quotas läuft darauf hinaus, daß der Kernel bei jedem schreibenden Zugriff eines Users auf ein Dateisystem überprüft, ob der User noch Platz hat, oder ob er seine Quote schon erreicht hat. Um das zu gewährleisten, muß schon beim Mounten des Dateisystems festgelegt werden, daß dieses Dateisystem eine Quotierung des Platzes haben soll. Das wird in der Regel in der Datei /etc/fstab festgelegt, wo bei den Optionen eines Dateisystems die Begriffe usrquota bzw. grpquota angefügt werden. Userquotas sind Einschränkungen für einzelne User, Gruppenquotas entsprechend Einschränkungen für bestimmte Usergruppen.

Voraussetzungen
Die erste Voraussetzung zur Verwendung von Disk-Quotas ist die Verwendung eines Kernels, der quotas unterstützt. Das sollte heute standardmäßig jeder Kernel anbieten.

Als nächstes muß in /etc/fstab angegeben werden, welche Dateisysteme Disk-Quota benutzen sollen. Jedes Dateisystem, das dieses Feature anbieten soll muß hier bei den Mount-Optionen den Begriff usrquota für Userquotas und/oder grpquota für Gruppenquotas enthalten. Eine /etc/fstab-Datei könnte also dann folgendermaßen aussehen:

/dev/hda2 / ext2 defaults,usrquota 1 1
/dev/hda3 swap swap defaults 0 2
/dev/hda5 /usr ext2 defaults 1 2
/dev/hda6 /opt ext2 defaults 1 2
/dev/hda7 /home ext2 defaults,usrquota 1 2

Wir haben also sowohl für das Wurzeldateisystem (hier /dev/hda2), als auch für das Dateisystem, auf dem die Homeverzeichnisse liegen (/home auf /dev/hda7) Userquotas angegeben.
Anlegen der Quotafiles mit quotacheck
Die Angabe, welche User auf welchem Dateisystem wieviel Platz bzw. wieviel Inodes benutzen dürfen, steht auf der Wurzel des jeweiligen Dateisystems in den Dateien quota.user bzw. quota.group. Diese Dateien sind Binärdateien, die zunächst einmal angelegt sein müssen. Dazu dient das Programm quotacheck. Um dieses Programm zu benutzen sind root-Privilegien nötig.

Das Programm quotacheck kann entweder für jedes Dateisystem einzeln aufgerufen werden, indem ihm die entsprechende Gerätedatei als Parameter mit angegeben wird, oder es wird mit dem Parameter -a aufgerufen und arbeitet so alle Dateisysteme ab, die in der Datei /etc/fstab eine Quotaangabe gesetzt haben.

Im einfachsten Fall schreiben wir also (als root) die Zeile

quotacheck -avug

was bedeutet, daß alle Dateisysteme bearbeitet werden, die Quotas unterstützen (-a), daß dort sowohl Userquotas (-u), als auch Gruppenquotas (-g) berücksichtigt werden und daß das Programm uns auch mitteilt, was es gerade tut (-v).

Dieser Befehl sollte immer dann angewandt werden, wenn ein neues Dateisystem mit quotas erstellt wurde oder wenn Dateisysteme nicht sauber heruntergefahren wurden, also typischerweise nach einem Systemabsturz, wenn auch fsck ausgeführt wird. Die meisten Distributionen bieten bereits fertige Startdateien an, die diese Aufgabe übernehmen.

Nach der Abarbeitung dieses Befehls existieren auf allen Dateisystemen, die die Mountoption usrquota gesetzt hatten die Datei quota.user und auf allen Dateisystemen, die die grpquota-Option aktiviert hatten die Datei quota.group. Diese Dateien enthalten binär codiert alle wichtigen Angaben über die festgelegten User- bzw. Gruppenquotas, insbesondere auch die Angaben, welche User wieviel Platz bzw. wieviele Dateien auf diesem Dateisystem im Augenblick in Anspruch nehmen.

Quotas definieren mit edquota
Nachdem die Quotadateien jetzt angelegt sind, müssen wir als nächstes die Beschränkungen definieren, die für den jeweiligen User bzw. die Gruppe gewünscht sind. Auch das darf natürlich nur root vornehmen. Für diese Aufgabe existiert das Programm edquota.

1.104.3 – Ein- und Aushängen von Dateisystemen

zurück zu 1.104 – Linux Dateisysteme
Prüfungskandidaten sollten in der Lage sein, das Einhängen (Mounten) eines Dateisystems zu konfigurieren. Dieses Lernziel beinhaltet die Fähigkeit, Dateisysteme manuell ein- und auszuhängen, die Konfiguration des Mountens von Dateisystemen bei Systemstart und das Konfigurieren von wechselbaren Datenträgern, die von Benutzern gemountet werden können, wie z.B. Bänder, Disketten und CDs.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

* /etc/fstab
* mount
* umount
Unter Linux/Unix werden die verschiedenen Laufwerke nicht wie etwa unter Windows als einzelne Dateisysteme mit eigenem Laufwerksbuchstaben verwaltet, sondern sie werden zu einem einzigen Baum zusammengebaut. Der englische Begriff to mount (anbringen, montieren) steht für das Einhängen der verschiedenen Dateisysteme in den Dateibaum. Dieses Einhängen geschieht entweder automatisch beim Systemstart, oder einzelne Dateisysteme werden manuell während des Betriebs gemountet. Dieses manuelle Mounten bezieht sich in der Regel auf Wechsemedien, wie etwa Disketten, CD-ROMs oder auch Netzverbindungen (im Windows-Jargon: Netzlaufwerke)

In diesem Zusammenhang sind für uns zwei Programme und zwei Dateien wichtig. Die Programme sind diejenigen, die wir zum Einhängen (mount) und Abhängen (umount) benötigen, die Dateien zeigen, was wohin eingehängt werden soll (/etc/fstab) und was gerade eingehängt ist (/etc/mtab). Diese vier Elemente sollen hier dargestellt werden.
Das Programm mount
Mit dem Programm mount werden Dateisysteme an bestimmte Plätze, also in bestimmte Verzeichnisse eingehängt, neudeutsch gemountet. Die grundsätzliche Form des Programms ist simpel:

mount [-t Dateisystemtyp] [ -o Optionen] [Gerätedatei] [Mountpoint]

Die meisten Dateisystemtypen werden heute von mount selbstständig erkannt, die Angabe des Dateisystemtyps kann daher meist weggelassen werden. Die Optionen sind abhängig vom verwendeten Dateisystemtyp, sie werden später noch etwas genauer dargestellt. Wichtig ist also zunächst einmal die Angabe, welches Gerät (Gerätedatei in /dev) soll wohin eingehängt werden.

Um z.B. eine Diskette (/dev/fd0) ins Verzeichnis /floppy einzuhängen würde der Befehl

mount /dev/fd0 /floppy

genügen. Nachdem dieser Befehl ausgeführt wurde ist der Inhalt der Diskette im Verzeichnis /floppy zu finden. Eventuelle Inhalte, die vorher in diesem Verzeichnis waren sind jetzt unsichtbar, sobald das Diskettenlaufwerk aber wieder abgehängt ist, sind sie wieder vorhanden.

Sobald ein Dateisystem mit dem mount-Befehl eingehängt wurde (und dabei nicht die Option -n gesetzt wurde) wird ein Eintrag in die Datei /etc/mtab geschrieben, der das Dateisystem und den Mountpoint beschreibt.

Existiert bereits ein Eintrag in /etc/fstab, der das zu mountende Dateisystem beschreibt, so genügt dem mount-Befehl die Angabe entweder der Gerätedatei oder des Mountpoints, um das Dateisystem einzuhängen.

Soll statt eines lokalen Dateisystems ein NFS-Verzeichnis gemountet werden, so muß statt der Gerätedatei der Rechnername des NFS-Servers, gefolgt von einem Doppelpunkt “:” und dem freigegebenen Verzeichnispfad angegeben werden. So würde die Zeile

mount einstein.my.domain:/usr/public /mnt

das Verzeichnis /usr/public des Rechners einstein.my.domain in das lokale Verzeichnis /mnt einhängen.

Der mount-Befehl kann auch einfach mit dem Parameter -a aufgerufen werden, ohne Nennung eines Dateisystems. Dann werden alle Dateisysteme eingehängt, die in der Datei /etc/fstab stehen und dort nicht die Option noauto gesetzt haben. Das passiert gewöhnlich beim Hochfahren des Systems.
Die Optionen zum Einhängen der Dateisysteme
Das Programm mount kann mit dem -o Kommandozeilenparameter verschiedene Optionen setzen, wie ein Dateisystem gemountet werden soll. Die selben Optionen können auch in der Datei /etc/fstab angegeben werden (siehe unten).

Folgende Optionen werden von allen Dateisystemen verstanden:

async
Alle Ein-/Ausgabe Operationen des Dateisystems werden asynchron vorgenommen.
atime
Die Zugriffszeit der Inodes (atime) werden bei jedem Zugriff gesetzt. (Voreinstellung)
auto
Wenn diese Option in /etc/fstab steht, wird das Dateisystem gemountet, wenn mount mit der Option -a aufgerufen wird.
defaults
Entspricht den voreingestellten Optionen: rw, suid, dev, exec, auto, nouser und async
dev
Gerätedateien auf dem Dateisystem sind gültig und werden interpretiert.
exec
Erlaubt die Ausführung von Binärdateien auf dem Dateisystem.
noatime
Die Inode-Zugriffszeiten (atime) werden nicht bei jedem Zugriff gesetzt.
noauto
Wenn ein Eintrag in /etc/fstab diese Option gesetzt hat, so wird dieses Dateisystem nicht durch den Befehl mount -a eingehängt. Also wird es auch nicht beim Systemstart automatisch gemountet.
nodev
Gerätedateien auf diesem Dateisystem werden nicht interpretiert.
noexec
Verbietet die Ausführung von Binärdateien auf diesem Dateisystem.
nosuid
Die SUID und SGID Bits von Programmen auf diesem Dateisystem werden ignoriert.
nouser
Ein Normaluser (nicht root) darf dieses Dateisystem nicht mounten.
remount
Ein bereits gemountetes Dateisystem soll neu gemountet werden. Das wird meist benutzt, um die Optionen eines bereits gemounteten Dateisystems neu zu setzen, insbesondere um ein ReadOnly Dateisystem wieder beschreibbar zu mounten.
ro
Read Only – Das Dateisystem wird ReadOnly (nur lesbar) gemountet.
rw
ReadWrite – Das Dateisystem wird ReadWrite (les- und schreibbar) gemountet.
suid
SUID und SGID Bits werden interpretiert.
sync
Alle Ein- und Ausgabeoperationen werden synchron durchgeführt.
user
Erlaubt einem Normaluser, das Dateisystem zu mounten.

Neben diesen Optionen, die für alle verwendeten Dateisystemtypen gelten, existieren noch viele verschiedene Optionen für jeden einzelnen Dateisystemtyp. Diese Optionen hier darzustellen würde einerseits den Rahmen dieser Darstellung sprengen und andererseits sind sie auch nicht notwendiger Bestandteil der LPIC 101 Prüfung. Wer sie nachlesen will, kann das auf der Handbuchseite des mount-Befehls tun.
Das Programm umount
Das Programm umount (nicht unmount !!) hängt ein oder mehrere eingehängte Dateisysteme wieder ab. Das abzuhängende Dateisystem kann entweder durch die Nennung der entsprechenden Gerätedatei oder durch die Angabe des Mountpoints spezifiziert werden.

Ein Dateisystem kann nicht abgehängt werden, wenn es in Benutzung (busy) ist. Das ist in der Regel dann der Fall, wenn ein Prozess ein Verzeichnis dieses Dateisystems als aktuelles Arbeitsverzeichnis hat.

Wird umount mit dem Parameter -a aufgerufen, so werden alle Dateisysteme abgehängt, die in der Datei /etc/mtab aufgelistet sind. Das passiert gewöhnlich während des Shutdowns.
Die Datei /etc/mtab
Die Datei /etc/mtab enthält immer eine Liste aller gerade gemounteten Dateisysteme. Diese Datei wird niemals von Hand editiert, sie ist ausschließlich von den Programmen mount und umount zu beschreiben. Es existieren zwar für beide Befehle jeweils die Option -n, die verhindert, daß dieser Eintrag gemacht wird, das dient aber nur dazu, daß auch auf Systemen, deren /etc-Verzeichnis ReadOnly gemountet ist, beide Befehle funktionieren.
Die Datei /etc/fstab
Die Datei /etc/fstab ist sozusagen die Bauanleitung des Systems, in der genau steht, welches Dateisystem wohin gemountet werden soll. Es obliegt dem Systemadministrator, diese Datei zu erstellen und zu pflegen. Jedes Dateisystem wird durch eine separate Zeile in der fstab repräsentiert; innerhalb einer Zeile werden die Felder durch Tabs oder Leerzeichen getrennt. Die Reihenfolge der Zeilen in der fstab ist wichtig, da fsck(8), mount(8), und umount(8) diese Datei sequentiell abarbeiten.

Das erste Feld, (fs_spec), beschreibt das zu mountende blockorientierte Device oder remote filesystem.

Das zweite Feld, (fs_file), gibt den Mountpunkt für das Dateisystem an. Bei Swap-Partitionen sollte hier `none” stehen.

Das dritte Feld, (fs_vfstype), beschreibt den Typ des Dateisystems. Hier steht entweder (bei festen Partitionen) das jeweilige Kürzel für das Dateisystem, das auf der Partition angelegt ist (ext2, minix, vfat, swap, …) oder (bei Wechselplattenlaufwerken wie Zip- oder Diskettenlaufwerken) auto, damit der mountbefehl den jeweiligen Typ selbst erkennt. Bei NFS-Verbindungen steht hier entsprechend der Begriff nfs.

Das vierte Feld, (fs_mntops), beschreibt die zum Dateisystem gehörenden Mountoptionen. Hier werden die Optionen, die oben näher beschrieben wurden, als eine durch Kommas getrennte Liste angegeben. Falls keine speziellen Optionen gewünscht sind, wird hier der Begriff defaults eingegeben.

Das fünfte Feld, (fs_freq), wird von dump(8) benutzt um zu entscheiden welche Dateisysteme gedumpt werden müssen. Eine 1 bedeutet, daß das Dateisystem mit dump bearbeitet werden soll, eine 0 bedeutet, daß es nicht gedumpt werden muß. Ist das fünfte Feld nicht vorhanden, wird für diesen Wert Null angenommen und dump geht davon aus, daß das Dateisystem nicht gedumpt werden muß.

Das sechste Feld, (fs_passno), wird von fsck(8) benutzt um die Reihenfolge, in der die Dateisysteme während des Reboots geprüft werden, festzulegen. Das root Dateisystem sollte mit einer fs_passno von 1 versehen sein, andere Dateisysteme mit einer fs_passno von 2. Dateisysteme innerhalb eines Laufwerks werden sequentiell geprüft, Dateisysteme auf verschiedenen Laufwerken jedoch gleichzeitig, um parallel arbeitende Hardware zu unterstützen. Ist das sechste Feld nicht vorhanden oder Null, wird sinnigerweise eine Null zurückgegeben und fsck geht davon aus, daß das Dateisystem keiner Prüfung bedarf.

Normalerweise darf nur root Dateisysteme an- und abhängen. Das macht bei Festplattenpartitionen durchaus Sinn, ist aber für PC-Hardware mit Wechselmedien wie Disketten, CD-Laufwerke oder ZIP-Disks sehr unpraktisch. Wenn also gewünscht wird, daß ein Normaluser bestimmte Laufwerke auch mounten darf, so sollte bei den Optionen nach dem “defaults” noch ein “user” stehen. Damit dieses Laufwerk dann aber beim Start nicht automatisch gemountet wird (und so eine Fehlermeldung provoziert, wenn z.B. keine Diskette eingelegt ist) sollte auch noch die Option “noauto” benutzt werden.

Ein typischer Eintrag in einem sehr einfachen Linux-System könnte also folgendermaßen aussehen:

/dev/hda2 / ext2 defaults 1 1
/dev/hda3 swap swap defaults 0 2
/dev/hda5 /usr ext2 defaults 1 2
/dev/hdb /cdrom auto ro,noauto,user 0 0
/dev/fd0 /floppy auto defaults,noauto,user 0 0

1.104.2 – Erhaltung der Dateisystemintegrität

zurück zu 1.104 – Linux Dateisysteme
Prüfungskandidaten sollten in der Lage sein, die Integrität von Dateisystemen zu prüfen, freien Speicherplatz und Inodes zu überwachen und einfache Dateisystemprobleme zu beheben. Dieses Lernziel beinhaltet die Kommandos, die für die Verwaltung eines Standard-Dateisystems notwendig sind sowie die zusätzlichen Notwendigkeiten eines Journaling Dateisystems.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

* du
* df
* fsck
* e2fsck
* mke2fs
* debugfs
* dumpe2fs
* tune2fs
Dieser Bereich hat eine verhältnismäßig hohe Bewertung und es kommen in der LPI 101 Prüfung wirklich einige Fragen zu diesem Thema an die Reihe. Zunächst einmal ist es notwendig, die Architektur der Unix-Dateisysteme zu verstehen, das wurde bereits auf den letzten Seiten erklärt. Ein großer Schwerpunkt liegt im Verständnis des I-Node-Systems. So ist z.B. eine häufige Fehlerursache das Fehlen von freien I-Nodes. Obwohl auf einer Platte noch haufenweise Megabytes frei wären kann keine Datei mehr angelegt werden. Daher sind Techniken notwendig, die das Erkennen solcher Probleme ermöglichen.

Das Programm fsck und seine Verwandten
Wie schon beim Anlegen von Dateisystemen, so ist auch beim Reparieren bzw. Prüfen der Systeme für jedes Dateisystem ein spezielles Programm vorhanden, das genau das jeweilige System kennt. Wie beim Anlegen gibt es aber eben auch wieder ein sogenanntes Frontend, das dann die jeweiligen Programme aufruft. Dieses Frontend heißt fsck (FileSystemChecK). Dieses Frontend ruft dann die einzelnen Filesystem-Checker für die jeweiligen Dateisysteme auf, als da wären:

* e2fsck bzw. fsck.ext2 für das Second Extended Filesystem
* reiserfsck für das ReiserFS
* fsck.minix für Minix Dateisysteme
* fsck.msdos für DOS-FAT-Systeme
* fsck.vfat für Windows-VFAT-Systeme
* fsck.xfs für XFS-Dateisysteme

Grundsätzlich ist jedes dieser Programme dafür gedacht, die Konsistenz eines Dateisystems zu überprüfen und gegebenenfalls zu reparieren.

Die Anwendung des fsck-Programms sollte immer nur auf nicht gemounteten Dateisystemen stattfinden, da sonst die Gefahr droht, daß ein Schreibzugriff eines anderen Prozesses (wie etwa die ständige Synchronisation) Veränderungen vornimmt, die den Check bzw. die Reparatur durcheinanderbringen und so den Schaden nur vergrößern. Das ist allerdings ein Problem beim Überprüfen des Wurzel-Dateisystems, da es nicht so einfach möglich ist, es zu checken, ohne es zu mounten. In diesem Fall sollte grundsätzlich in den Single-User-Mode gewechselt werden und das Wurzeldateisystem sollte Read-Only gemountet sein!

Beim Systemstart wird das Programm fsck mit der Option -A aufgerufen, was das Programm veranlasst, alle Dateisysteme zu überprüfen, die in /etc/fstab aufgelistet sind. Die Reihenfolge ist dabei grundsätzlich durch die Angabe des sechsten Feldes innerhalb der /etc/fstab Datei geklärt. Das Wurzeldateisystem wird zuerst überprüft und dann werden entsprechend den Nummern in diesem sechsten Feld (fs_passno) die anderen Dateisysteme der Reihe nach abgearbeitet. Wenn mehrere solcher Systeme die gleiche Nummer haben, dann wird versucht, sie gleichzeitig zu bearbeiten.

Soll ein Dateisystem manuell (nicht beim Systemstart) überprüft werden, so gibt es ein paar Dinge zu bedenken. Neben der Tatsache, die oben schon erwähnt wurde, daß das System nicht gemountet sein sollte, gibt es ein paar zu bemerkende Optionsschalter, die bekannt sein müssen.

Die grundsätzliche Aufrufform ist

fsck Optionen Dateisystem

Um das Dateisystem jetzt manuell zu überprüfen, sollten zumindestens die wichtigsten Optionen bekannt sein, sonst kann es schlimmstenfalls dazu kommen, daß es gar nicht überprüft wird. Die folgenden Optionen beziehen sich hauptsächlich auf das EXT2 Dateisystem, das im Augenblick sicherlich der Standard unter Linux ist.

-f
force – die Überprüfung wird erzwungen, auch wenn das Dateisystem ein gesetztes Valid-Flag hat. Das ist im Handbetrieb fast immer der Fall, daher ist das -f ein sehr wichtiger Parameter.
-p
preen – Automatische Reparatur ohne jede Nachfrage.
-n
no – Das Dateisystem wird ReadOnly geöffnet und alle Fragen, ob eine bestimmte Aktion durchgeführt werden soll, werden automatisch mit n(ein) beantwortet. Es werden also keine Veränderungen durchgeführt, aber man kann sehen, was passieren würde…
-y
yes – Das genaue Gegenteil von -n. Alle gestellten Fragen werden mit y(es) beantwortet.

Die Angabe des Dateisystems erfolgt in Form der entsprechenden Gerätedatei. Ein manueller Aufruf könnte also z.B. so aussehen:

e2fsck -f /dev/hda7

Damit würde das Dateisystem auf der siebten Partition (der dritten logischen Partition innerhalb der erweiterten Partition) des Masters des ersten IDE-Kanals zwingend (-f) überprüft.

Die Überprüfung und Reparatur von Journaling-Dateisystemen läuft grundsätzlich anders ab, als die von herkömmlichen Dateisystemen. Hier wird – im Falle einer Inkonsistenz – der Transaction-Log – eben das Journal – zurückverfolgt und alle Transaktionen rückgängig gemacht, bis das System wieder konsistent ist. Dieser Vorgang ist wesentlich schneller, als der bei einem traditionellen Dateisystem, da nicht die ganze Platte überprüft werden muß.

Das Programm df
Das Programm df (Disk Free) dient dazu, die Belegung einzelner Dateisysteme (oder aller gemounteten Dateisysteme) zu ermitteln. Die Anwendung ist sehr einfach, wird df ohne Parameter angewandt, so zeigt es alle gemounteten Dateisysteme etwa in der folgenden Form:

Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda2 2071328 1051656 914448 53% /
/dev/hda5 3099108 1737096 1204580 59% /usr
/dev/hda6 2071296 767708 1198364 39% /opt
/dev/hda7 2071296 215212 1750860 11% /home

Aus dieser Ausgabe ist also zu entnehmen, welche Dateisysteme gerade gemountet sind, wieviel 1 Kilobyte-Blocks insgesammt zur Verfügung stehen (1k-blocks), wieviel davon belegt sind (Used), wieviel also noch frei sind (Available), die prozentuale Auslastung – also wieviel Prozent sind belegt (Use%) und schließlich der Mountpoint, an dem das Dateisystem eingehängt ist.

Wird stattdessen der Befehl df mit einem bestimmten Dateisystem aufgerufen, entweder durch die Nennung des Mountpoints oder durch die Angabe der entsprechenden Gerätedatei, so werden nur die Angaben über dieses Dateisystem ausgegeben. Hätten wir also entweder

df /usr

oder

df /dev/hda5

eingegeben, so wäre es zur folgenden Ausgabe gekommen:

Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda5 3099108 1737096 1204580 59% /usr

Ein wichtiger Parameter für df ist noch die Angabe -i oder –inodes. Wird df mit dieser Option aufgerufen, so werden statt den Angaben über die Kilobyte-Blöcke jetzt Angaben über die I-Nodes gemacht. die Ausgabe sähe jetzt also folgendermaßen aus:

Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda2 263296 16769 246527 6% /
/dev/hda5 393600 100095 293505 25% /usr
/dev/hda6 263296 32595 230701 12% /opt
/dev/hda7 263296 11088 252208 4% /home

Jetzt sehen wir also die Anzahl aller Inodes, die Anzahl der benutzten Inodes (IUsed), die Anzahl der freien Inodes (IFree) und wieder die prozentuale Auslastung (IUse%).

Diese Angaben sind auserordentlich wichtig, weil – wie oben schon erwähnt – es dazu kommen kann, daß zwar noch reichlich Platz in Kilobyte auf einer Partition sein kann, jedoch keine Inodes mehr frei sind, weil sehr viele, sehr kleine Dateien darauf gespeichert sind.

Auch hier gibt es einen wichtigen Hinweis für moderne Journaling-Dateisysteme. Diese Systeme speichern ihre Daten in einer völlig anderen Struktur ab, in sogenannten B-Bäumen. Das hat zur Folge, daß solche Systeme keinen reservierten Platz für die Inodes aufweisen, also Inodes dynamisch anlegen können, wenn sie benötigt werden. Aus diesem Grund zeigt df -i bei solchen Systemen keine realen Werte für die Inodes an.

Das Programm du
Das Programm du (Disk Usage) zeigt den Platzbedarf einzelner Dateien bzw. Verzeichnisse an. Das ist z.B. wichtig, wenn es darum geht, herauszufinden, welches Verzeichnis besonders viel Platz benötigt auf einer Partition, von der der df-Befehl gezeigt hatte, daß der Platz langsam knapp wird.

Das Programm ist in der Regel nur sinnvoll mit Kommandozeilenparametern anwendbar, weil es sonst alle Dateien und Verzeichnisse zeigt und die Ausgabe so etwas unübersichtlich wird. Der wichtigste Optionsschalter ist -s, der dafür sorgt, daß nur die Summe der verwendeten Bytes aller übergebenen Verzeichnisse ausgibt. So ist schnell feststellbar, wieviel Platz ein Verzeichnis mit allen darin enthaltenen Dateien und Unterverzeichnissen benötigt. Der Aufruf

du -s /opt

führt dann nur noch zu einer Ausgabe, die etwa folgendermaßen aussehen könnte:

767708 /opt

Die Angaben erfolgen normalerweise in Kilobyte, die obige Ausgabe besagt also, daß 760 Megabyte im /opt-Verzeichnis belegt sind. Wenn wir jetzt wissen wollen, wie sich diese Summe zusammensetzt, dann können wir einfach alle Verzeichnisse mitangeben, indem wir schreiben:

du -s /opt/*

und bekommen jetzt eine Auflistung wie folgt:

20 /opt/Office51
20 /opt/fsuite
88556 /opt/gnome
157568 /opt/kde
184220 /opt/kde2
16 /opt/lost+found
31372 /opt/netscape
20924 /opt/netscape6
4 /opt/nps
258728 /opt/office52
4 /opt/oracle
8 /opt/skyrix
9476 /opt/slab
11764 /opt/tfd
8 /opt/tngfw
4 /opt/virtuoso-lite
5012 /opt/www

Jetzt lässt sich also schon ziemlich genau sagen, wer hier den vielen Platz braucht…

Werkzeuge für den Umgang mit Ext2-Dateisystemen
In dieser Stufe der Linux-Zertifizierung werden für die hier genannten Werkzeuge noch keine umfassenden Kenntnisse verlangt. Wichtig ist, zu wissen, daß sie existieren und welche Aktionen damit vorgenommen werden können. An dieser Stelle also nur eine kurze Beschreibung der entsprechenden Tools mit jeweils einem Hinweis auf die Handbuchseiten. Ich habe die entsprechenden Handbuchseiten übersetzt, ein Studium dieser Information kann sicherlich nicht schaden.

* mke2fs
Das Werkzeug zum Anlegen des Dateisystems wurde in Abschnitt 1.104.1 – Erzeugen von Partitionen und Dateisystemen bereits ausführlich besprochen.
* debugfs
Ein mächtiges Werkzeug, um ein EXT2-Dateisystem zu bearbeiten. Mit diesem Programm ist es möglich, manuell alle möglichen Einstellungen des Dateisystems zu verändern, aber auch es auf einen Schlag unbrauchbar zu machen.
* dumpe2fs
Gibt den Superblock und Block-Gruppeninformationen eines EXT2-Dateisystems auf die Standard-Ausgabe aus. So kann diese wichtige Information zwischengespeichert werden um damit ein Dateisystem manuell wiederherzustellen.
* tune2fs
Ermöglicht wichtige Einstellungen von Dateisystem-Parametern des EXT2-Dateisystems.