diff options
Diffstat (limited to 'de_DE.ISO8859-1/books/handbook/basics/chapter.sgml')
-rw-r--r-- | de_DE.ISO8859-1/books/handbook/basics/chapter.sgml | 2911 |
1 files changed, 0 insertions, 2911 deletions
diff --git a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml b/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml deleted file mode 100644 index 0ce777d31e..0000000000 --- a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml +++ /dev/null @@ -1,2911 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1" standalone="no"?> -<!-- - The FreeBSD Documentation Project - The FreeBSD German Documentation Project - - $FreeBSD$ - $FreeBSDde: de-docproj/books/handbook/basics/chapter.sgml,v 1.112 2012/02/16 20:26:02 bcr Exp $ - basiert auf: 1.159 ---> - -<chapter id="basics"> - <chapterinfo> - <authorgroup> - <author> - <firstname>Chris</firstname> - <surname>Shumway</surname> - <contrib>Umgeschrieben von </contrib> - </author> - </authorgroup> - - <authorgroup> - <author> - <firstname>Uwe</firstname> - <surname>Pierau</surname> - <contrib>Übersetzt von </contrib> - </author> - </authorgroup> - </chapterinfo> - - <title>Grundlagen des UNIX Betriebssystems</title> - - <sect1 id="basics-synopsis"> - <title>Übersicht</title> - - <para>Das folgende Kapitel umfasst die grundlegenden Kommandos - und Funktionsweisen des Betriebssystems FreeBSD. Viel von dem folgenden - Material gilt auch für jedes andere &unix;-artige System. - Falls Sie mit dem Material schon vertraut sind, können Sie dieses - Kapitel überlesen. Wenn FreeBSD neu für Sie ist, dann sollten - Sie dieses Kapitel auf jeden Fall aufmerksam lesen.</para> - - <para>Dieser Abschnitt behandelt die folgenden Themen:</para> - - <itemizedlist> - <listitem> - <para>virtuelle Konsolen,</para> - </listitem> - <listitem> - <para>Zugriffsrechte unter &unix; sowie Datei-Flags unter &os;,</para> - </listitem> - <listitem> - <para>Zugriffskontrolllisten für Dateisysteme,</para> - </listitem> - <listitem> - <para>die Verzeichnisstruktur von &os;,</para> - </listitem> - <listitem> - <para>Organisation von Dateisystemen unter &os;,</para> - </listitem> - <listitem> - <para>Ein- und Abhängen von Dateisystemen,</para> - </listitem> - <listitem> - <para>Prozesse, Dämonen und Signale,</para> - </listitem> - <listitem> - <para>Shells und die Login-Umgebung,</para> - </listitem> - <listitem> - <para>Texteditoren,</para> - </listitem> - <listitem> - <para>Geräte und Gerätedateien,</para> - </listitem> - <listitem> - <para>Binärformate unter &os; und</para> - </listitem> - <listitem> - <para>wie Sie in den Manualpages nach weiteren Informationen - suchen können.</para> - </listitem> - </itemizedlist> - </sect1> - - <sect1 id="consoles"> - <title>Virtuelle Konsolen und Terminals</title> - <indexterm><primary>virtuelle Konsole</primary></indexterm> - <indexterm><primary>Terminals</primary></indexterm> - - <para>Sie können FreeBSD mit einem Terminal benutzen, der nur Text - darstellen kann. Wenn Sie FreeBSD auf diese Weise benutzen, stehen - Ihnen alle Möglichkeiten eines &unix; Betriebssystems zur - Verfügung. Dieser Abschnitt beschreibt was Terminals und - Konsolen sind und wie sie unter FreeBSD eingesetzt werden.</para> - - <sect2 id="consoles-intro"> - <title>Die Konsole</title> - <indexterm><primary>Konsole</primary></indexterm> - - <para>Wenn Ihr FreeBSD-System ohne eine graphische - Benutzeroberfläche startet, wird am Ende des Systemstarts, - nachdem die Startskripten gelaufen sind, ein Anmeldeprompt - ausgegeben. Die letzten Startmeldungen sollten ähnlich wie - die Folgenden aussehen:</para> - - <screen>Additional ABI support:. -Local package initialization:. -Additional TCP options:. - -Fri Sep 20 13:01:06 EEST 2002 - -FreeBSD/i386 (pc3.example.org) (ttyv0) - -login:</screen> - - <para>Beachten Sie die letzten beiden Zeilen der Ausgabe, die - vorletzte lautet:</para> - - <programlisting>FreeBSD/i386 (pc3.example.org) (ttyv0)</programlisting> - - <para>Diese Zeile enthält einige Informationen über das - gerade gestartete System. Die Ausgabe stammt von der - FreeBSD-Konsole einer Maschine mit einem Intel oder - Intel-kompatiblen Prozessor der x86-Architektur<footnote> - <para>Genau das ist mit <literal>i386</literal> gemeint. Auch - wenn Ihr System keine Intel 386 CPU besitzt, wird - <literal>i386</literal> ausgegeben. Es wird immer die - Architektur und nicht der Typ des Prozessors ausgegeben.</para> - </footnote>. Der Name des Systems (jedes &unix; System besitzt - einen Namen) ist <hostid>pc3.example.org</hostid> und die Ausgabe - stammt von der Systemkonsole, dem Terminal - <devicename>ttyv0</devicename>.</para> - - <para>Das Ende der Ausgabe ist immer die Aufforderung zur Eingabe - eines Benutzernamens:</para> - - <programlisting>login:</programlisting> - - <para>Der Anmeldevorgang wird im nächsten Abschnitt - erläutert.</para> - </sect2> - - <sect2 id="consoles-login"> - <title>Der Anmeldevorgang</title> - - <para>FreeBSD ist ein Mehrbenutzersystem, das Multitasking - unterstützt. Das heißt mehrere Benutzer können - gleichzeitig viele Programme auf einem System laufen lassen.</para> - - <para>Jedes Mehrbenutzersystem muss die Benutzer voneinander - unterscheiden können. Bei FreeBSD und allen anderen - &unix;-artigen - Betriebssystemen wird dies dadurch erreicht, dass sich die - Benutzer anmelden müssen, bevor sie Programme laufen lassen - können. Jeder Benutzer besitzt einen eindeutigen Namen (den - Account) und ein dazugehörendes Passwort, die beide bei - der Anmeldung abgefragt werden.</para> - - <indexterm><primary>Startskripten</primary></indexterm> - <para>Nachdem FreeBSD gestartet ist und die Startskripten<footnote> - <para>Startskripten sind Programme, die FreeBSD automatisch bei - jedem Startvorgang ausführt. Der Zweck der Skripte - besteht darin, das System zu konfigurieren und nützliche - Dienste im Hintergrund zu starten.</para> - </footnote>, gelaufen sind, erscheint eine Aufforderung zur Eingabe - des Benutzernamens:</para> - - <screen>login:</screen> - - <para>Wenn Ihr Benutzername beispielsweise <username>john</username> - ist, geben Sie jetzt <literal>john</literal> gefolgt von - <keycap>Enter</keycap> ein. Sie sollten dann eine Aufforderung zur - Eingabe des Passworts erhalten:</para> - - <screen>login: <userinput>john</userinput> -Password:</screen> - - <para>Geben Sie jetzt das Passwort von <username>john</username> - gefolgt von <keycap>Enter</keycap> ein. Das Passwort wird aus - Sicherheitsgründen nicht auf dem Bildschirm angezeigt.</para> - - <para>Wenn Sie das richtige Passwort eingegeben haben, sind Sie - am System angemeldet und können nun alle verfügbaren - Kommandos absetzen.</para> - - <para>Anmgemeldet sind Sie, wenn Sie die Tagesmeldungen - (<foreignphrase>message of today</foreignphrase>) gefolgt - von einer Eingabeaufforderung (dem Zeichen <literal>#</literal>, - <literal>$</literal> oder <literal>%</literal>) gesehen - haben.</para> - </sect2> - - <sect2 id="consoles-virtual"> - <title>Virtuelle Konsolen</title> - - <para>Da FreeBSD mehrere Programme gleichzeitig laufen lassen kann, - ist eine einzige Konsole, an der Kommandos abgesetzt werden - können, zu wenig. Abhilfe schaffen virtuelle Konsolen, die - mehrere Konsolen zur Verfügung stellen.</para> - - <para>Die Anzahl der virtuellen Konsolen unter FreeBSD können Sie - einstellen. Zwischen den einzelnen Konsolen können Sie mit - speziellen Tastenkombinationen wechseln. Jede Konsole verfügt - über einen eigenen Ausgabekanal und FreeBSD ordnet die - Tastatureingaben und Monitorausgaben der richtigen Konsole zu, wenn - Sie zwischen den Konsolen wechseln.</para> - - <para>Zum Umschalten der Konsolen stellt FreeBSD spezielle - Tastenkombinationen bereit<footnote> - <para>Eine recht technische und genaue Beschreibung der FreeBSD-Konsole - und der Tastatur-Treiber finden Sie in den Hilfeseiten - &man.syscons.4;, &man.atkbd.4;, &man.vidcontrol.1; und - &man.kbdcontrol.1;. Lesen Sie diese Seiten, wenn Sie an den - Einzelheiten interessiert sind.</para> - </footnote>. Benutzen Sie - <keycombo><keycap>Alt</keycap><keycap>F1</keycap></keycombo>, - <keycombo><keycap>Alt</keycap><keycap>F2</keycap></keycombo> bis - <keycombo><keycap>Alt</keycap><keycap>F8</keycap></keycombo>, - um zwischen den verschiedenen Konsolen umzuschalten.</para> - - <para>Wenn Sie zu einer anderen Konsole wechseln, sichert FreeBSD den - Bildschirminhalt und gibt den Bildschirminhalt der neuen Konsole - aus. Dies erzeugt die Illusion mehrerer Bildschirme und - Tastaturen, an denen Sie Kommandos absetzen können. Wenn eine - Konsole nicht sichtbar ist, weil Sie auf eine andere Konsole - gewechselt haben, laufen die dort abgesetzten Kommandos - weiter.</para> - </sect2> - - <sect2 id="consoles-ttys"> - <title><filename>/etc/ttys</filename></title> - - <para>In der Voreinstellung stehen unter FreeBSD acht virtuelle - Konsolen zur Verfügung, deren Anzahl Sie leicht erhöhen - oder verringern können. Die Anzahl und Art der Konsolen wird - in <filename>/etc/ttys</filename> eingestellt.</para> - - <para>Jede Zeile in <filename>/etc/ttys</filename>, die nicht mit - <literal>#</literal> anfängt, konfiguriert einen Terminal oder - eine virtuelle Konsole. In der Voreinstellung werden in dieser - Datei neun virtuelle Konsolen definiert, von denen acht aktiviert - sind. Die Konsolen sind in den Zeilen, die mit - <literal>ttyv</literal> beginnen, definiert:</para> - - <programlisting># name getty type status comments -# -ttyv0 "/usr/libexec/getty Pc" cons25 on secure -# Virtual terminals -ttyv1 "/usr/libexec/getty Pc" cons25 on secure -ttyv2 "/usr/libexec/getty Pc" cons25 on secure -ttyv3 "/usr/libexec/getty Pc" cons25 on secure -ttyv4 "/usr/libexec/getty Pc" cons25 on secure -ttyv5 "/usr/libexec/getty Pc" cons25 on secure -ttyv6 "/usr/libexec/getty Pc" cons25 on secure -ttyv7 "/usr/libexec/getty Pc" cons25 on secure -ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure</programlisting> - - <para>Die Hilfeseite &man.ttys.5; enthält eine ausführliche - Beschreibung der Spalten dieser Datei und der Optionen, die Sie zum - Konfigurieren der virtuellen Konsolen benutzen können.</para> - </sect2> - - <sect2 id="consoles-singleuser"> - <title>Die Konsole im Single-User-Modus</title> - - <para>Eine eingehende Beschreibung des Single-User-Modus finden Sie - in <xref linkend="boot-singleuser"/>. Im Single-User-Modus steht - Ihnen nur <emphasis>eine</emphasis> Konsole zur Verfügung. - Die Definition dieser Konsole befindet sich ebenfalls in - <filename>/etc/ttys</filename>. Suchen Sie nach einer Zeile, die - mit <literal>console</literal> beginnt:</para> - - <programlisting># name getty type status comments -# -# If console is marked "insecure", then init will ask for the root password -# when going to single-user mode. -console none unknown off secure</programlisting> - - <note> - <para>In der Zeile, die mit <literal>console</literal> beginnt, - können Sie <literal>secure</literal> durch - <literal>insecure</literal> ersetzen. Wenn Sie danach in den - Single-User-Modus booten, verlangt das System ebenfalls die - Eingabe des <username>root</username>-Passworts.</para> - - <para><emphasis>Setzen Sie <literal>insecure</literal> nicht - leichtfertig ein.</emphasis> Wenn Sie das Passwort von - <username>root</username> vergessen, wird es schwierig, in den - Single-User-Modus zu gelangen, wenn Sie den - FreeBSD-Boot-Prozess nicht genau verstehen.</para> - </note> - </sect2> - - <sect2 id="consoles-vidcontrol"> - <title>Den Videomodus der Konsole anpassen</title> - - <para>Der Standard-Videomodus der FreeBSD-Konsole kann auf jeden - Modus eingestellt werden, der von Ihrer Grafikkarte und Ihrem - Monitor unterstützt wird (beispielsweise 1024x768 oder - 1280x1024). Wollen Sie eine andere Einstellung verwenden, - müssen Sie Ihren Kernel neu kompilieren, nachdem Sie die - zwei folgenden Zeilen in Ihre Kernelkonfigurationsdatei - aufgenommen haben:</para> - - <programlisting>OPTIONS VESA -options SC_PIXEL_MODE</programlisting> - - <para>Nachdem Sie den Kernel mit diesen zwei Optionen neu - kompiliert haben, bestimmen Sie die möglichen - Videomodi mit dem Werkzeug &man.vidcontrol.1;. Um - beispielsweise einer Liste aller unterstützten - Modi zu erhalten, verwenden Sie den folgenden Befehl:</para> - - <screen>&prompt.root; <userinput>vidcontrol -i mode</userinput></screen> - - <para>Als Ergebnis erhalten Sie eine Liste aller Videomodi, - die von Ihrer Hardware unterstützt werden. Sie wählen - einen neuen Modus aus, indem Sie den entsprechenden Wert - (wiederum als Benutzer <username>root</username>) an - &man.vidcontrol.1; übergeben:</para> - - <screen>&prompt.root; <userinput>vidcontrol MODE_279</userinput></screen> - - <para>Um diese Einstellung dauerhaft zu speichern, müssen Sie - die folgende Zeile in die Datei - <filename>/etc/rc.conf</filename> aufnehmen:</para> - - <programlisting>allscreens_flags="MODE_279"</programlisting> - </sect2> - </sect1> - - <sect1 id="permissions"> - <title>Zugriffsrechte</title> - <indexterm><primary>UNIX</primary></indexterm> - - <para>FreeBSD, das ein direkter Abkömmling von BSD &unix; ist, - stützt sich auf mehrere Grundkonzepte von &unix; Systemen. - Das erste und ausgeprägteste: FreeBSD ist - ein Mehrbenutzer-Betriebssystem. Das System ermöglicht, - dass mehrere Benutzer gleichzeitig an völlig verschiedenen - und unabhängigen Aufgaben arbeiten können. Es ist - verantwortlich für eine gerechte Auf- und Zuteilung von - Nachfragen nach Hardware- und Peripheriegeräten, Speicher - und CPU-Zeit unter den Benutzern.</para> - - <para>Da das System mehrere Benutzer unterstützt, hat alles, - was das System verwaltet, einen Satz von Rechten, die bestimmen, - wer die jeweilige Ressource lesen, schreiben oder ausführen - darf. Diese Zugriffsrechte stehen in drei Achtergruppen, die in - drei Teile unterteilt sind: einen für den Besitzer der - Datei, einen für die Gruppe, zu der die Datei gehört - und einen für alle anderen. Die numerische Darstellung - sieht wie folgt aus:</para> - - <indexterm><primary>Zugriffsrechte</primary></indexterm> - <indexterm> - <primary>Dateizugriffsrechte</primary> - </indexterm> - <informaltable frame="none" pgwide="1"> - <tgroup cols="3"> - <thead> - <row> - <entry>Wert</entry> - <entry>Zugriffsrechte</entry> - <entry>Auflistung im Verzeichnis</entry> - </row> - </thead> - - <tbody> - <row> - <entry>0</entry> - <entry>Kein Lesen, Kein Schreiben, Kein Ausführen</entry> - <entry><literal>---</literal></entry> - </row> - - <row> - <entry>1</entry> - <entry>Kein Lesen, Kein Schreiben, Ausführen</entry> - <entry><literal>--x</literal></entry> - </row> - - <row> - <entry>2</entry> - <entry>Kein Lesen, Schreiben, Kein Ausführen</entry> - <entry><literal>-w-</literal></entry> - </row> - - <row> - <entry>3</entry> - <entry>Kein Lesen, Schreiben, Ausführen</entry> - <entry><literal>-wx</literal></entry> - </row> - - <row> - <entry>4</entry> - <entry>Lesen, Kein Schreiben, Kein Ausführen</entry> - <entry><literal>r--</literal></entry> - </row> - - <row> - <entry>5</entry> - <entry>Lesen, Kein Schreiben, Ausführen</entry> - <entry><literal>r-x</literal></entry> - </row> - - <row> - <entry>6</entry> - <entry>Lesen, Schreiben, Kein Ausführen</entry> - <entry><literal>rw-</literal></entry> - </row> - - <row> - <entry>7</entry> - <entry>Lesen, Schreiben, Ausführen</entry> - <entry><literal>rwx</literal></entry> - </row> - </tbody> - </tgroup> - </informaltable> - <indexterm> - <primary><command>ls</command></primary> - </indexterm> - <indexterm><primary>Verzeichnisse</primary></indexterm> - - <para>Sie können <option>-l</option> auf der Kommandozeile - von &man.ls.1; angeben, um eine ausführliche Verzeichnisauflistung - zu sehen, die in einer Spalte die Zugriffsrechte für den - Besitzer, die Gruppe und alle anderen enthält. - Die Ausgabe von <command>ls -l</command> könnte - wie folgt aussehen:</para> - - <screen>&prompt.user; <userinput>ls -l</userinput> -total 530 --rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile --rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile --rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt -...</screen> - - <para>Die erste Spalte der Ausgabe enthält die - Zugriffsrechte:</para> - - <screen>-rw-r--r--</screen> - - <para>Das erste Zeichen von links ist ein Symbol, welches angibt, - ob es sich um eine normale Datei, ein Verzeichnis, ein - zeichenorientiertes Gerät, ein Socket oder irgendeine andere - Pseudo-Datei handelt. In diesem Beispiel zeigt <literal>-</literal> eine - normale Datei an. Die nächsten drei Zeichen, - dargestellt als <literal>rw-</literal>, ergeben die Rechte - für den Datei-Besitzer. Die drei Zeichen danach - <literal>r--</literal> die Rechte der Gruppe, zu der die Datei - gehört. Die letzten drei Zeichen, <literal>r--</literal>, - geben die Rechte für den Rest der Welt an. Ein Minus - bedeutet, dass das Recht nicht gegeben ist. In diesem Fall - sind die Zugriffsrechte also: der Eigentümer kann die Datei - lesen und schreiben, die Gruppe kann lesen und alle anderen - können auch nur lesen. Entsprechend obiger Tabelle - wären die Zugriffsrechte für diese Datei - <literal>644</literal>, worin jede Ziffer die drei Teile der - Zugriffsrechte dieser Datei verkörpert.</para> - - <para>Das ist alles schön und gut, aber wie kontrolliert das - System die Rechte von Hardware-Geräten? FreeBSD behandelt - die meisten Hardware-Geräte als Dateien, welche Programme - öffnen, lesen und mit Daten beschreiben können wie - alle anderen Dateien auch. Diese Spezial-Dateien sind im - Verzeichnis <filename>/dev</filename> gespeichert.</para> - - <para>Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie - haben Lese-, Schreib- und Ausführ-Rechte. Das - Ausführungs-Bit hat eine etwas andere Bedeutung für - ein Verzeichnis als für eine Datei. Die Ausführbarkeit - eines Verzeichnisses bedeutet, dass in das Verzeichnis - zum Beispiel mit <command>cd</command> gewechselt werden kann. - Das bedeutet auch, dass in dem Verzeichnis auf Dateien, deren - Namen bekannt sind, zugegriffen werden kann, vorausgesetzt die - Zugriffsrechte der Dateien lassen dies zu.</para> - - <para>Das Leserecht auf einem Verzeichnis erlaubt es, sich den Inhalt - des Verzeichnisses anzeigen zu lassen. Um eine Datei mit bekanntem - Namen in einem Verzeichnis zu löschen, müssen auf dem - Verzeichnis Schreib- <emphasis>und</emphasis> Ausführ-Rechte - gesetzt sein.</para> - - <para>Es gibt noch mehr Rechte, aber die werden vor allem in - speziellen Umständen benutzt, wie zum Beispiel bei - SetUID-Binaries und Verzeichnissen mit gesetztem Sticky-Bit. - Mehr über Zugriffsrechte von Dateien und wie sie gesetzt werden, - finden Sie in &man.chmod.1;.</para> - - <sect2> - <sect2info> - <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>Beigesteuert von </contrib> - </author> - </authorgroup> - </sect2info> - - <title>Symbolische Zugriffsrechte</title> - <indexterm> - <primary>Zugriffsrechte</primary> - <secondary>symbolische</secondary> - </indexterm> - - <para>Die Zugriffsrechte lassen sich auch über Symbole - anstelle von oktalen Werten festlegen. Symbolische - Zugriffsrechte werden in der Reihenfolge - <replaceable>Wer</replaceable>, <replaceable>Aktion</replaceable> - und <replaceable>Berechtigung</replaceable> angegeben. - Die folgenden Symbole stehen zur Auswahl:</para> - - <informaltable frame="none" pgwide="1"> - <tgroup cols="3"> - <thead> - <row> - <entry>Option</entry> - <entry>Symbol</entry> - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><replaceable>Wer</replaceable></entry> - <entry>u</entry> - <entry>Benutzer (<foreignphrase>user</foreignphrase>)</entry> - </row> - - <row> - <entry><replaceable>Wer</replaceable></entry> - <entry>g</entry> - <entry>Gruppe (<foreignphrase>group</foreignphrase>)</entry> - </row> - - <row> - <entry><replaceable>Wer</replaceable></entry> - <entry>o</entry> - <entry>Andere (<foreignphrase>other</foreignphrase>)</entry> - </row> - - <row> - <entry><replaceable>Wer</replaceable></entry> - <entry>a</entry> - <entry>Alle</entry> - </row> - - <row> - <entry><replaceable>Aktion</replaceable></entry> - <entry>+</entry> - <entry>Berechtigungen hinzufügen</entry> - </row> - - <row> - <entry><replaceable>Aktion</replaceable></entry> - <entry>-</entry> - <entry>Berechtigungen entziehen</entry> - </row> - - <row> - <entry><replaceable>Aktion</replaceable></entry> - <entry>=</entry> - <entry>Berechtigungen explizit setzen</entry> - </row> - - <row> - <entry><replaceable>Berechtigung</replaceable></entry> - <entry>r</entry> - <entry>lesen (<foreignphrase>read</foreignphrase>)</entry> - </row> - - <row> - <entry><replaceable>Berechtigung</replaceable></entry> - <entry>w</entry> - <entry>schreiben (<foreignphrase>write</foreignphrase>)</entry> - </row> - - <row> - <entry><replaceable>Berechtigung</replaceable></entry> - <entry>x</entry> - <entry>ausführen - (<foreignphrase>execute</foreignphrase>)</entry> - </row> - - <row> - <entry><replaceable>Berechtigung</replaceable></entry> - <entry>t</entry> - <entry>Sticky-Bit</entry> - </row> - - <row> - <entry><replaceable>Berechtigung</replaceable></entry> - <entry>s</entry> - <entry>Set-UID oder Set-GID</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para>Symbolische Zugriffsrechte werden wie die numerischen - mit dem Kommando &man.chmod.1; vergeben. Wenn - Sie beispielsweise allen anderen Benutzern den Zugriff auf - die Datei <replaceable>FILE</replaceable> verbieten wollen, - benutzen Sie den nachstehenden Befehl:</para> - - <screen>&prompt.user; <userinput>chmod go= FILE</userinput></screen> - - <para>Wenn Sie mehr als eine Änderung der Rechte einer - Datei vornehmen wollen, können Sie eine durch Kommata - getrennte Liste der Rechte angeben. Das folgende Beispiel - entzieht der Gruppe und der Welt (den anderen) die - Schreibberechtigung auf die Datei <replaceable>FILE</replaceable> - und fügt dann für alle Ausführungsrechte - hinzu:</para> - - <screen>&prompt.user; <userinput>chmod go-w,a+x <replaceable>FILE</replaceable></userinput></screen> - -<!-- - <para>Mit symbolischen Zugriffsrechten können Sie Rechte - hinzufügen oder Rechte wegnehmen. Numerische Zugriffsrechte - erlauben nur das explizite Setzen der Zugriffsrechte.</para> ---> - </sect2> - - <sect2> - <sect2info> - <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>Beigetragen von </contrib> - </author> - </authorgroup> - </sect2info> - - <title>&os; Datei-Flags</title> - - <para>Zusätzlich zu den vorhin diskutierten Zugriffsrechten - unterstützt &os; auch die sogenannten - <quote>Datei-Flags</quote>. Diese erhöhen die Sicherheit - Ihres Systems, indem sie eine verbesserte Kontrolle von - Dateien erlauben. Verzeichnisse werden allerdings nicht - unterstützt.</para> - - <para>Diese verbesserte Sicherheit führt dazu, dass manche - Dateien nicht einmal von <username>root</username> gelöscht - oder bearbeitet werden können.</para> - - <para>Datei-Flags können über &man.chflags.1; gesetzt - oder gelöscht werden. Um beispielsweise die Datei - <filename>file1</filename> mit dem - <quote>unlöschbar</quote>-Flag zu sichern, geben Sie - folgenden Befehl ein:</para> - - <screen>&prompt.root; <userinput>chflags sunlink <filename>file1</filename></userinput></screen> - - <para>Um dieses Flag wieder zu löschen, geben Sie den - Befehl erneut ein. Allerdings setzen Sie ein - <quote>no</quote> vor <option>sunlink</option>:</para> - - <screen>&prompt.root; <userinput>chflags nosunlink <filename>file1</filename></userinput></screen> - - <para>Um die Flags dieser Datei anzuzeigen, verwenden Sie - &man.ls.1; zusammen mit der Option <option>-lo</option>:</para> - - <screen>&prompt.root; <userinput>ls -lo <filename>file1</filename></userinput></screen> - - <para>Dadurch erhalten Sie eine Ausgabe ähnlich der - folgenden:</para> - - <programlisting>-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1</programlisting> - - <para>Viele Flags können nur von <username>root</username> - gesetzt oder gelöscht werden. Andere wiederum können - auch vom Eigentümer der Datei gesetzt werden. Weitere - Informationen zu Datei-Flags finden sich in den Manualpages - &man.chflags.1; und &man.chflags.2;.</para> - </sect2> - - <sect2> - <sect2info> - <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>Beigetragen von </contrib> - </author> - </authorgroup> - </sect2info> - - <title>Die Berechtigungen setuid, setgid, und sticky</title> - - <para>Anders als die Berechtigungen, die bereits angesprochen wurden, - existieren drei weitere Einstellungen, über die alle - Administratoren Bescheid wissen sollten. Dies sind die Berechtigungen - <literal>setuid</literal>, <literal>setgid</literal> und - <literal>sticky</literal>.</para> - - <para>Diese Einstellungen sind wichtig für manche &unix;-Operationen, - da sie Funktionalitäten zur Verfügung stellen, die - normalerweise nicht an gewöhnliche Anwender vergeben wird. - Um diese zu verstehen, muss der Unterschied zwischen der realen - und der effektiven Benutzer-ID erwähnt werden.</para> - - <para>Die reale Benutzer-ID ist die <acronym>UID</acronym>, welche den - Prozess besitzt oder gestartet hat. Die effektive - <acronym>UID</acronym> ist diejenige, als die der Prozess läuft. - Beispielsweise wird &man.passwd.1; mit der realen ID des Benutzers - ausgeführt, der sein Passwort ändert. Um jedoch die - Passwortdatenbank zu bearbeiten, wird es effektiv als - <username>root</username>-Benutzer ausgeführt. Das - ermöglicht es normalen Benutzern, ihr Passwort zu ändern, ohne - einen <errorname>Permission Denied</errorname>-Fehler angezeigt zu - bekommen.</para> - - <note> - <para>Die <literal>nosuid</literal> &man.mount.8;-Option wird dafür - sorgen, dass diese Anwendungen stillschweigend scheitern. Genauer - gesagt, sie werden nicht ausgeführt und der Anwender wird - darüber auch nicht informiert. Auf diese Option kann man sich - nicht vollständig verlassen, da ein - <literal>nosuid</literal>-Wrapper in der Lage wäre, dies zu - umgehen, wie in der &man.mount.8; Manualpage zu lesen ist.</para> - </note> - - <para>Die setuid-Berechtigung kann durch das Voranstellen bei einer - Berechtigungsgruppe mit der Nummer Vier (4) gesetzt werden, wie im - folgenden Beispiel gezeigt wird:</para> - - <screen>&prompt.root; <userinput>chmod 4755 suidexample.sh</userinput></screen> - - <para>Die Berechtigungen auf der - <filename><replaceable>suidexample.sh</replaceable></filename>-Datei - sollten jetzt wie folgt aussehen:</para> - - <programlisting>-rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.sh</programlisting> - - <para>In dem Beispiel sollte auffallen, dass ein <literal>s</literal> - jetzt Teil der Berechtigungen des Dateibesitzers geworden ist, welches - das Ausführen-Bit ersetzt. Dies ermöglicht es Werkzeugen - mit erhöhten Berechtigungen zu laufen, wie z.B. - <command>passwd</command>.</para> - - <para>Um dies in Echtzeit zu beobachten, öffnen Sie zwei Terminals. - Starten Sie auf einem den <command>passwd</command>-Prozess als normaler - Benutzer. Während es auf die Passworteingabe wartet, - überprüfen Sie die Prozesstabelle und sehen Sie sich die - Informationen des <command>passwd</command>-Kommandos an.</para> - - <para>Im Terminal A:</para> - - <screen>Changing local password for trhodes -Old Password:</screen> - - <para>Im Terminal B:</para> - - <screen>&prompt.root; <userinput>ps aux | grep passwd</userinput></screen> - - <screen>trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd - root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd</screen> - - <para>Wie oben erwähnt, wird <command>passwd</command> von einem - normalen Benutzer ausgeführt, benutzt aber die effektive - <acronym>UID</acronym> von <username>root</username>.</para> - - <para>Die <literal>setgid</literal>-Berechtigung führt die gleiche - Aktion wie die <literal>setuid</literal>-Berechtigung durch, allerdings - verändert sie die Gruppenberechtigungen. Wenn eine Anwendung - oder ein Werkzeug mit dieser Berechtigung ausgeführt wird, - erhält es die Berechtigungen basierend auf der Gruppe, welche die - Datei besitzt und nicht die des Benutzers, der den Prozess gestartet - hat.</para> - - <para>Um die <literal>setgid</literal>-Berechtigung auf einer Datei zu - setzen, geben Sie dem <command>chmod</command>-Befehl eine - führende Zwei (2) mit, wie im folgenden gezeigt:</para> - - <screen>&prompt.root; <userinput>chmod 2755 sgidexample.sh</userinput></screen> - - <para>Die neue Einstellung kann wie zuvor betrachtet werden. Beachten Sie, - dass das <literal>s</literal> sich jetzt in dem Feld befindet, das - für die Berechtigungen der Gruppe bestimmt ist:</para> - - <screen>-rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.sh</screen> - - <note> - <para>Obwohl es sich bei dem in diesen Beispielen gezeigten Shellskript - um eine ausführbare Datei handelt, wird es nicht mit einer - anderen <acronym>EUID</acronym> oder effektiven Benutzer-ID - ausgeführt. Das ist so, weil Shellskripte keinen Zugriff auf - &man.setuid.2;-Systemaufrufe erhalten.</para> - </note> - - <para>Diese beiden ersten angesprochenen Spezialberechtigungen (die - <literal>setuid</literal> und <literal>setgid</literal> - Berechtigungs-Bits) können die Systemsicherheit verringern, da - sie erhöhte Rechte ermöglichen. Es gibt noch ein drittes - Berechtigungs-Bit, das die Sicherheit eines Systems erhöhen kann: - das <literal>sticky bit</literal>.</para> - - <para>Das <literal>sticky bit</literal> erlaubt, wenn es auf ein - Verzeichnis angewendet wird, nur dem Besitzer der Datei diese Dateien - auch zu löschen. Dieses Recht ist nützlich, um die - Löschung von Dateien in öffentlichen Verzeichnissen durch - Benutzer, denen diese Dateien nicht gehören, zu verhindern, wie - z.B. in <filename - class="directory">/tmp</filename>. Um diese Berechtigung anzuwenden, - stellen Sie der Berechtigung eine Eins (1) voran, beispielsweise - so:</para> - - <screen>&prompt.root; <userinput>chmod 1777 /tmp</userinput></screen> - - <para>Den Effekt können Sie sich ansehen, indem Sie - das Kommando <command>ls</command> ausführen:</para> - - <screen>&prompt.root; <userinput>ls -al / | grep tmp</userinput></screen> - - <screen>drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp</screen> - - <para>Das <literal>sticky bit</literal> kann anhand des - <literal>t</literal> ganz am Ende der Berechtigungen abgelesen - werden.</para> - </sect2> - </sect1> - - <sect1 id="dirstructure"> - <title>Verzeichnis-Strukturen</title> - <indexterm><primary>Verzeichnis Hierarchien</primary></indexterm> - - <para>Die FreeBSD-Verzeichnishierarchie ist die Grundlage, um - ein umfassendes Verständnis des Systems zu erlangen. - Das wichtigste Konzept, das Sie verstehen sollten, ist das - Root-Verzeichnis <quote>/</quote>. Dieses Verzeichnis ist das - erste, das während des Bootens eingehangen wird. Es - enthält das notwendige Basissystem, um das System in den - Mehrbenutzerbetrieb zu bringen. Das Root-Verzeichnis enthält - auch die Mountpunkte für Dateisysteme, die beim Wechsel in - den Multiuser-Modus eingehängt werden.</para> - - <para>Ein Mountpunkt ist ein Verzeichnis, in das zusätzliche - Dateisysteme (in der Regel unterhalb des Wurzelverzeichnisses) - eingehängt werden können. Dieser Vorgang wird in - <xref linkend="disk-organization"/> ausführlich beschrieben. - Standard-Mountpunkte sind <filename>/usr</filename>, - <filename>/var</filename>, <filename>/tmp</filename>, - <filename>/mnt</filename> sowie <filename>/cdrom</filename>. - Auf diese Verzeichnisse verweisen üblicherweise Einträge - in der Datei <filename>/etc/fstab</filename>. - <filename>/etc/fstab</filename> ist - eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten - als Referenz des Systems. Die meisten der Dateisysteme in - <filename>/etc/fstab</filename> werden beim Booten automatisch - durch das Skript &man.rc.8; gemountet, wenn die zugehörigen - Einträge nicht mit der Option <option>noauto</option> - versehen sind. Weitere Informationen zu diesem Thema finden Sie - im <xref linkend="disks-fstab"/>.</para> - - <para>Eine vollständige Beschreibung der Dateisystem-Hierarchie - finden Sie in &man.hier.7;. Als Beispiel sei eine kurze - Übersicht über die am häufigsten verwendeten - Verzeichnisse gegeben:</para> - - <para> - <informaltable frame="none" pgwide="1"> - <tgroup cols="2"> - <thead> - <row> - <entry>Verzeichnis</entry> - <entry>Beschreibung</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry><filename class="directory">/</filename></entry> - <entry>Wurzelverzeichnis des Dateisystems.</entry> - </row> - - <row> - <entry><filename class="directory">/bin/</filename></entry> - <entry>Grundlegende Werkzeuge für den Single-User-Modus - sowie den Mehrbenutzerbetrieb.</entry> - </row> - - <row> - <entry><filename class="directory">/boot/</filename></entry> - <entry>Programme und Konfigurationsdateien, die während - des Bootens benutzt werden.</entry> - </row> - - <row> - <entry><filename class="directory">/boot/defaults/</filename></entry> - <entry>Vorgaben für die Boot-Konfiguration, siehe - &man.loader.conf.5;.</entry> - </row> - - <row> - <entry><filename class="directory">/dev/</filename></entry> - <entry>Gerätedateien, siehe &man.intro.4;.</entry> - </row> - - <row> - <entry><filename class="directory">/etc/</filename></entry> - <entry>Konfigurationsdateien und Skripten des Systems.</entry> - </row> - - <row> - <entry><filename class="directory">/etc/defaults/</filename></entry> - <entry>Vorgaben für die System Konfigurationsdateien, - siehe &man.rc.8;.</entry> - </row> - - <row> - <entry><filename class="directory">/etc/mail/</filename></entry> - <entry>Konfigurationsdateien von MTAs wie - &man.sendmail.8;.</entry> - </row> - - <row> - <entry><filename class="directory">/etc/namedb/</filename></entry> - <entry>Konfigurationsdateien von <command>named</command>, - siehe &man.named.8;.</entry> - </row> - - <row> - <entry><filename class="directory">/etc/periodic/</filename></entry> - <entry>Täglich, wöchentlich oder monatlich - ablaufende Skripte, die von &man.cron.8; gestartet werden. - Siehe &man.periodic.8;.</entry> - </row> - - <row> - <entry><filename class="directory">/etc/ppp/</filename></entry> - <entry>Konfigurationsdateien von <command>ppp</command>, - siehe &man.ppp.8;.</entry> - </row> - - <row> - <entry><filename class="directory">/mnt/</filename></entry> - <entry>Ein leeres Verzeichnis, das von Systemadministratoren - häufig als temporärer Mountpunkt genutzt wird.</entry> - </row> - - <row> - <entry><filename class="directory">/proc/</filename></entry> - <entry>Prozess Dateisystem, siehe &man.procfs.5; - und &man.mount.procfs.8;.</entry> - </row> - - <row> - <entry><filename class="directory">/rescue/</filename></entry> - <entry>Statisch gelinkte Programme zur Wiederherstellung - des Systems, lesen Sie dazu auch &man.rescue.8;.</entry> - </row> - - <row> - <entry><filename class="directory">/root/</filename></entry> - <entry>Home Verzeichnis von <username>root</username>.</entry> - </row> - - <row> - <entry><filename class="directory">/sbin/</filename></entry> - <entry>Systemprogramme und administrative Werkzeuge, die - grundlegend für den Single-User-Modus und den - Mehrbenutzerbetrieb sind.</entry> - </row> - - <row> - <entry><filename class="directory">/tmp/</filename></entry> - <entry>Temporäre Dateien, die für gewöhnlich - bei einem Neustart des Systems verloren gehen. - Häufig wird ein speicherbasiertes Dateisystem unter - <filename class="directory">/tmp</filename> - eingehängt. Dieser Vorgang kann automatisiert werden, - wenn Sie die tmpmfs-bezogenen Variablen von - &man.rc.conf.5; verwenden. Alternativ können Sie - auch einen entsprechenden Eintrag in - <filename>/etc/fstab</filename> aufnehmen. Weitere - Informationen finden Sie in &man.mdmfs.8;.</entry> - </row> - - <row> - <entry><filename class="directory">/usr/</filename></entry> - <entry>Der Großteil der Benutzerprogramme und - Anwendungen.</entry> - </row> - - <row> - <entry><filename class="directory">/usr/bin/</filename></entry> - <entry>Gebräuchliche Werkzeuge, Programmierhilfen und - Anwendungen.</entry> - </row> - - <row> - <entry><filename class="directory">/usr/include/</filename></entry> - <entry>Standard C include-Dateien.</entry> - </row> - - <row> - <entry><filename class="directory">/usr/lib/</filename></entry> - <entry>Bibliotheken.</entry> - </row> - - - <row> - <entry><filename class="directory">/usr/libdata/</filename></entry> - <entry>Daten verschiedener Werkzeuge.</entry> - </row> - - <row> - <entry><filename class="directory">/usr/libexec/</filename></entry> - <entry>System-Dämonen und System-Werkzeuge, die von - anderen Programmen ausgeführt werden.</entry> - </row> - - <row> - <entry><filename - class="directory">/usr/local/</filename></entry> - - <entry>Lokale Programme, Bibliotheken usw. Die Ports-Sammlung - benutzt dieses Verzeichnis als Zielverzeichnis für zu - installierende Anwendungen. Innerhalb von - <filename>/usr/local</filename> sollte das von - &man.hier.7; beschriebene Layout für - <filename>/usr</filename> benutzt werden. Das - <filename>man</filename> Verzeichnis wird direkt unter - <filename>/usr/local</filename> anstelle unter - <filename>/usr/local/share</filename> angelegt. Die - Dokumentation der Ports findet sich in - <filename>share/doc/<replaceable>port</replaceable></filename>. - </entry> - </row> - - <row> - <entry><filename class="directory">/usr/obj/</filename></entry> - <entry>Von der Architektur abhängiger Verzeichnisbaum, - der durch das Bauen von <filename>/usr/src</filename> - entsteht.</entry> - </row> - - <row> - <entry><filename class="directory">/usr/ports/</filename></entry> - <entry>Die FreeBSD-Ports-Sammlung (optional).</entry> - </row> - - <row> - <entry><filename class="directory">/usr/sbin/</filename></entry> - <entry>System-Dämonen und System-Werkzeuge, die von - Benutzern ausgeführt werden.</entry> - </row> - - <row> - <entry><filename class="directory">/usr/share/</filename></entry> - <entry>Von der Architektur unabhängige Dateien.</entry> - </row> - - <row> - <entry><filename class="directory">/usr/src/</filename></entry> - <entry>Quelldateien von BSD und/oder lokalen - Ergänzungen.</entry> - </row> - - <row> - <entry><filename - class="directory">/usr/X11R6/</filename></entry> - <entry>Optionale X11R6-Programme und Bibliotheken.</entry> - </row> - - <row> - <entry><filename class="directory">/var/</filename></entry> - <entry>Wird für mehrere Zwecke genutzt und enthält - Logdateien, temporäre Daten und Spooldateien. - Manchmal wird ein speicherbasiertes Dateisystem unter - <filename class="directory">/var</filename> - eingehängt. Dieser Vorgang kann automatisiert werden, - wenn Sie die varmfs-bezogenen Variablen von - &man.rc.conf.5; verwenden. Alternativ können Sie - auch einen entsprechenden Eintrag in - <filename>/etc/fstab</filename> aufnehmen. Weitere - Informationen finden Sie in &man.mdmfs.8;.</entry> - </row> - - <row> - <entry><filename class="directory">/var/log/</filename></entry> - <entry>Verschiedene Logdateien des Systems.</entry> - </row> - - <row> - <entry><filename class="directory">/var/mail/</filename></entry> - <entry>Postfächer der Benutzer.</entry> - </row> - - <row> - <entry><filename class="directory">/var/spool/</filename></entry> - <entry>Verschiedene Spool-Verzeichnisse der Drucker- und - Mailsysteme.</entry> - </row> - - <row> - <entry><filename class="directory">/var/tmp/</filename></entry> - <entry>Temporäre Dateien. Dateien in diesem - Verzeichnis bleiben in der Regel auch bei einem Neustart - des Systems erhalten, es sei denn, bei - <filename class="directory">/var</filename> handelt es - sich um ein speicherbasiertes Dateisystem.</entry> - </row> - - <row> - <entry><filename class="directory">/var/yp/</filename></entry> - <entry>NIS maps.</entry> - </row> - - </tbody> - </tgroup> - </informaltable> - </para> - </sect1> - - <sect1 id="disk-organization"> - <title>Festplatten, Slices und Partitionen</title> - - <para>&os; identifiziert Dateien anhand eines Dateinamens. - In Dateinamen wird zwischen Groß- und Kleinschreibung - unterschieden: <filename>readme.txt</filename> und - <filename>README.TXT</filename> bezeichnen daher zwei - verschiedene Dateien. &os; benutzt keine Dateiendungen wie - <filename>.txt</filename>, um den Typ der Datei - (ein Programm, ein Dokument oder andere Daten) zu - bestimmen.</para> - - <para>Dateien werden in Verzeichnissen gespeichert. In einem - Verzeichnis können sich keine oder hunderte Dateien - befinden. Ein Verzeichnis kann auch andere Verzeichnisse - enthalten und so eine Hierarchie von Verzeichnissen aufbauen, - die Ihnen die Ablage von Daten erleichtert.</para> - - <para>In Dateinamen werden Verzeichnisse durch einen - Schrägstrich (<literal>/</literal>, - <foreignphrase>Slash</foreignphrase>) getrennt. Wenn - das Verzeichnis <filename class="directory">foo</filename> - ein Verzeichnis <filename class="directory">bar</filename> - enthält, in dem sich die Datei <filename>readme.txt</filename> - befindet, lautet der vollständige Name der Datei - (oder der <firstterm>Pfad</firstterm> zur Datei) - <filename>foo/bar/readme.txt</filename>.</para> - - <para>Verzeichnisse und Dateien werden in einem Dateisystem - gespeichert. Jedes Dateisystem besitzt ein - <firstterm>Wurzelverzeichnis</firstterm> - (<foreignphrase>Root-Directory</foreignphrase>), - das weitere Verzeichnisse enthalten kann.</para> - - <para>Dieses Konzept kennen Sie vielleicht von anderen - Betriebssystemen, aber es gibt einige Unterschiede: - In &ms-dos; werden Datei- und Verzeichnisnamen mit dem - Zeichen <literal>\</literal> getrennt, &macos; benutzt - dazu das Zeichen <literal>:</literal>.</para> - - <para>&os; kennt keine Laufwerksbuchstaben und in Pfaden - werden keine Bezeichnungen für Laufwerke benutzt. - Die Pfadangabe <filename>c:/foo/bar/readme.txt</filename> - gibt es in &os; nicht.</para> - - <para>Stattdessen wird ein Dateisystem als Wurzeldateisystem - (<foreignphrase>root file system</foreignphrase>) - ausgewählt. Das Wurzelverzeichnis dieses Dateisystems - wird <filename class="directory">/</filename> genannt. - Jedes andere Dateisystem wird unter dem Wurzeldateisystem - <firstterm>eingehangen</firstterm> - (<foreignphrase>mount</foreignphrase>). Daher scheint - jedes Verzeichnis, unabhängig von der Anzahl der - Platten, auf derselben Platte zu liegen.</para> - - <para>Betrachten wir drei Dateisysteme <literal>A</literal>, - <literal>B</literal> und <literal>C</literal>. Jedes - Dateisystem besitzt ein eigenes Wurzelverzeichnis, das - zwei andere Verzeichnisse enthält: - <filename class="directory">A1</filename>, - <filename class="directory">A2</filename>, - <filename class="directory">B1</filename>, - <filename class="directory">B2</filename>, - <filename class="directory">C1</filename> und - <filename class="directory">C2</filename>.</para> - - <para>Das Wurzeldateisystem soll <literal>A</literal> sein. - Das Kommando <command>ls</command> zeigt darin - die beiden Verzeichnisse <filename class="directory">A1</filename> - und <filename class="directory">A2</filename> an. - Der Verzeichnisbaum sieht wie folgt aus:</para> - - <mediaobject> - <imageobject> - <imagedata fileref="install/example-dir1" format="EPS"/> - </imageobject> - - <textobject> - <literallayout class="monospaced"> / - | - +--- A1 - | - `--- A2</literallayout> - </textobject> - </mediaobject> - - <para>Ein Dateisystem wird in einem Verzeichnis eines anderen - Dateisystems eingehangen. Wir hängen nun das Dateisystem - <literal>B</literal> in das Verzeichnis - <filename class="directory">A1</filename> ein. Das - Wurzelverzeichnis von <literal>B</literal> ersetzt nun - das Verzeichnis <filename class="directory">A1</filename> und - die Verzeichnisse des Dateisystems <literal>B</literal> - werden sichtbar:</para> - - <mediaobject> - <imageobject> - <imagedata fileref="install/example-dir2" format="EPS"/> - </imageobject> - - <textobject> - <literallayout class="monospaced"> / - | - +--- A1 - | | - | +--- B1 - | | - | `--- B2 - | - `--- A2</literallayout> - </textobject> - </mediaobject> - - <para>Jede Datei in den Verzeichnissen - <filename class="directory">B1</filename> oder - <filename class="directory">B2</filename> kann - über den Pfad <filename class="directory">/A1/B1</filename> - oder <filename class="directory">/A1/B2</filename> - erreicht werden. Dateien aus dem Verzeichnis - <filename class="directory">/A1</filename> sind jetzt - verborgen. Wenn das Dateisystem <literal>B</literal> - wieder <firstterm>abgehangen</firstterm> wird - (<foreignphrase>umount</foreignphrase>), erscheinen - die verborgenen Dateien wieder.</para> - - <para>Wenn das Dateisystem <literal>B</literal> unter dem - Verzeichnis <filename class="directory">A2</filename> - eingehangen würde, sähe der Verzeichnisbaum - so aus:</para> - - <mediaobject> - <imageobject> - <imagedata fileref="install/example-dir3" format="EPS"/> - </imageobject> - - <textobject> - <literallayout class="monospaced"> / - | - +--- A1 - | - `--- A2 - | - +--- B1 - | - `--- B2</literallayout> - </textobject> - </mediaobject> - - <para>Die Dateien des Dateisystems <literal>B</literal> wären - unter den Pfaden <filename class="directory">/A2/B1</filename> und - <filename class="directory">/A2/B2</filename> erreichbar.</para> - - <para>Dateisysteme können übereinander eingehangen - werden. Der folgende Baum entsteht, wenn im letzten - Beispiel das Dateisystem <literal>C</literal> in das Verzeichnis - <filename class="directory">B1</filename> des Dateisystems - <literal>B</literal> eingehangen wird:</para> - - <mediaobject> - <imageobject> - <imagedata fileref="install/example-dir4" format="EPS"/> - </imageobject> - - <textobject> - <literallayout class="monospaced"> / - | - +--- A1 - | - `--- A2 - | - +--- B1 - | | - | +--- C1 - | | - | `--- C2 - | - `--- B2</literallayout> - </textobject> - </mediaobject> - - <para><literal>C</literal> könnte auch im Verzeichnis - <filename class="directory">A1</filename> eingehangen - werden:</para> - - <mediaobject> - <imageobject> - <imagedata fileref="install/example-dir5" format="EPS"/> - </imageobject> - - <textobject> - <literallayout class="monospaced"> / - | - +--- A1 - | | - | +--- C1 - | | - | `--- C2 - | - `--- A2 - | - +--- B1 - | - `--- B2</literallayout> - </textobject> - </mediaobject> - - <para>Der &ms-dos;-Befehl <command>join</command> kann Ähnliches - bewirken.</para> - - <para>Normalerweise müssen Sie sich nicht mit Dateisystemen - beschäftigen. Während der Installation werden - die Dateisysteme und die Stellen, in der sie eingehangen werden, - festgelegt. Dateisysteme müssen Sie erst wieder anlegen, - wenn Sie eine neue Platte hinzufügen.</para> - - <para>Sie können sogar mit nur einem großen - Dateisystem auskommen. Dies hat mehrere Nachteile - und einen Vorteil.</para> - - <itemizedlist> - <title>Vorteile mehrerer Dateisysteme</title> - - <listitem> - <para>Die Dateisysteme können mit unterschiedlichen - Optionen (<foreignphrase>mount options</foreignphrase>) - eingehangen werden. Bei sorgfältiger Planung können - Sie beispielsweise das Wurzeldateisystem nur lesbar - einhängen. Damit schützen Sie sich vor dem - unabsichtlichen Löschen oder Editieren kritischer - Dateien. Von Benutzern beschreibbare Dateisysteme - wie <filename class="directory">/home</filename> - können Sie mit der Option <firstterm>nosuid</firstterm> - einhängen, wenn sie von anderen Dateisystemen getrennt - sind. Die <firstterm>SUID</firstterm>- und - <firstterm>GUID</firstterm>-Bits verlieren auf solchen - Dateisystemen ihre Wirkung und die Sicherheit des - Systems kann dadurch erhöht werden.</para> - </listitem> - - <listitem> - <para>Die Lage von Dateien im Dateisystem wird, abhängig - vom Gebrauch des Dateisystems, automatisch von &os; - optimiert. Ein Dateisystem mit vielen kleinen Dateien, - die häufig geschrieben werden, wird anders behandelt - als ein Dateisystem mit wenigen großen Dateien. - Mit nur einem Dateisystem ist diese Optimierung - unmöglich.</para> - </listitem> - - <listitem> - <para>In der Regel übersteht ein &os;-Dateisystem auch - einen Stromausfall. Allerdings kann ein Stromausfall zu - einem kritischen Zeitpunkt das Dateisystem beschädigen. - Wenn die Daten über mehrere Dateisysteme verteilt - sind, lässt sich das System mit hoher - Wahrscheinlichkeit noch starten. Dies erleichtert - das Zurückspielen von Datensicherungen.</para> - </listitem> - </itemizedlist> - - <itemizedlist> - <title>Vorteil eines einzelnen Dateisystems</title> - - <listitem> - <para>Die Größe von Dateisystemen liegt fest. - Es kann passieren, dass Sie eine Partition - vergrößern müssen. Dies ist nicht leicht: - Sie müssen die Daten sichern, das Dateisystem - vergrößert anlegen und die gesicherten - Daten zurückspielen.</para> - - <important> - <para>&os; kennt den Befehl &man.growfs.8;, mit dem man - Dateisysteme im laufenden Betrieb - vergrößern kann.</para> - </important> - </listitem> - </itemizedlist> - - <para>Dateisysteme befinden sich in Partitionen (damit sind - nicht die normalen &ms-dos;-Partitionen gemeint). Jede Partition - wird mit einem Buchstaben von <literal>a</literal> bis - <literal>h</literal> bezeichnet und kann nur ein Dateisystem - enthalten. Dateisysteme können daher über ihren - Mount-Point, den Punkt an dem sie eingehangen sind, oder - den Buchstaben der Partition, in der sie liegen, identifiziert - werden.</para> - - <para>&os; benutzt einen Teil der Platte für den - <firstterm>Swap-Bereich</firstterm>, der dem Rechner - <firstterm>virtuellen Speicher</firstterm> zur Verfügung - stellt. Dadurch kann der Rechner Anwendungen mehr Speicher - zur Verfügung stellen als tatsächlich eingebaut - ist. Wenn der Speicher knapp wird, kann &os; nicht benutzte - Daten in den Swap-Bereich auslagern. Die ausgelagerten - Daten können später wieder in den Speicher - geholt werden (dafür werden dann andere Daten - ausgelagert).</para> - - <para>Für einige Partitionen gelten besondere - Konventionen:</para> - - <informaltable frame="none" pgwide="1"> - <tgroup cols="2"> - <colspec colwidth="1*"/> - <colspec colwidth="5*"/> - - <thead> - <row> - <entry>Partition</entry> - - <entry>Konvention</entry> - </row> - </thead> - - <tbody valign="top"> - <row> - <entry><literal>a</literal></entry> - - <entry>Enthält normalerweise - das Wurzeldateisystem</entry> - </row> - - <row> - <entry><literal>b</literal></entry> - - <entry>Enthält normalerweise - den Swap-Bereich</entry> - </row> - - <row> - <entry><literal>c</literal></entry> - - <entry>Ist normalerweise genauso groß wie - die Slice in der die Partition liegt. Werkzeuge, - die auf der kompletten Slice arbeiten, wie ein - Bad-Block-Scanner, können so die - <literal>c</literal>-Partition benutzen. - Für gewöhnlich legen Sie in dieser - Partition kein Dateisystem an.</entry> - </row> - - <row> - <entry><literal>d</literal></entry> - - <entry>Früher hatte die <literal>d</literal>-Partition - eine besondere Bedeutung. Heute ist dies nicht mehr der - Fall und die Partition <literal>d</literal> kann wie - jede andere Partition auch verwendet werden.</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para>Jede Partition, die ein Dateisystem enthält, - wird in einer <firstterm>Slice</firstterm> angelegt. - Slice ist der Begriff, den &os; für &ms-dos;-Partitionen - verwendet. Slices werden von eins bis vier durchnummeriert.</para> - - <indexterm><primary>Slices</primary></indexterm> - <indexterm><primary>Partitionen</primary></indexterm> - <indexterm><primary>dangerously dedicated</primary></indexterm> - - <para>Die Slice-Nummern werden mit vorgestelltem - <literal>s</literal> hinter den Gerätenamen gestellt: - <quote>da0<emphasis>s1</emphasis></quote> - ist die erste Slice auf dem ersten SCSI-Laufwerk. Auf einer - Festplatte gibt es höchstens vier Slices. In einer - Slice des passenden Typs kann es weitere logische Slices - geben. Diese erweiterten Slices werden ab fünf durchnummeriert: - <quote>ad0<emphasis>s5</emphasis></quote> ist - die erste erweiterte Slice auf einer IDE-Platte. Diese - Geräte werden von Dateisystemen benutzt, die sich in - einer kompletten Slice befinden müssen.</para> - - <para>Slices, <quote>dangerously dedicated</quote>-Festplatten - und andere Platten enthalten Partitionen, die mit Buchstaben - von <literal>a</literal> bis <literal>h</literal> bezeichnet - werden. Der Buchstabe wird an den Gerätenamen - gehangen: <quote>da0<emphasis>a</emphasis></quote> - ist die <literal>a</literal>-Partition des ersten - <literal>da</literal>-Laufwerks. Dieses Laufwerk ist - <quote>dangerously dedicated</quote>. - <quote>ad1s3<emphasis>e</emphasis></quote> ist - die fünfte Partition in der dritten Slice der zweiten - IDE-Platte.</para> - - <para>Schließlich wird noch jede Festplatte des Systems - eindeutig bezeichnet. Der Name einer Festplatte beginnt mit - einem Code, der den Typ der Platte bezeichnet. Es folgt eine - Nummer, die angibt, um welche Festplatte es sich handelt. - Anders als bei Slices werden Festplatten von Null beginnend - durchnummeriert. Gängige Festplatten-Namen sind in - <xref linkend="basics-dev-codes"/> zusammengestellt.</para> - - <para>Wenn Sie eine Partition angeben, erwartet &os;, dass Sie - auch die Slice und die Platte angeben, in denen sich die - Partition befindet. Wenn Sie eine Slice angeben, müssen - Sie auch die Platte der Slice angeben. Setzen Sie den Namen - aus dem Plattennamen gefolgt von einem <literal>s</literal>, - der Slice-Nummer und dem Buchstaben der Partition zusammen. - Einige Beispiele finden Sie in - <xref linkend="basics-disk-slice-part"/>.</para> - - <para>Der Aufbau einer Festplatte wird in - <xref linkend="basics-concept-disk-model"/> dargestellt.</para> - - <para>Um &os; zu installieren, müssen Sie zuerst Slices - auf den Festplatten anlegen. Innerhalb der Slices, die Sie - für &os; verwenden wollen, müssen Sie dann - Partitionen anlegen. In den Partitionen wiederum werden - die Dateisysteme (oder der Auslagerungsbereich) angelegt. - Für Dateisysteme müssen Sie schließlich - noch festlegen, wo diese eingehangen werden (Mount-Point).</para> - - <table frame="none" pgwide="1" id="basics-dev-codes"> - <title>Laufwerk-Codes</title> - - <tgroup cols="2"> - <colspec colwidth="1*"/> - <colspec colwidth="5*"/> - - <thead> - <row> - <entry>Code</entry> - - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><devicename>ad</devicename></entry> - - <entry>ATAPI (IDE) Festplatte</entry> - </row> - - <row> - <entry><devicename>da</devicename></entry> - - <entry>SCSI-Festplatte</entry> - </row> - - <row> - <entry><devicename>acd</devicename></entry> - - <entry>ATAPI (IDE) CD-ROM</entry> - </row> - - <row> - <entry><devicename>cd</devicename></entry> - - <entry>SCSI-CD-ROM</entry> - </row> - - <row> - <entry><devicename>fd</devicename></entry> - - <entry>Disketten-Laufwerk</entry> - </row> - </tbody> - </tgroup> - </table> - - <example id="basics-disk-slice-part"> - <title>Namen von Platten, Slices und Partitionen</title> - - <informaltable frame="none" pgwide="1"> - <tgroup cols="2"> - <colspec colwidth="1*"/> - <colspec colwidth="5*"/> - - <thead> - <row> - <entry>Name</entry> - - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><devicename>ad0s1a</devicename></entry> - - <entry>Die erste Partition (<literal>a</literal>) - in der ersten Slice (<literal>s1</literal>) der - ersten IDE-Festplatte (<literal>ad0</literal>).</entry> - </row> - - <row> - <entry><devicename>da1s2e</devicename></entry> - - <entry>Die fünfte Partition (<literal>e</literal>) - der zweiten Slice (<literal>s2</literal>) auf - der zweiten SCSI-Festplatte - (<literal>da1</literal>).</entry> - </row> - </tbody> - </tgroup> - </informaltable> - </example> - - <example id="basics-concept-disk-model"> - <title>Aufteilung einer Festplatte</title> - - <para>Das folgende Diagramm zeigt die Sicht von &os; auf die - erste IDE-Festplatte eines Rechners. Die Platte soll - 4 GB groß sein und zwei Slices (&ms-dos;-Partitionen) - mit je 2 GB besitzen. Die erste Slice enthält - ein &ms-dos;-Laufwerk (<devicename>C:</devicename>), die zweite - Slice wird von &os; benutzt. Im Beispiel verwendet die - &os;-Installationen drei Datenpartitionen und einen - Auslagerungsbereich.</para> - - <para>Jede der drei Partitionen enthält ein Dateisystem. - Das Wurzeldateisystem ist die <literal>a</literal>-Partition. - In der <literal>e</literal>-Partition befindet sich - der <filename class="directory">/var</filename>-Verzeichnisbaum - und in der <literal>f</literal>-Partition befindet sich - der Verzeichnisbaum unterhalb von - <filename class="directory">/usr</filename>.</para> - - <mediaobject> - <imageobject> - <imagedata fileref="install/disk-layout" format="EPS"/> - </imageobject> - - <textobject> - <literallayout class="monospaced">.-----------------. --. -| | | -| DOS / Windows | | -: : > First slice, ad0s1 -: : | -| | | -:=================: ==: --. -| | | Partition a, mounted as / | -| | > referred to as ad0s2a | -| | | | -:-----------------: ==: | -| | | Partition b, used as swap | -| | > referred to as ad0s2b | -| | | | -:-----------------: ==: | Partition c, no -| | | Partition e, used as /var > file system, all -| | > referred to as ad0s2e | of FreeBSD slice, -| | | | ad0s2c -:-----------------: ==: | -| | | | -: : | Partition f, used as /usr | -: : > referred to as ad0s2f | -: : | | -| | | | -| | --' | -`-----------------' --'</literallayout> - </textobject> - </mediaobject> - </example> - </sect1> - - <sect1 id="mount-unmount"> - <title>Anhängen und Abhängen von Dateisystemen</title> - - <para>Ein Dateisystem wird am besten als ein Baum mit der - Wurzel <filename>/</filename> veranschaulicht. - <filename>/dev</filename>, <filename>/usr</filename>, und - die anderen Verzeichnisse im Rootverzeichnis sind Zweige, - die wiederum eigene Zweige wie <filename>/usr/local</filename> - haben können.</para> - - <indexterm><primary>Root-Dateisystem</primary></indexterm> - <para>Es gibt verschiedene Gründe, bestimmte dieser Verzeichnisse - auf eigenen Dateisystemen anzulegen. <filename>/var</filename> - enthält <filename>log/</filename>, <filename>spool/</filename> - sowie verschiedene andere temporäre - Dateien und kann sich daher schnell füllen. Es empfiehlt sich, - <filename>/var</filename> von <filename>/</filename> zu trennen, - da es schlecht ist, wenn das Root-Dateisystem voll - läuft.</para> - - <para>Ein weiterer Grund bestimmte Verzeichnisbäume auf - andere Dateisysteme zu legen, ist gegeben, wenn sich die - Verzeichnisbäume auf gesonderten physikalischen oder - virtuellen Platten, wie - <link linkend="network-nfs">Network File System</link> - oder CD-ROM-Laufwerken, befinden.</para> - - <sect2 id="disks-fstab"> - <title>Die <filename>fstab</filename> Datei</title> - - <indexterm> - <primary>Dateisysteme</primary> - <secondary>fstab</secondary> - </indexterm> - <para>Während des <link linkend="boot">Boot-Prozesses</link> - werden in <filename>/etc/fstab</filename> aufgeführte - Verzeichnisse, sofern sie nicht mit der Option <option>noauto</option> - versehen sind, automatisch angehangen.</para> - - <para>Die Zeilen in <filename>/etc/fstab</filename> haben das - folgende Format:</para> - - <programlisting><replaceable>device</replaceable> <replaceable>/mount-point</replaceable> <replaceable>fstype</replaceable> <replaceable>options</replaceable> <replaceable>dumpfreq</replaceable> <replaceable>passno</replaceable></programlisting> - - <variablelist> - <varlistentry> - <term><literal>device</literal></term> - - <listitem> - <para>Ein existierender Gerätename - wie in <xref linkend="disks-naming"/> beschrieben.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>mount-point</literal></term> - - <listitem> - <para>Ein existierendes Verzeichnis, - an das das Dateisystem angehangen wird.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>fstype</literal></term> - - <listitem> - <para>Der Typ des Dateisystems, - der an &man.mount.8; weitergegeben wird. FreeBSDs - Standarddateisystem ist <literal>ufs</literal>.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>options</literal></term> - - <listitem> - <para>Entweder <option>rw</option> - für beschreibbare Dateisysteme oder <option>ro</option> - für schreibgeschützte Dateisysteme, gefolgt von - weiteren benötigten Optionen. Eine häufig verwendete - Option ist <option>noauto</option> für Dateisysteme, - die während der normalen Bootsequenz nicht angehangen - werden sollen. Weitere Optionen finden sich - in &man.mount.8;.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>dumpfreq</literal></term> - - <listitem><para>Gibt die Anzahl der Tage an, nachdem das - Dateisystem gesichert werden soll. Fehlt der Wert, wird - <literal>0</literal> angenommen.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>passno</literal></term> - - <listitem><para>Bestimmt die Reihenfolge, in der die Dateisysteme - überprüft werden sollen. Für Dateisysteme, - die übersprungen werden sollen, ist - <literal>passno</literal> auf null zu setzen. Für das - Root-Dateisystem, das vor allen anderen überprüft - werden muss, sollte der Wert von - <literal>passno</literal> eins betragen. Allen anderen - Dateisystemen sollten Werte größer eins zugewiesen - werden. Wenn mehrere Dateisysteme den gleichen Wert - besitzen, wird &man.fsck.8; versuchen, diese parallel zu - überprüfen.</para> - </listitem> - </varlistentry> - </variablelist> - </sect2> - - <sect2 id="disks-mount"> - <title>Das <command>mount</command> Kommando</title> - <indexterm> - <primary>Dateisysteme</primary> - <secondary>anhängen</secondary> - </indexterm> - - <para>&man.mount.8; hängt schließlich Dateisysteme - an.</para> - - <para>In der grundlegenden Form wird es wie folgt benutzt:</para> - - <informalexample> - <screen>&prompt.root; <userinput>mount <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></userinput></screen> - </informalexample> - - <para>Viele Optionen werden in &man.mount.8; beschrieben, - die am häufigsten verwendeten sind:</para> - - <variablelist> - <title>Optionen von <command>mount</command></title> - - <varlistentry> - <term><option>-a</option></term> - - <listitem> - <para>Hängt alle Dateisysteme aus - <filename>/etc/fstab</filename> an. Davon ausgenommen - sind Dateisysteme, die mit <quote>noauto</quote> markiert - sind, die mit der Option <option>-t</option> ausgeschlossen - wurden und Dateisysteme, die schon angehangen sind.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><option>-d</option></term> - - <listitem> - <para>Führt alles bis auf den - <function>mount</function>-Systemaufruf aus. - Nützlich ist diese Option in Verbindung - mit <option>-v</option>. Damit wird angezeigt, was - &man.mount.8; tatsächlich versuchen - würde, um das Dateisystem anzuhängen.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><option>-f</option></term> - - <listitem> - <para>Erzwingt das Anhängen eines unsauberen Dateisystems - oder erzwingt die Rücknahme des Schreibzugriffs, wenn - der Status des Dateisystems von beschreibbar auf - schreibgeschützt geändert wird.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><option>-r</option></term> - - <listitem> - <para>Hängt das Dateisystem schreibgeschützt ein. Das - kann auch durch Angabe von <option>ro</option> als Argument - der Option <option>-o</option> erreicht werden.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><option>-t</option> - <replaceable>fstype</replaceable></term> - - <listitem> - <para>Hängt das Dateisystem mit dem angegebenen Typ an, - oder hängt nur Dateisysteme mit dem angegebenen Typ - an, wenn auch <option>-a</option> angegeben - wurde.</para> - - <para>Die Voreinstellung für den Typ des Dateisystems - ist <quote>ufs</quote>.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><option>-u</option></term> - - <listitem> - <para>Aktualisiert die Mountoptionen des Dateisystems.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><option>-v</option></term> - - <listitem> - <para>Geschwätzig sein.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><option>-w</option></term> - - <listitem> - <para>Hängt das Dateisystem beschreibbar an.</para> - </listitem> - </varlistentry> - </variablelist> - - <para><option>-o</option> erwartet eine durch Kommata separierte Liste - von Optionen, unter anderem die folgenden:</para> - - <variablelist> - <varlistentry> - <term>noexec</term> - - <listitem> - <para>Verbietet das Ausführen von binären - Dateien auf dem Dateisystem. Dies ist eine - nützliche Sicherheitsfunktion.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>nosuid</term> - - <listitem> - <para>SetUID und SetGID Bits werden auf dem Dateisystem - nicht beachtet. Dies ist eine nützliche - Sicherheitsfunktion.</para> - </listitem> - </varlistentry> - </variablelist> - </sect2> - - <sect2 id="disks-umount"> - <title>Das <command>umount</command> Kommando</title> - <indexterm> - <primary>Dateisysteme</primary> - <secondary>abhängen</secondary> - </indexterm> - - <para>&man.umount.8; akzeptiert als Parameter entweder - einen Mountpoint, einen Gerätenamen, oder die - Optionen <option>-a</option> oder <option>-A</option>.</para> - - <para>Jede Form akzeptiert <option>-f</option>, um das - Abhängen zu erzwingen, und <option>-v</option>, um - etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit - <option>-f</option>: Ihr Computer kann abstürzen oder es - können Daten auf dem Dateisystem beschädigt werden, wenn - Sie das Abhängen erzwingen.</para> - - <para><option>-a</option> und <option>-A</option> werden benutzt - um alle Dateisysteme, deren Typ durch <option>-t</option> - modifiziert werden kann, abzuhängen. <option>-A</option> - hängt das Rootdateisystem nicht ab.</para> - </sect2> - </sect1> - - <sect1 id="basics-processes"> - <title>Prozesse</title> - - <para>Da FreeBSD ein Multitasking-Betriebssystem ist, sieht es so aus, - als ob mehrere Prozesse zur gleichen Zeit laufen. Jedes Programm, - das zu irgendeiner Zeit läuft, wird - <firstterm>Prozess</firstterm> genannt. Jedes Kommando - startet mindestens einen Prozess. Einige Systemprozesse - laufen ständig und stellen die Funktion des Systems sicher.</para> - - <para>Jeder Prozess wird durch eine eindeutige Nummer identifiziert, - die <firstterm>Prozess-ID</firstterm> oder - <firstterm>PID</firstterm> genannt wird. Prozesse haben ebenso - wie Dateien einen Besitzer und eine Gruppe, die festlegen, welche - Dateien und Geräte der Prozess benutzen kann. Dabei - finden die vorher beschriebenen Zugriffsrechte Anwendung. Die meisten - Prozesse haben auch einen Elternprozess, der sie gestartet hat. - Wenn Sie in der Shell Kommandos eingeben, dann ist die Shell ein - Prozess und jedes Kommando, das Sie starten, ist auch ein - Prozess. Jeder Prozess, den Sie auf diese Weise starten, - besitzt den Shell-Prozess als Elternprozess. Die Ausnahme - hiervon ist ein spezieller Prozess, der &man.init.8; - heißt. <command>init</command> ist immer der erste Prozess - und hat somit die PID 1. <command>init</command> wird vom Kernel - beim Booten von FreeBSD gestartet.</para> - - <para>Die Kommandos &man.ps.1; und &man.top.1; sind besonders - nützlich, um sich die Prozesse auf einem System anzusehen. - <command>ps</command> zeigt eine statische Liste der laufenden - Prozesse und kann deren PID, Speicherverbrauch und die - Kommandozeile, mit der sie gestartet wurden und vieles mehr - anzeigen. <command>top</command> zeigt alle laufenden Prozesse - an und aktualisiert die Anzeige, so dass Sie Ihrem Computer - bei der Arbeit zuschauen können.</para> - - <para>Normal zeigt Ihnen <command>ps</command> nur die laufenden - Prozesse, die Ihnen gehören. Zum Beispiel:</para> - - <screen>&prompt.user; <userinput>ps</userinput> - PID TT STAT TIME COMMAND - 298 p0 Ss 0:01.10 tcsh - 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) -37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) -48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi -48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) -72210 p0 R+ 0:00.00 ps - 390 p1 Is 0:01.14 tcsh - 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y - 6688 p3 IWs 0:00.00 tcsh -10735 p4 IWs 0:00.00 tcsh -20256 p5 IWs 0:00.00 tcsh - 262 v0 IWs 0:00.00 -tcsh (tcsh) - 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 - 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 - 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc - 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish</screen> - - <para>Wie Sie sehen, gibt &man.ps.1; mehrere Spalten aus. In der - <literal>PID</literal> Spalte findet sich die vorher besprochene - Prozess-ID. PIDs werden von 1 beginnend bis 99999 zugewiesen - und fangen wieder von vorne an, wenn die Grenze überschritten - wird. Ist eine PID bereits vergeben, wird diese allerdings nicht - erneut vergeben. - Die Spalte <literal>TT</literal> zeigt den Terminal, auf dem das - Programm läuft. <literal>STAT</literal> zeigt den Status - des Programms an und kann für die Zwecke dieser Diskussion ebenso - wie <literal>TT</literal> ignoriert werden. <literal>TIME</literal> - gibt die Zeit an, die das Programm auf der CPU gelaufen ist – - dies ist nicht unbedingt die Zeit, die seit dem Start des Programms - vergangen ist, da die meisten Programme hauptsächlich auf - bestimmte Dinge warten, bevor sie wirklich CPU-Zeit verbrauchen. - Unter der Spalte <literal>COMMAND</literal> finden Sie schließlich - die Kommandozeile, mit der das Programm gestartet wurde.</para> - - <para>&man.ps.1; besitzt viele Optionen, um die angezeigten Informationen - zu beeinflussen. Eine nützliche Kombination ist - <literal>auxww</literal>. Mit <option>a</option> werden Information - über alle laufenden Prozesse und nicht nur Ihrer eigenen - angezeigt. Der Name des Besitzers des Prozesses, sowie Informationen - über den Speicherverbrauch werden mit <option>u</option> - angezeigt. <option>x</option> zeigt auch Dämonen-Prozesse an, - und <option>ww</option> veranlasst &man.ps.1; die komplette - Kommandozeile für jeden Befehl anzuzeigen, anstatt sie - abzuschneiden, wenn sie zu lang für die Bildschirmausgabe - wird.</para> - - <para>Die Ausgabe von &man.top.1; sieht ähnlich aus:</para> - - <screen>&prompt.user; <userinput>top</userinput> -last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 -47 processes: 1 running, 46 sleeping -CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle -Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free -Swap: 256M Total, 38M Used, 217M Free, 15% Inuse - - PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND -72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top - 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 - 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA - 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm -48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu - 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd - 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt -...</screen> - - <para>Die Ausgabe ist in zwei Abschnitte geteilt. In den ersten - fünf Kopfzeilen finden sich die zuletzt zugeteilte PID, die - Systemauslastung (engl. <foreignphrase>load average</foreignphrase>), - die Systemlaufzeit (die Zeit seit dem letzten Reboot) und die - momentane Zeit. Die weiteren Zahlen im Kopf beschreiben wie viele - Prozesse momentan laufen (im Beispiel 47), wie viel Speicher - und Swap verbraucht wurde und wie viel Zeit das System in den - verschiedenen CPU-Modi verbringt.</para> - - <para>Darunter befinden sich einige Spalten mit ähnlichen - Informationen wie in der Ausgabe von &man.ps.1;. Wie im vorigen - Beispiel können Sie die PID, den Besitzer, die verbrauchte - CPU-Zeit und das Kommando erkennen. &man.top.1; zeigt auch den - Speicherverbrauch des Prozesses an, der in zwei Spalten aufgeteilt - ist. Die erste Spalte gibt den gesamten Speicherverbrauch des - Prozesses an, in der zweiten Spalte wird der aktuelle Verbrauch - angegeben. <application>&netscape;</application> hat im gezeigten - Beispiel insgesamt 30 MB Speicher verbraucht. Momentan benutzt - es allerdings nur 9 MB.</para> - - <para>Die Anzeige wird von &man.top.1; automatisch alle zwei Sekunden - aktualisiert. Der Zeitraum kann mit <option>-s</option> eingestellt - werden.</para> - </sect1> - - <sect1 id="basics-daemons"> - <title>Dämonen, Signale und Stoppen von Prozessen</title> - - <para>Wenn Sie einen Editor starten, können Sie ihn leicht bedienen - und Dateien laden. Sie können das, weil der Editor dafür - Vorsorge getroffen hat und auf einem <firstterm>Terminal</firstterm> - läuft. Manche Programme erwarten keine Eingaben von einem - Benutzer und lösen sich bei erster Gelegenheit von ihrem - Terminal. Ein Web-Server zum Beispiel verbringt den ganzen Tag - damit, auf Anfragen zu antworten und erwartet keine Eingaben von Ihnen. - Programme, die E-Mail von einem Ort zu einem anderen Ort transportieren - sind ein weiteres Beispiel für diesen Typ von Anwendungen.</para> - - <para>Wir nennen diese Programme <firstterm>Dämonen</firstterm>. - Dämonen stammen aus der griechischen Mythologie und waren - weder gut noch böse. Sie waren kleine dienstbare Geister, - die meistens nützliche Sachen für die Menschheit vollbrachten. - Ähnlich wie heutzutage Web-Server und Mail-Server nützliche - Dienste verrichten. Seit langer Zeit ist daher das BSD Maskottchen - dieser fröhlich aussehende Dämon mit Turnschuhen - und Dreizack.</para> - - <para>Programme, die als Dämon laufen, werden entsprechend einer - Konvention mit einem <quote>d</quote> am Ende benannt. - <application>BIND</application> steht beispielsweise für - Berkeley Internet Name Domain, das tatsächlich laufende Programm - heißt aber - <command>named</command>. Der Apache Webserver wird - <command>httpd</command> genannt, der Druckerspool-Dämon heißt - <command>lpd</command> usw. Dies ist allerdings eine Konvention - und keine unumstößliche Regel: Der Dämon der - Anwendung <application>sendmail</application> heißt - <command>sendmail</command> und nicht <command>maild</command>, wie - Sie vielleicht gedacht hatten.</para> - - <para>Manchmal müssen Sie mit einem Dämon kommunizieren. Dazu - verwenden Sie <firstterm>Signale</firstterm>. Sie können - mit einem Dämonen oder jedem anderen laufenden Prozess - kommunizieren, indem Sie diesem ein Signal schicken. Sie können - verschiedene Signale verschicken – manche haben eine festgelegte - Bedeutung, andere werden von der Anwendung interpretiert. Die - Dokumentation zur fraglichen Anwendung wird erklären, wie - die Anwendung Signale interpretiert. Sie können nur Signale - zu Prozessen senden, die Ihnen gehören. Normale Benutzer haben - nicht die Berechtigung, Prozessen anderer Benutzer mit &man.kill.1; - oder &man.kill.2; Signale zu schicken. Der Benutzer - <username>root</username> darf jedem Prozess Signale schicken.</para> - - <para>In manchen Fällen wird FreeBSD Signale senden. Wenn eine - Anwendung schlecht geschrieben ist und auf Speicher zugreift, auf - den sie nicht zugreifen soll, so sendet FreeBSD dem Prozess - das <firstterm>Segmentation Violation</firstterm> Signal - (<literal>SIGSEGV</literal>). Wenn eine Anwendung den &man.alarm.3; - Systemaufruf benutzt hat, um nach einiger Zeit benachrichtigt zu - werden, bekommt sie das Alarm Signal (<literal>SIGALRM</literal>) - gesendet.</para> - - <para>Zwei Signale können benutzt werden, um Prozesse zu stoppen: - <literal>SIGTERM</literal> und <literal>SIGKILL</literal>. Mit - <literal>SIGTERM</literal> fordern Sie den Prozess höflich zum - Beenden auf. Der Prozess kann das Signal abfangen und merken, - dass er sich beenden soll. Er hat dann Gelegenheit Logdateien - zu schließen und die Aktion, die er vor der Aufforderung - sich zu beenden durchführte, abzuschließen. Er kann - sogar <literal>SIGTERM</literal> ignorieren, wenn er eine Aktion - durchführt, die nicht unterbrochen werden darf.</para> - - <para><literal>SIGKILL</literal> kann von keinem Prozess ignoriert - werden. Das Signal lässt sich mit <quote>Mich interessiert - nicht, was du gerade machst, hör sofort auf damit!</quote> - umschreiben. Wenn Sie einem Prozess <literal>SIGKILL</literal> - schicken, dann wird FreeBSD diesen sofort beenden<footnote><para> - Das stimmt nicht ganz: Es gibt Fälle, in denen ein Prozess - nicht unterbrochen werden kann. Wenn der Prozesss zum Beispiel - eine Datei von einem anderen Rechner auf dem Netzwerk liest und dieser - Rechner aus irgendwelchen Gründen nicht erreichbar ist - (ausgeschaltet, oder ein Netzwerkfehler), dann ist der Prozess - nicht zu unterbrechen. Wenn der Prozess den Lesezugriff - nach einem Timeout von typischerweise zwei Minuten aufgibt, - dann wir er beendet.</para> - </footnote>.</para> - - <para>Andere Signale, die Sie vielleicht verschicken wollen, sind - <literal>SIGHUP</literal>, <literal>SIGUSR1</literal> und - <literal>SIGUSR2</literal>. Diese Signale sind für allgemeine - Zwecke vorgesehen und verschiedene Anwendungen werden unterschiedlich - auf diese Signale reagieren.</para> - - <para>Nehmen wir an, Sie haben die Konfiguration Ihres Webservers - verändert und möchten dies dem Server mitteilen. Sie - könnten den Server natürlich stoppen und - <command>httpd</command> wieder starten. Die Folge wäre eine - kurze Zeit, in der der Server nicht erreichbar ist. Die meisten - Dämonen lesen Ihre Konfigurationsdatei beim Empfang eines - <literal>SIGHUP</literal> neu ein. Da es keinen Standard gibt, der - vorschreibt, wie auf diese Signale zu reagieren ist, lesen - Sie bitte die Dokumentation zu dem in Frage kommenden Dämon.</para> - - <para>Mit &man.kill.1; können Sie, wie unten gezeigt, Signale - verschicken.</para> - - <procedure> - <title>Verschicken von Signalen</title> - - <para>Das folgende Beispiel zeigt, wie Sie &man.inetd.8; ein - Signal schicken. Die Konfigurationsdatei von - <command>inetd</command> ist <filename>/etc/inetd.conf</filename>. - Diese Konfigurationsdatei liest <command>inetd</command> ein, - wenn er ein <literal>SIGHUP</literal> empfängt.</para> - - <step> - <para>Suchen Sie die Prozess-ID des Prozesses, dem Sie ein Signal - schicken wollen. Benutzen Sie dazu &man.ps.1; und &man.grep.1;. - Mit &man.grep.1; können Sie in einer Ausgabe nach einem - String suchen. Da &man.inetd.8; unter dem Benutzer - <username>root</username> läuft und Sie das Kommando als - normaler Benutzer absetzen, müssen Sie &man.ps.1; mit - <option>ax</option> aufrufen:</para> - - <screen>&prompt.user; <userinput>ps -ax | grep inetd</userinput> - 198 ?? IWs 0:00.00 inetd -wW</screen> - - <para>Die Prozess-ID von &man.inetd.8; ist 198. In einigen - Fällen werden Sie auch das <literal>grep inetd</literal> - Kommando in der Ausgabe sehen. Dies hat damit zu tun, wie - &man.ps.1; die Liste der laufenden Prozesse untersucht.</para> - </step> - - <step> - <para>Senden Sie das Signal mit &man.kill.1;. Da &man.inetd.8; - unter dem Benutzer <username>root</username> läuft, müssen - Sie zuerst mit &man.su.1; <username>root</username> werden:</para> - - <screen>&prompt.user; <userinput>su</userinput> -<prompt>Password:</prompt> -&prompt.root; <userinput>/bin/kill -s HUP 198</userinput></screen> - - <para>&man.kill.1; wird, wie andere Kommandos von &unix; Systemen auch, keine Ausgabe - erzeugen, wenn das Kommando erfolgreich war. Wenn Sie versuchen, - einem Prozess, der nicht Ihnen gehört, ein Signal zu - senden, dann werden Sie die Meldung - <errorname>kill: <replaceable>PID</replaceable>: Operation not - permitted</errorname> sehen. Wenn Sie sich bei der Eingabe der - PID vertippen, werden Sie das Signal dem falschen Prozess - schicken, was schlecht sein kann. Wenn Sie Glück haben, - existiert der Prozess nicht und Sie werden mit der Ausgabe - <errorname>kill: <replaceable>PID</replaceable>: No such - process</errorname> belohnt.</para> - - <note> - <title>Warum soll ich <command>/bin/kill</command> benutzen?</title> - - <para>Viele Shells stellen <command>kill</command> als internes - Kommando zur Verfügung, das heißt die Shell sendet - das Signal direkt, anstatt <filename>/bin/kill</filename> - zu starten. Das kann nützlich sein, aber die - unterschiedlichen Shells benutzen eine verschiedene Syntax, - um die Namen der Signale anzugeben. Anstatt jede Syntax zu - lernen, kann es einfacher sein, <command>/bin/kill - <replaceable>...</replaceable></command> direkt aufzurufen.</para> - </note> - </step> - </procedure> - - <para>Andere Signale senden Sie auf die gleiche Weise, ersetzen - Sie nur <literal>TERM</literal> oder <literal>KILL</literal> - entsprechend.</para> - - <important> - <para>Es kann gravierende Auswirkungen haben, wenn Sie zufällig - Prozesse beenden. Insbesondere &man.init.8; mit der Prozess-ID - ist ein Spezialfall. Mit <command>/bin/kill -s KILL 1</command> - können Sie Ihr System schnell herunterfahren. - Überprüfen Sie die Argumente von &man.kill.1; - <emphasis>immer</emphasis> zweimal <emphasis>bevor</emphasis> - Sie <keycap>Return</keycap> drücken.</para> - </important> - </sect1> - - <sect1 id="shells"> - <title>Shells</title> - <indexterm><primary>Shells</primary></indexterm> - <indexterm><primary>Kommandozeile</primary></indexterm> - - <para>Von der tagtäglichen Arbeit mit FreeBSD wird eine Menge - mit der Kommandozeilen Schnittstelle der Shell erledigt. Die - Hauptaufgabe einer Shell besteht darin, Kommandos der Eingabe - anzunehmen und diese auszuführen. Viele Shells haben - außerdem eingebaute Funktionen, die die tägliche - Arbeit erleichtern, beispielsweise eine Dateiverwaltung, - die Vervollständigung von Dateinamen (Globbing), einen - Kommandozeileneditor, sowie Makros und Umgebungsvariablen. FreeBSD - enthält die Shells <command>sh</command> (die Bourne Shell) und - <command>tcsh</command> (die verbesserte C-Shell) im Basissystem. - Viele andere Shells, wie <command>zsh</command> oder - <command>bash</command>, befinden sich in der Ports-Sammlung.</para> - - <para>Welche Shell soll ich benutzen? Das ist wirklich eine - Geschmacksfrage. Sind Sie ein C-Programmierer, finden Sie - vielleicht eine C-artige Shell wie die <command>tcsh</command> - angenehmer. Kommen Sie von Linux oder ist Ihnen der Umgang mit &unix; Systemen - neu, so könnten Sie die <command>bash</command> probieren. - Der Punkt ist, dass - jede Shell ihre speziellen Eigenschaften hat, die mit Ihrer - bevorzugten Arbeitsumgebung harmonieren können oder nicht. - Sie müssen sich eine Shell aussuchen.</para> - - <para>Ein verbreitetes Merkmal in Shells ist die - Dateinamen-Vervollständigung. Sie müssen nur einige - Buchstaben eines Kommandos oder eines Dateinamen eingeben und - die Shell vervollständigt den Rest automatisch durch - drücken der <keycap>Tab</keycap>-Taste. Hier ist ein Beispiel. - Angenommen, Sie - haben zwei Dateien <filename>foobar</filename> und - <filename>foo.bar</filename>. Die Datei - <filename>foo.bar</filename> möchten Sie löschen. Nun - würden Sie an der Tastatur eingeben: - <command>rm fo[<keycap>Tab</keycap>]. - [<keycap>Tab</keycap>]</command>.</para> - - <para>Die Shell würde dann <command>rm - foo[BEEP].bar</command> ausgeben.</para> - - <para>[BEEP] meint den Rechner-Piepser. Diesen gibt die Shell - aus, um anzuzeigen, dass es den Dateinamen nicht - vervollständigen konnte, da es mehrere Möglichkeiten - gibt. Beide Dateien <filename>foobar</filename> und - <filename>foo.bar</filename> beginnen mit <literal>fo</literal>, - so konnte nur bis <literal>foo</literal> ergänzt werden. - Nachdem Sie <literal>.</literal> eingaben und dann die - <keycap>Tab</keycap>-Taste - drückten, konnte die Shell den Rest für Sie - ausfüllen.</para> - - <indexterm><primary>Umgebungsvariablen</primary></indexterm> - - <para>Ein weiteres Merkmal der Shell ist der Gebrauch von - Umgebungsvariablen. Dies sind veränderbare Schlüsselpaare - im Umgebungsraum der Shell, die jedes von der Shell aufgerufene - Programm lesen kann. Daher enthält der Umgebungsraum viele - Konfigurationsdaten für Programme. Die folgende Liste zeigt - verbreitete Umgebungsvariablen und was sie bedeuten:</para> - - <indexterm><primary>Umgebungsvariablen</primary></indexterm> - <informaltable frame="none" pgwide="1"> - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - <entry>Beschreibung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><envar>USER</envar></entry> - <entry>Name des angemeldeten Benutzers.</entry> - </row> - - <row> - <entry><envar>PATH</envar></entry> - <entry>Liste mit Verzeichnissen (getrennt durch Doppelpunkt) - zum Suchen nach Programmen.</entry> - </row> - - <row> - <entry><envar>DISPLAY</envar></entry> - <entry>Der Name des X11-Bildschirms, auf dem - Ausgaben erfolgen sollen.</entry> - </row> - - <row> - <entry><envar>SHELL</envar></entry> - <entry>Die aktuelle Shell.</entry> - </row> - - <row> - <entry><envar>TERM</envar></entry> - <entry>Name des Terminaltyps des Benutzers. Benutzt, um die - Fähigkeiten des Terminals zu bestimmen.</entry> - </row> - - <row> - <entry><envar>TERMCAP</envar></entry> - <entry>Datenbankeintrag der Terminal Escape Codes, - benötigt um verschieden Terminalfunktionen - auszuführen.</entry> - </row> - - <row> - <entry><envar>OSTYPE</envar></entry> - <entry>Typ des Betriebsystems, beispielsweise FreeBSD.</entry> - </row> - - <row> - <entry><envar>MACHTYPE</envar></entry> - <entry>Die CPU Architektur auf dem das System - läuft.</entry> - </row> - - <row> - <entry><envar>EDITOR</envar></entry> - <entry>Vom Benutzer bevorzugter Text-Editor.</entry> - </row> - - <row> - <entry><envar>PAGER</envar></entry> - <entry>Vom Benutzer bevorzugter Text-Betrachter.</entry> - </row> - - <row> - <entry><envar>MANPATH</envar></entry> - <entry>Liste mit Verzeichnissen (getrennt durch Doppelpunkt) - zum Suchen nach Manualpages.</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <indexterm> - <primary>Shells</primary> - <secondary>Bourne Shell</secondary> - </indexterm> - <para>Das Setzen von Umgebungsvariablen funktioniert - von Shell zu Shell unterschiedlich. Zum Beispiel benutzt man - in C-artigen Shells wie der <command>tcsh</command> dazu - <command>setenv</command>. Unter Bourne-Shells wie <command>sh</command> - oder <command>bash</command> benutzen Sie zum Setzen von - Umgebungsvariablen <command>export</command>. Um - beispielsweise die Variable <envar>EDITOR</envar> mit - <command>csh</command> oder <command>tcsh</command> auf - <filename>/usr/local/bin/emacs</filename> zu setzen, setzen Sie das - folgende Kommando ab:</para> - - <screen>&prompt.user; <userinput>setenv EDITOR /usr/local/bin/emacs</userinput></screen> - - <para>Unter Bourne-Shells:</para> - - <screen>&prompt.user; <userinput>export EDITOR="/usr/local/bin/emacs"</userinput></screen> - - <para>Sie können die meisten Shells Umgebungsvariablen - expandieren lassen, in dem Sie in der Kommandozeile ein - <literal>$</literal> davor eingeben. Zum Beispiel gibt - <command>echo $TERM</command> aus, worauf <envar>$TERM</envar> - gesetzt ist, weil die Shell <envar>$TERM</envar> expandiert - und das Ergebnis an <command>echo</command> gibt.</para> - - <para>Shells behandeln viele Spezialzeichen, so genannte - Metazeichen, als besondere Darstellungen für Daten. - Das allgemeinste ist das Zeichen <literal>*</literal>, das eine - beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. - Diese Metazeichen können zum Vervollständigen von - Dateinamen (Globbing) benutzt werden. Beispielsweise liefert - das Kommando <command>echo *</command> nahezu das gleiche - wie die Eingabe von <command>ls</command>, da die Shell alle - Dateinamen die mit <literal>*</literal> übereinstimmen, an - <command>echo</command> weitergibt.</para> - - <para>Um zu verhindern, dass die Shell diese Sonderzeichen - interpretiert, kann man sie schützen, indem man ihnen einen - Backslash (<literal>\</literal>) voranstellt. <command>echo - $TERM</command> gibt aus, auf was auch immer Ihr Terminal - gesetzt ist. <command>echo \$TERM</command> gibt - <envar>$TERM</envar> genauso aus, wie es hier steht.</para> - - <sect2 id="changing-shells"> - <title>Ändern der Shell</title> - - <para>Der einfachste Weg Ihre Shell zu ändern, ist das - Kommando <command>chsh</command> zu benutzen. - <command>chsh</command> platziert Sie im Editor, welcher durch - Ihre Umgebungsvariable <envar>EDITOR</envar> gesetzt ist, - im <command>vi</command> wenn die Variable nicht gesetzt ist. - Ändern Sie die Zeile mit <quote>Shell:</quote> - entsprechend Ihren Wünschen.</para> - - <para>Sie können auch <command>chsh</command> mit der Option - <option>-s</option> aufrufen, dann wird Ihre Shell gesetzt, - ohne dass Sie in einen Editor gelangen. Um Ihre Shell - zum Beispiel auf die <command>bash</command> zu ändern, - geben Sie das folgende Kommando ein:</para> - - <screen>&prompt.user; <userinput>chsh -s /usr/local/bin/bash</userinput></screen> - - <note> - <para>Die von Ihnen gewünschte Shell - <emphasis>muss</emphasis> in <filename>/etc/shells</filename> - aufgeführt sein. Haben Sie eine Shell aus der - <link linkend="ports">Ports-Sammlung</link> installiert, - sollte das schon automatisch erledigt werden. Installierten - Sie die Shell von Hand, so müssen Sie sie dort - eintragen.</para> - - <para>Haben Sie beispielsweise die <command>bash</command> nach - <filename>/usr/local/bin</filename> installiert, geben Sie - Folgendes ein:</para> - - <screen>&prompt.root; <userinput>echo "/usr/local/bin/bash" >> /etc/shells</userinput></screen> - - <para>Danach können Sie <command>chsh</command> aufrufen.</para> - </note> - </sect2> - </sect1> - - <sect1 id="editors"> - <title>Text-Editoren</title> - <indexterm><primary>Text Editoren</primary></indexterm> - <indexterm><primary>Editoren</primary></indexterm> - - <para>Eine großer Teil der Konfiguration wird bei FreeBSD durch - das Editieren von Textdateien erledigt. Deshalb ist es eine - gute Idee, mit einem Texteditor vertraut zu werden. FreeBSD hat - ein paar davon im Basissystem und sehr viel mehr in der - Ports-Sammlung.</para> - - <indexterm> - <primary><command>ee</command></primary> - </indexterm> - - <indexterm> - <primary>Text Editoren</primary> - <secondary><command>ee</command></secondary> - </indexterm> - - <para>Der am leichtesten und einfachsten zu erlernende Editor nennt - sich <application>ee</application>, was für - <foreignphrase>easy editor</foreignphrase> steht. - Um <application>ee</application> zu starten, gibt man in der - Kommandozeile <command>ee filename</command> ein, wobei - <replaceable>filename</replaceable> den Namen der zu editierenden - Datei darstellt. Um zum Beispiel <filename>/etc/rc.conf</filename> - zu editieren, tippen Sie <command>ee /etc/rc.conf</command> ein. - Einmal im Editor, finden Sie alle Editor-Funktionen oben im - Display aufgelistet. Das Einschaltungszeichen - <literal>^</literal> steht für die <keycap>Ctrl</keycap> (oder - <keycap>Strg</keycap>) Taste, mit <literal>^e</literal> ist also die - Tastenkombination <keycombo - action="simul"><keycap>Ctrl</keycap><keycap>e</keycap></keycombo> - gemeint. Um <application>ee</application> zu verlassen, drücken - Sie <keycap>Esc</keycap> und wählen dann <option>leave - editor</option> aus. Der Editor fragt nach, ob Sie speichern - möchten, wenn die Datei verändert wurde.</para> - - <indexterm> - <primary><command>vi</command></primary> - </indexterm> - <indexterm> - <primary>Text Editoren</primary> - <secondary><command>vi</command></secondary> - </indexterm> - <indexterm> - <primary><command>emacs</command></primary> - </indexterm> - <indexterm> - <primary>Text Editoren</primary> - <secondary><command>emacs</command></secondary> - </indexterm> - <para>FreeBSD verfügt über leistungsfähigere - Editoren wie <application>vi</application> als Teil des - Basissystems, andere Editoren wie <application>emacs</application> - oder <application>vim</application> sind Teil der Ports-Sammlung. - Diese Editoren bieten höhere Funktionalität und - Leistungsfähigkeit, jedoch auf Kosten einer etwas - schwierigeren Erlernbarkeit. Wenn Sie viele Textdateien - editieren, sparen Sie auf lange Sicht mehr Zeit durch das Erlernen - von Editoren wie <application>vim</application> oder - <application>emacs</application> ein.</para> - - <para>Viele Anwendungen, die Dateien verändern oder Texteingabe - erwarten, werden automatisch einen Texteditor öffnen. Um den - Standardeditor zu ändern, setzen Sie die Umgebungsvariable - <envar>EDITOR</envar>. Um mehr darüber zu erfahren, lesen Sie den - Abschnitt <link linkend="shells">Shells</link>.</para> - </sect1> - - <sect1 id="basics-devices"> - <title>Geräte und Gerätedateien</title> - - <para>Der Begriff Gerät wird meist in Verbindung mit Hardware - wie Laufwerken, Druckern, Grafikkarten oder Tastaturen gebraucht. - Der Großteil der Meldungen, die beim Booten von FreeBSD angezeigt - werden, beziehen sich auf gefundene Geräte. Sie können sich - die Bootmeldungen später in <filename>/var/run/dmesg.boot</filename> - ansehen.</para> - - <para>Gerätenamen, die Sie wahrscheinlich in den Bootmeldungen sehen - werden, sind zum Beispiel <devicename>acd0</devicename>, das erste - IDE CD-ROM oder <devicename>kbd0</devicename>, die Tastatur.</para> - - <para>Auf die meisten Geräte wird unter &unix; Systemen über spezielle - Gerätedateien im <filename>/dev</filename> Verzeichnis - zugegriffen.</para> - - <sect2> - <title>Anlegen von Gerätedateien</title> - <para>Wenn sie ein neues Gerät zu Ihrem System hinzufügen, - oder die Unterstützung für zusätzliche Geräte - kompilieren, müssen ein oder mehrere Gerätedateien - erstellt werden.</para> - - <sect3> - <title><literal>DEVFS</literal> (Gerätedateisystem)</title> - - <para>Das Gerätedateisystem <literal>DEVFS</literal> - ermöglicht durch den - Namensraum des Dateisystems Zugriff auf den Namensraum der - Geräte im Kernel. Damit müssen Gerätedateien - nicht mehr extra angelegt werden, sondern werden von - <literal>DEVFS</literal> verwaltet.</para> - - <para>Weitere Informationen finden Sie in &man.devfs.5;.</para> - </sect3> - </sect2> - </sect1> - - <sect1 id="binary-formats"> - <title>Binärformate</title> - - <para>Um zu verstehen, warum &os; das Format - &man.elf.5; benutzt, müssen Sie - zunächst etwas über die drei gegenwärtig - <quote>dominanten</quote> ausführbaren Formate - für &unix; Systeme wissen:</para> - - <itemizedlist> - <listitem> - <para>&man.a.out.5;</para> - - <para>Das älteste und <quote>klassische</quote> - Objektformat von &unix; Systemen. Es benutzt einen kurzen, - kompakten Header mit einer magischen Nummer am Anfang, die oft - benutzt wird, um das Format zu charakterisieren - (weitere Details finden Sie unter &man.a.out.5;). Es - enthält drei geladene Segmente: .text, .data und - .bss, sowie eine Symboltabelle und eine - Stringtabelle.</para> - </listitem> - - <listitem> - <para><acronym>COFF</acronym></para> - - <para>Das Objektformat von SVR3. Der Header - enthält nun eine <quote>Sectiontable</quote>. Man kann - also mit mehr als nur den Sections .text, .data und .bss - arbeiten.</para> - </listitem> - - <listitem> - <para>&man.elf.5;</para> - - <para>Der Nachfolger von <acronym>COFF</acronym>. - Kennzeichnend sind mehrere Sections und mögliche - 32-Bit- oder 64-Bit-Werte. Ein wesentlicher Nachteil: - <acronym>ELF</acronym> wurde auch unter der Annahme - entworfen, dass es nur eine ABI (Application - Binary Interface) pro Systemarchitektur geben wird. - Tatsächlich ist diese Annahme falsch – nicht - einmal für die kommerzielle SYSV-Welt (in der es - mindestens drei ABIs gibt: SVR4, Solaris, SCO) trifft - sie zu.</para> - - <para>FreeBSD versucht, dieses Problem zu umgehen, indem - ein Werkzeug bereitgestellt wird, um ausführbare - Dateien im <acronym>ELF</acronym>-Format mit - Informationen über die ABI zu versehen, zu der - sie passen. Weitere Informationen finden Sie in der - Manualpage &man.brandelf.1;.</para> - </listitem> - </itemizedlist> - - <para>FreeBSD kommt aus dem <quote>klassischen</quote> Lager - und verwendete traditionell das Format &man.a.out.5;, eine - Technik, die bereits über viele BSD-Releases - hinweg eingesetzt und geprüft worden ist. Obwohl es - bereits seit einiger Zeit möglich war, auf einem - FreeBSD-System auch Binaries (und Kernel) im - <acronym>ELF</acronym>-Format zu erstellen und - auszuführen, widersetzte FreeBSD sich anfangs dem - <quote>Druck</quote>, auf <acronym>ELF</acronym> als - Standardformat umzusteigen. Warum? Nun, als das - Linux-Lager die schmerzhafte Umstellung auf - <acronym>ELF</acronym> durchführte, ging es nicht so - sehr darum, dem ausführbaren Format - <filename>a.out</filename> zu entkommen, als dem - unflexiblen, auf Sprungtabellen basierten Mechanismus - für <quote>Shared-Libraries</quote> der die Konstruktion von - Shared-Libraries für Hersteller und Entwickler - gleichermaßen sehr kompliziert machte. Da die - verfügbaren <acronym>ELF</acronym>-Werkzeuge eine - Lösung für das Problem mit den Shared-Libraries - anboten und ohnehin generell als <quote>ein Schritt - vorwärts</quote> angesehen wurden, wurde der Aufwand - für die Umstellung als notwendig akzeptiert und die - Umstellung wurde durchgeführt. Unter FreeBSD ist der - Mechanismus von Shared-Libraries enger an den Stil des - Shared-Library-Mechanismus von Suns &sunos; - angelehnt und von daher sehr einfach zu verwenden.</para> - - <para>Ja, aber warum gibt es so viele unterschiedliche Formate?</para> - - - <para>In alter, grauer Vorzeit gab es simple Hardware. - Diese simple Hardware unterstützte ein einfaches, - kleines System. <filename>a.out</filename> war absolut passend - für die Aufgabe, Binaries auf diesem simplen System (eine PDP-11) - darzustellen. Als &unix; von diesem simplen System portiert - wurde, wurde auch das <filename>a.out</filename>-Format beibehalten, - weil es für die frühen Portierungen auf Architekturen - wie den Motorola 68000 und VAX ausreichte.</para> - - <para>Dann dachte sich ein schlauer Hardware-Ingenieur, - dass, wenn er Software zwingen könnte, einige - Tricks anzustellen, es ihm möglich wäre, ein - paar Gatter im Design zu sparen, und seinen CPU-Kern - schneller zu machen. Obgleich es dazu gebracht wurde, mit - dieser neuen Art von Hardware (heute als <acronym>RISC</acronym> - bekannt) zu arbeiten, war <filename>a.out</filename> für - diese Hardware schlecht geeignet. Deshalb wurden viele neue - Formate entwickelt, um eine bessere Leistung auf dieser - Hardware zu erreichen, als mit dem begrenzten, simplen - <filename>a.out</filename>-Format. Dinge wie - <acronym>COFF</acronym>, <acronym>ECOFF</acronym> und - einige andere obskure wurden erdacht und ihre Grenzen - untersucht, bevor die Dinge sich in Richtung - <acronym>ELF</acronym> entwickelten.</para> - - <para>Hinzu kam, dass die Größe von - Programmen gewaltig wurde und Festplatten sowie - physikalischer Speicher immer noch relativ klein waren. - Also wurde das Konzept von Shared-Libraries geboren. Das - VM-System wurde auch immer fortgeschrittener. Obwohl bei - jedem dieser Fortschritte das - <filename>a.out</filename>-Format benutzt worden ist, - wurde sein Nutzen mit jedem neuen Merkmal mehr und mehr - gedehnt. Zusätzlich wollte man Dinge dynamisch zur - Ausführungszeit laden, oder Teile ihres Programms - nach der Initialisierung wegwerfen, um Hauptspeicher - oder Swap-Speicher zu sparen. Programmiersprachen - wurden immer fortschrittlicher und man wollte, dass - Code automatisch vor der main-Funktion aufgerufen wird. - Das <filename>a.out</filename>-Format wurde oft - überarbeitet, um alle diese Dinge zu ermöglichen - und sie funktionierten auch für einige Zeit. - <filename>a.out</filename> konnte diese Probleme nicht - ohne ein ständiges Ansteigen eines Overheads im Code - und in der Komplexität handhaben. Obwohl - <acronym>ELF</acronym> viele dieser Probleme löste, - wäre es sehr aufwändig, ein System umzustellen, das - im Grunde genommen funktionierte. Also musste - <acronym>ELF</acronym> warten, bis es aufwändiger war, bei - <filename>a.out</filename> zu bleiben, als zu - <acronym>ELF</acronym> überzugehen.</para> - - <para>Im Laufe der Zeit haben sich die Erstellungswerkzeuge, - von denen FreeBSD seine Erstellungswerkzeuge abgeleitet - hat (speziell der Assembler und der Loader), in zwei - parallele Zweige entwickelt. Im FreeBSD-Zweig wurden - Shared-Libraries hinzugefügt und einige Fehler - behoben. Das GNU-Team, das diese Programme - ursprünglich geschrieben hat, hat sie umgeschrieben - und eine simplere Unterstützung zur Erstellung von - Cross-Compilern durch beliebiges Einschalten verschiedener - Formate usw. hinzugefügt. Viele Leute wollten - Cross-Compiler für FreeBSD erstellen, aber sie hatten - kein Glück, denn FreeBSD's ältere Sourcen - für <application>as</application> und <application>ld</application> - waren hierzu nicht geeignet. Die neuen - GNU-Werkzeuge (<application>binutils</application>) unterstützen - Cross-Compilierung, <acronym>ELF</acronym>, Shared-Libraries, - C++-Erweiterungen und mehr. Weiterhin geben viele - Hersteller <acronym>ELF</acronym>-Binaries heraus und es - ist gut, wenn FreeBSD sie ausführen kann.</para> - - <para><acronym>ELF</acronym> ist ausdrucksfähiger als - <filename>a.out</filename> und gestattet eine bessere Erweiterbarkeit - des Basissystems. Die <acronym>ELF</acronym>-Werkzeuge werden - besser gewartet und bieten Unterstützung von - Cross-Compilierung, was für viele Leute wichtig ist. - <acronym>ELF</acronym> mag etwas langsamer sein, als - <filename>a.out</filename>, aber zu versuchen, das zu messen, - könnte schwierig werden. Es gibt unzählige Details, in - denen sich die beiden Formate unterscheiden, wie sie Pages - abbilden, Initialisierungscode handhaben usw. Keins davon - ist sehr wichtig, aber es sind Unterschiede. Irgendwann - wird die Unterstützung für Programme im - <filename>a.out</filename>-Format aus dem - <filename>GENERIC</filename>-Kernel entfernt werden. - Wenn es dann keinen oder kaum noch - Bedarf für die Unterstützung dieses Formates - gibt, werden die entsprechenden Routinen ganz entfernt - werden.</para> - </sect1> - - <sect1 id="basics-more-information"> - <title>Weitere Informationen</title> - - <sect2 id="basics-man"> - <title>Manualpages</title> - <indexterm><primary>Manualpages</primary></indexterm> - - <para>Die umfassendste Dokumentation rund um FreeBSD gibt es in - Form von Manualpages. Annähernd jedes Programm im System - bringt eine kurze Referenzdokumentation mit, die die - grundsätzliche Funktion und verschiedene Parameter - erklärt. Diese Dokumentationen kann man mit dem - <command>man</command> Kommando benutzen. Die Benutzung des - <command>man</command> Kommandos ist einfach:</para> - - <screen>&prompt.user; <userinput>man <replaceable>Kommando</replaceable></userinput></screen> - - <para><literal>Kommando</literal> ist der Name des Kommandos, - über das Sie etwas erfahren wollen. Um beispielsweise - mehr über das Kommando <command>ls</command> zu lernen, - geben Sie ein:</para> - - <screen>&prompt.user; <userinput>man ls</userinput></screen> - - <para>Die Online-Dokumentation ist in nummerierte Sektionen - unterteilt:</para> - - <orderedlist> - <listitem> - <para>Benutzerkommandos.</para> - </listitem> - - <listitem> - <para>Systemaufrufe und Fehlernummern.</para> - </listitem> - - <listitem> - <para>Funktionen der C Bibliothek.</para> - </listitem> - - <listitem> - <para>Gerätetreiber.</para> - </listitem> - - <listitem> - <para>Dateiformate.</para> - </listitem> - - <listitem> - <para>Spiele und andere Unterhaltung.</para> - </listitem> - - <listitem> - <para>Verschiedene Informationen.</para> - </listitem> - - <listitem> - <para>Systemverwaltung und -Kommandos.</para> - </listitem> - - <listitem> - <para>Kernel Entwickler.</para> - </listitem> - </orderedlist> - - <para>In einigen Fällen kann dasselbe Thema in mehreren - Sektionen auftauchen. Es gibt zum Beispiel ein <command>chmod</command> - Benutzerkommando und einen <function>chmod()</function> - Systemaufruf. In diesem Fall können Sie dem - <command>man</command> Kommando - sagen, aus welcher Sektion Sie die Information erhalten - möchten, indem Sie die Sektion mit angeben:</para> - - <screen>&prompt.user; <userinput>man 1 chmod</userinput></screen> - - <para>Dies wird Ihnen die Manualpage für das Benutzerkommando - <command>chmod</command> zeigen. Verweise auf eine Sektion - der Manualpages werden traditionell in Klammern - gesetzt. So bezieht sich &man.chmod.1; auf das - Benutzerkommando <command>chmod</command> und mit - &man.chmod.2; ist der Systemaufruf gemeint.</para> - - <para>Das ist nett, wenn Sie den Namen eines Kommandos wissen, - und lediglich wissen wollen, wie es zu benutzen ist. Aber was - tun Sie, wenn Sie Sich nicht an den Namen des Kommandos - erinnern können? Sie können mit <command>man</command> - nach Schlüsselbegriffen in den - Kommandobeschreibungen zu suchen, indem Sie den Parameter - <option>-k</option> benutzen:</para> - - <screen>&prompt.user; <userinput>man -k mail</userinput></screen> - - <para>Mit diesem Kommando bekommen Sie eine Liste der - Kommandos, deren Beschreibung das Schlüsselwort - <quote>mail</quote> enthält. Diese Funktionalität - erhalten Sie auch, wenn Sie das Kommando <command>apropos</command> - benutzen.</para> - - <para>Nun, Sie schauen Sich alle die geheimnisvollen Kommandos - in <filename>/usr/bin</filename> an, haben aber nicht den - blassesten Schimmer, wozu die meisten davon gut sind? Dann - rufen Sie doch das folgende Kommando auf:</para> - <screen>&prompt.user; <userinput>cd /usr/bin</userinput> -&prompt.user; <userinput>man -f *</userinput></screen> - - <para>Dasselbe erreichen Sie durch Eingabe von:</para> - - <screen>&prompt.user; <userinput>cd /usr/bin</userinput> -&prompt.user; <userinput>whatis *</userinput></screen> - - </sect2> - - <sect2 id="basics-info"> - <title>GNU Info Dateien</title> - - <para>FreeBSD enthält viele Anwendungen und Utilities - der Free Software Foundation (FSF). Zusätzlich zu den - Manualpages bringen diese Programme ausführlichere - Hypertext-Dokumente (<literal>info</literal> genannt) mit, - welche man sich mit dem Kommando <command>info</command> - ansehen kann. Wenn Sie <application>emacs</application> - installiert haben, können Sie auch dessen info-Modus - benutzen.</para> - - <para>Um das Kommando &man.info.1; zu benutzen, geben Sie - ein:</para> - - <screen>&prompt.user; <userinput>info</userinput></screen> - - <para>Eine kurze Einführung gibt es mit - <literal>h</literal>; eine Befehlsreferenz erhalten Sie durch - Eingabe von: <literal>?</literal>.</para> - </sect2> - </sect1> -</chapter> |