Index: head/de_DE.ISO8859-1/books/handbook/basics/chapter.xml
===================================================================
--- head/de_DE.ISO8859-1/books/handbook/basics/chapter.xml (revision 51673)
+++ head/de_DE.ISO8859-1/books/handbook/basics/chapter.xml (revision 51674)
@@ -1,3542 +1,3536 @@
Grundlagen des &os; BetriebssystemsÜbersichtDieses Kapitel umfasst die grundlegenden Kommandos
und Funktionsweisen des &os;-Betriebssystems. Viel von diesem
Material gilt auch für jedes andere &unix;-artige System.
Neue Benutzer von &os; sollten dieses Kapitel aufmerksam
lesen.Dieser Abschnitt behandelt die folgenden Themen:virtuelle Konsolen,Erstellung und Verwaltung von Benutzern und Gruppen in
&os;,Zugriffsrechte unter &unix; sowie Datei-Flags unter
&os;,Zugriffskontrolllisten für Dateisysteme,die Verzeichnisstruktur von &os;,Organisation von Dateisystemen unter &os;,Ein- und Abhängen von Dateisystemen,Prozesse, Dämonen und Signale,Shells und die Login-Umgebung,Texteditoren,Geräte und Gerätedateien,wie Sie in den Manualpages nach weiteren Informationen
suchen können.Virtuelle Konsolen und Terminalsvirtuelle KonsoleTerminalsKonsoleWenn das &os;-System so konfiguriert wurde, dass es ohne
eine grafische Benutzeroberfläche startet, wird das System
nach dem Start einen Anmeldeprompt ausgeben, wie in diesem
Beispiel zu sehen:FreeBSD/amd64 (pc3.example.org) (ttyv0)
login:Die erste Zeile enthält einige Informationen über das
System. amd64 zeigt an, dass auf dem
System in diesem Beispiel eine 64-Bit Version von &os;
läuft. Der Hostname ist
pc3.example.org und
ttyv0 gibt an, dass dies die
Systemkonsole ist. Die zweite Zeile zeigt den
Anmeldeprompt.Da &os; ein Mehrbenutzersystem ist, muss es die
verschiedenen Benutzer voneinander unterscheiden können. Dies
wird dadurch erreicht, dass sich jeder Benutzer zuerst am
System anmelden muss, um Zugriff auf die Programme zu
bekommen. Jeder Benutzer hat einen eindeutigen
Benutzernamen und ein persönliches
Kennwort.Um sich auf der Systemkonsole anzumelden, geben Sie den
Benutzernamen ein, der während der Systeminstallation, wie in
beschrieben,
konfiguriert wurde und drücken Sie Enter.
Geben Sie dann das zum Benutzernamen zugeordnete Passwort ein
und drücken Enter. Das Passwort wird aus
Sicherheitsgründen
nicht angezeigt.Sobald das richtige Passwort eingegeben wird, wird die
Nachricht des Tages (MOTD) gefolgt von
einer Eingabeaufforderung ausgegeben. In Abhängigkeit der
verwendeten Shell des Benutzers wird der Prompt mit dem
Zeichen #, $ oder
% dargestellt. Der Prompt zeigt an, dass
der Benutzer jetzt an der &os; Systemkonsole angemeldet ist
und nun alle verfügbaren Befehle probieren kann.Virtuelle KonsolenObwohl die Systemkonsole dazu verwendet werden kann, um
mit dem System zu interagieren, wird sich ein Benutzer in der
Regel an einer virtuellen Konsole im &os;-System anmelden.
Das liegt daran, dass die Systemmeldungen standardmäßig auf
der Systemkonsole angezeigt werden und somit die Meldungen des
Befehls oder einer Datei, die der Benutzer gerade bearbeitet,
überschrieben werden.In der Voreinstellung ist &os; so konfiguriert, dass viele
virtuelle Konsolen zur Eingabe von Befehlen zur Verfügung
stehen. Jede virtuelle Konsole verfügt über einen eigenen
Anmeldeprompt und eine Shell. Sie können ganz einfach
zwischen den virtuellen Konsolen umschalten. Dies ist
vergleichbar mit mehreren geöffneten Fenstern in einer
graphischen Umgebung.Die Tastenkombinationen
AltF1
bis
AltF8
sind in &os; zum Umschalten zwischen virtuellen Konsolen
reserviert. Verwenden Sie
AltF1
um auf die Systemkonsole (ttyv0) zu
wechseln,
AltF2
für die erste virtuelle Konsole (ttyv1,
AltF3
für die zweite virtuelle Konsole (ttyv2,
und so weiter.Beim Wechsel von einer Konsole zur nächsten wird die
Bildschirmausgabe von &os; verwaltet. Dies erzeugt die
Illusion mehrerer Bildschirme und Tastaturen, an denen
Kommandos abgesetzt werden können. Die Programme, die in
einer virtuellen Konsole gestartet werden, laufen auch dann
weiter, wenn der Benutzer auf eine andere virtuelle Konsole
wechselt.Lesen Sie &man.kbdcontrol.1;, &man.vidcontrol.1;,
&man.atkbd.4;, &man.syscons.4; sowie &man.vt.4; für eine recht
technische Beschreibung der &os;-Konsole und der
Tastatur-Treiber.In &os; wird die Anzahl der verfügbaren virtuellen
Konsolen in diesem Abschnitt von
/etc/ttys konfiguriert:# name getty type status comments
#
ttyv0 "/usr/libexec/getty Pc" xterm on secure
# Virtual terminals
ttyv1 "/usr/libexec/getty Pc" xterm on secure
ttyv2 "/usr/libexec/getty Pc" xterm on secure
ttyv3 "/usr/libexec/getty Pc" xterm on secure
ttyv4 "/usr/libexec/getty Pc" xterm on secure
ttyv5 "/usr/libexec/getty Pc" xterm on secure
ttyv6 "/usr/libexec/getty Pc" xterm on secure
ttyv7 "/usr/libexec/getty Pc" xterm on secure
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secureUm eine virtuelle Konsole zu deaktivieren, setzen Sie ein
Kommentarzeichen (# an den Anfang der Zeile
für die entsprechende Konsole. Um bspw. die Anzahl der
verfügbaren virtuellen Konsolen von acht auf vier zu
reduzieren, setzen Sie ein # an den Anfang
der letzten vier Zeilen, den virtuellen Konsolen
ttyv5 bis ttyv8.
Kommentieren Sie nicht die Zeile für die Systemkonsole
ttyv0 aus! Beachten Sie, dass die
letzte virtuelle Konsole (ttyv8) zum
Wechsel auf die graphische Oberfläche gedacht ist, wenn
&xorg; wie im installiert und
konfiguriert ist.&man.ttys.5; enthält eine ausführliche
Beschreibung der Spalten dieser Datei und der verfügbaren
Optionen für virtuelle Konsolen.Single-User-ModusDas &os; Boot-Menü verfügt über eine Option
Boot Single User. Wird diese Option
gewählt, bootet das System in einen speziellen Modus, der als
Single-User-Modus bekannt ist. Dieser Modus
wird normalerweise zur Reparatur des Systems verwendet,
bspw. wenn das System nicht mehr startet, oder das
root-Passwort
zurückgesetzt werden muss. Im Single-User-Modus haben Sie
keinen Zugriff auf das Netzwerk und es stehen Ihnen keine
weiteren virtuellen Konsolen zur Verfügung. Allerdings
haben Sie vollen Zugriff auf das System und in der
Voreinstellung wird das root-Passwort nicht
benötigt. Aus diesem Grund wird ein physischer Zugriff
auf die Tastatur benötigt, um in diesem Modus zu booten.
Zur Absicherung eines &os;-Systems sollte ermittelt werden,
welche Personen physischen Zugriff auf die Tastatur bekommen
sollen.Die Einstellungen für den Single-User-Modus befinden sich
diesem Abschnitt von /etc/ttys:# 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 secureIn der Voreinstellung ist der Status auf
secure eingestellt. Das setzt voraus, dass
der physische Zugriff auf die Tastatur entweder unwichtig ist,
oder über eine Sicherheitsrichtlinie geregelt wird. Wenn der
Status auf insecure eingestellt wird, wird
davon ausgegangen, dass die Umgebung selbst unsicher ist, da
jeder Zugriff auf die Tastatur hat. &os; wird dann nach dem
root-Passwort
fragen, wenn ein Benutzer versucht in den Single-User-Modus zu
booten.Setzen Sie insecure nicht
leichtfertig ein! Wenn das
root-Passwort
vergessen wird, wird es schwierig in den
Single-User-Modus zu gelangen, wenn man den Bootprozess von
&os; nicht genau versteht.Den Videomodus der Konsole anpassenDer Standard-Videomodus der &os;-Konsole kann auf jeden
Modus eingestellt werden, der von der Grafikkarte und dem
Monitor unterstützt wird (beispielsweise 1024x768 oder
1280x1024). Um eine andere Einstellung zu verwenden, muss
das VESA-Modul geladen werden:&prompt.root; kldload vesaUm festzustellen, welche Video-Modi von der Hardware
unterstützt werden, nutzen Sie &man.vidcontrol.1;. Um eine
Liste aller unterstützten Modi zu sehen, verwenden Sie diesen
Befehl:&prompt.root; vidcontrol -i modeDie Ausgabe dieses Befehls listet alle Videomodi, die von
der Hardware unterstützt werden. Um einen neuen Video-Modi zu
wählen, wird der entsprechende Modus als
root-Benutzer an
&man.vidcontrol.1; übergeben:&prompt.root; vidcontrol MODE_279Um diese Einstellung dauerhaft zu speichern, muss
folgende Zeile in /etc/rc.conf
hinzugefügt werden:allscreens_flags="MODE_279"Benutzer und grundlegende Account-Verwaltung&os; ermöglicht es mehreren Benutzern, den Computer zur
selben Zeit zu benutzen. Es kann immer nur ein Benutzer
vor der Konsole sitzen, aber es können sich beliebig viele
Benutzer über das Netzwerk am System anmelden. Jeder Benutzer
muss einen Account haben, um das System benutzen zu
können.Nachdem Sie dieses Kapitel gelesen haben, werden Siedie verschiedenen Account-Typen von &os; kennen,wissen, wie Sie Accounts angelegen, verändern oder
löschen,wissen, wie Sie Limits für einen Benutzer oder eine
Gruppe setzen, um beispielsweise Ressourcen, wie Speicher
oder CPU-Zeit einzuschränken,wissen, wie Sie Gruppen erstellen und Benutzer zu
diesen Gruppen hinzufügen.Account-TypenJeder Zugriff auf das &os;-System geschieht über Accounts
und alle Prozesse werden von Benutzern gestartet, also sind
Benutzer- und Account-Verwaltung von wesentlicher
Bedeutung.Es gibt drei Haupttypen von Accounts: Systembenutzer,
Benutzer-Accounts und der Superuser-Account.SystembenutzerAccountsSystem-AccountsSystembenutzer starten Dienste wie DNS, Mail-Server und
Web-Server. Der Grund dafür ist die Sicherheit; wenn die
Programme von dem Superuser gestartet werden, können Sie
ohne Einschränkungen handeln.AccountsdaemonAccountsoperatorBeispiele von Systembenutzern sind
daemon,
operator,
bind,
news und
www.Accountsnobodynobody ist der
generische unprivilegierte Systembenutzer. Bedenken Sie
aber, dass je mehr Dienste nobody benutzen, desto mehr
Dateien und Prozesse diesem Benutzer gehören und dieser
Benutzer damit umso privilegierter wird.Benutzer-AccountsAccountsBenutzer-AccountsBenutzer-Accounts sind realen Personen zugeordnet und
sind das primäre Mittel des Zugriffs das System. Jede
Person, die Zugriff auf das System bekommt, sollte einen
eindeutigen Benutzer-Account besitzen. Dies erlaubt es dem
Administrator herauszufinden, wer was macht. Gleichzeitig
werden die Benutzer daran gehindert, die Einstellungen
anderer Benutzer zu zerstören.Jeder Benutzer kann die eigene Umgebung anpassen,
bspw. seine voreingestellte Shell, Editor, Tastenbelegungen
und Spracheinstellungen.Mit jedem Account eines &os;-Systems sind bestimmte
Informationen verknüpft:LoginnamenDer Loginname wird am login:
Prompt eingegeben. Jeder Benutzer muss einen
eindeutigen Benutzernamen haben. Es gibt eine Reihe
von Regeln für die Erstellung von gültigen Loginnamen,
die in &man.passwd.5; dokumentiert sind. Es wird aus
Kompatibilitätsgründen empfohlen, Benutzernamen zu
verwenden, die aus Kleinbuchstaben bestehen und bis zu
acht Zeichen lang sind.PasswortJeder Account ist mit einem Passwort
verknüpft.User ID (UID)Die User ID (UID) ist eine
Zahl, die verwendet wird, um die Benutzer auf dem
&os;-System eindeutig zu identifizieren. Programme,
die einen Loginnamen akzeptieren, wandeln diesen
zuerst in eine UID um. Es wird
empfohlen, nur UIDs kleiner
65535 zu verwenden, da höhere Werte
Kompatibilitätsprobleme mit einigen Anwendungen
verursachen können.Group ID (GID)Die Group ID (GID) ist eine
Zahl, die verwendet wird, um die primäre Gruppe eines
Benutzers eindeutig zu identifizieren. Gruppen sind
ein Mechanismus zur Steuerung des Zugriffs auf
Ressourcen über die GID eines
Benutzers anstelle der UID. Dies
kann die Größe einiger Konfigurationsdateien
signifikant reduzieren und ermöglicht es Benutzern,
Mitglied mehreren Gruppen zu sein. Es wird empfohlen,
GIDs kleiner 65535 zu verwenden, da
höhere Werte bei einigen Anwendungen große Probleme
verursachen können.Login-KlasseLogin-Klassen erweitern das Gruppenkonzept. Sie
erhöhen die Flexibilität des Systems in der Handhabung
der verschiedenen Accounts. Login-Klassen werden
auch im
diskutiert.Gültigkeit von PasswörternIn der Voreinstellung verfallen Passwörter nicht.
Allerdings können Passwortwechsel nach einer
gewissen Zeit auf Basis einzelner Accounts erzwungen
werden.Verfallszeit eines AccountsIn der Voreinstellung verfallen unter &os; keine
Accounts. Wenn Sie Accounts einrichten, die nur für
eine bestimmte Zeit gültig sein sollen, beispielsweise
Accounts für Teilnehmer eines Praktikums, können Sie
mit &man.pw.8; die Gültigkeitsdauer des Accounts
angeben. Nachdem die angegebene Zeitspanne
verstrichen ist, kann dieser Account nicht mehr zum
Anmelden verwendet werden, obwohl alle Verzeichnisse
und Dateien, die diesem Account gehören, noch
vorhanden sind.vollständiger Benutzername&os; identifiziert einen Account eindeutig über
den Loginnamen, der aber keine Ähnlichkeit mit dem
richtigen Namen des Benutzers haben muss. Ähnlich
wie bei einem Kommentar, kann diese Information
Leerzeichen, Großbuchstaben und mehr als 8 Zeichen
enthalten.HeimatverzeichnisDas Heimatverzeichnis gibt den vollständigen Pfad
zu dem Verzeichnis an, in dem sich der Benutzer nach
erfolgreicher Anmeldung befindet. Es ist üblich, alle
Heimatverzeichnisse unter
/home/Loginname
oder
/usr/home/Loginname
anzulegen. Im Heimatverzeichnis oder in dort
angelegten Verzeichnissen werden die Dateien eines
Benutzers gespeichert.Login-ShellGrundsätzlich ist die Shell, von denen es viele
unterschiedliche gibt, eine Schnittstelle zum System.
Die bevorzugte Shell eines Benutzers kann seinem
Account zugeordnet werden.Der Superuser-AccountAccountsSuperuser (root)Der Superuser-Account, normalerweise root genannt, ist
vorkonfiguriert und erleichtert die Systemverwaltung, sollte
aber nicht für alltägliche Aufgaben wie das Verschicken und
Empfangen von Mails, Erforschen des Systems oder
Programmierung benutzt werden.Der Superuser kann, im Gegensatz zu normalen
Benutzer-Accounts, ohne Beschränkungen operieren und die
falsche Anwendung des Superuser-Accounts kann in
spektakulären Katastrophen resultieren. Benutzer-Accounts
sind nicht in der Lage, das System versehentlich zu
zerstören, deswegen wird empfohlen, normale
Benutzer-Accounts zu verwenden, solange nicht zusätzliche
Privilegien benötigt werden.Kommandos, die Sie als Superuser eingeben, sollten Sie
immer doppelt und dreifach überprüfen, da ein zusätzliches
Leerzeichen oder ein fehlender Buchstabe irreparablen
Datenverlust bedeuten kann.Es gibt mehrere Möglichkeiten Superuser-Rechte zu
bekommen. Obwohl man sich direkt als root anmelden kann, wird von
dieser Methode dringend abgeraten.Verwenden Sie stattdessen &man.su.1; um zum Superuser zu
werden. Wenn Sie noch ein - eingeben,
wird der Benutzer auch die Umgebung des Root-Benutzers
erben. Der Benutzer, der diesen Befehl ausführt muss
Mitglied der Gruppe wheel sein, oder der
Befehl schlägt fehl. Zudem muss der Benutzer das Kennwort
für den Benutzer-Account root kennen.In diesem Beispiel wird der Benutzer nur zum Superuser,
um make install auszuführen, da dieser
Befehl Superuser-Rechte erfordert. Nachdem der Befehl
ausgeführt wurde, kann der Benutzer exit
eingeben, um den Superuser-Account zu verlassen und zu den
Privilegien des Benutzer-Accounts zurückkehren.Ein Programm als Superuser installieren&prompt.user; configure
&prompt.user; make
&prompt.user; su -
Password:
&prompt.root; make install
&prompt.root; exit
&prompt.user;Das in &os; enthaltene &man.su.1; funktioniert gut für
einzelne Systeme oder in kleineren Netzwerken, mit nur einem
Administrator. Eine Alternative ist es, das Paket oder den
Port security/sudo zu installieren.
Diese Software bietet eine Protokollierung von Aktivitäten
und ermöglicht es dem Administrator zu bestimmen, welche
Benutzer welche Befehle als Superuser ausführen
dürfen.Accounts verändernAccountsverändern&os; stellt eine Vielzahl an Programmen bereit, um
Accounts zu verändern. Die gebräuchlichsten Kommandos sind in
gefolgt von einer detaillierten Beschreibung,
zusammengefasst. Weitere Informationen und
Anwendungsbeispiele finden Sie in der Manualpage des
jeweiligen Programms.
Programme zur Verwaltung von Benutzer-AccountsProgrammZusammenfassung&man.adduser.8;Das empfohlene Werkzeug, um neue Accounts zu
erstellen.&man.rmuser.8;Das empfohlene Werkzeug, um Accounts zu
löschen.&man.chpass.1;Ein flexibles Werkzeug, um Informationen in der
Account-Datenbank zu verändern.&man.passwd.1;Ein Werkzeug, um Passwörter von Accounts
zu ändern.&man.pw.8;Ein mächtiges und flexibles Werkzeug um alle
Informationen über Accounts zu ändern.
adduserAccountserstellenadduser/usr/share/skelDas empfohlene Programm zum Hinzufügen neuer Benutzer
ist &man.adduser.8;. Wenn ein neuer Benutzer
hinzugefügt wird, aktualisiert das Programm automatisch
/etc/passwd und
/etc/group. Es erstellt auch das
Heimatverzeichnis für den Benutzer, kopiert die
Standardkonfigurationsdateien aus
/usr/share/skel und kann optional
eine ,,Willkommen``-Nachricht an den neuen Benutzer
versenden. Das Programm muss als Superuser ausgeführt
werden.Das Werkzeug &man.adduser.8; arbeitet interaktiv und
führt durch die einzelnen Schritte, wenn ein neues
Benutzerkonto erstellt wird. Wie in zu sehen
ist, müssen Sie entweder die benötigte Information eingeben
oder Return drücken, um den Vorgabewert in
eckigen Klammern zu akzeptieren. In diesem Beispiel wird
der Benutzer in die Gruppe wheel aufgenommen, was es
ihm erlaubt mit &man.su.1; zum Superuser zu werden. Wenn
Sie fertig sind, können Sie entweder einen weiteren Benutzer
erstellen oder das Programm beenden.Einen Benutzer unter &os; anlegen&prompt.root; adduser
Username: jru
Full name: J. Random User
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh
Home directory [/home/jru]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : jru
Password : ****
Full Name : J. Random User
Uid : 1001
Class :
Groups : jru wheel
Home : /home/jru
Shell : /usr/local/bin/zsh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
&prompt.root;Wenn Sie das Passwort eingeben, werden weder Passwort
noch Sternchen angezeigt. Passen Sie auf, dass Sie das
Passwort korrekt eingeben.rmuserrmuserAccountslöschenBenutzen Sie &man.rmuser.8; als Superuser, um einen
Account vollständig aus dem System zu entfernen. Dieses
Programm führt die folgenden Schritte durch:Entfernt den &man.crontab.1; Eintrag des Benutzers,
wenn dieser existiert.Entfernt alle &man.at.1; jobs, die dem Benutzer
gehören.Schließt alle Prozesse des Benutzers.Entfernt den Benutzer aus der lokalen Passwort-Datei
des Systems.Entfernt optional das Heimatverzeichnis des
Benutzers, falls es dem Benutzer gehört.Entfernt eingegangene E-Mails des Benutzers
aus /var/mail.Entfernt alle Dateien des Benutzers aus temporären
Dateispeicherbereichen wie
/tmp.Entfernt den Loginnamen von allen Gruppen, zu denen
er gehört, aus /etc/group. Wenn
eine Gruppe leer wird und der Gruppenname mit dem
Loginnamen identisch ist, wird die Gruppe entfernt. Das
ergänzt sich mit den einzelnen Benutzer-Gruppen, die von
&man.adduser.8; für jeden neuen Benutzer erstellt
werden.Der Superuser-Account kann nicht mit &man.rmuser.8;
entfernt werden, da dies in den meisten Fällen das System
unbrauchbar macht.Als Vorgabe wird ein interaktiver Modus benutzt.Interaktives Löschen von Accounts mit
rmuser&prompt.root; rmuser jru
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y
Removing user (jru): mailspool home passwd.
&prompt.root;chpasschpassJeder Benutzer kann &man.chpass.1; verwenden, um die
Shell und persönliche Informationen des Benutzerkontos zu
verändern. Der Superuser kann dieses Werkzeug benutzen, um
zusätzliche Kontoinformationen für alle Benutzer zu
ändern.Werden neben dem optionalen Loginnamen keine weiteren
Optionen angegeben, zeigt &man.chpass.1; einen Editor mit
Account-Informationen an. Wenn der Benutzer den Editor
verlässt, wird die Account-Datenbank mit den neuen
Informationen aktualisiert.Dieses Programm fragt nach dem Verlassen des Editors
nach dem Passwort, es sei denn, man ist als Superuser
angemeldet.In hat der
Superuser chpass jru eingegeben. Es
werden die Felder ausgegeben, die für diesen Benutzer
geändert werden können. Wenn stattdessen jru diesen Befehl aufruft,
werden nur die letzten sechs Felder ausgegeben. Dies ist in
zu sehen.chpass als Superuser
verwenden#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:chpass als normaler Benutzer
verwenden#Changing user database information for jru.
Shell: /usr/local/bin/tcsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:Die Kommandos &man.chfn.1; und &man.chsh.1; sind nur
Verweise auf &man.chpass.1;, genauso wie &man.ypchpass.1;,
&man.ypchfn.1; und &man.ypchsh.1;. Da
NIS automatisch unterstützt wird, ist
es nicht notwendig das yp vor dem
Kommando einzugeben. NIS wird später
im besprochen.passwdpasswdAccountsPasswort wechselnJeder Benutzer kann mit &man.passwd.1; einfach sein
Passwort ändern. Um eine versehentliche oder unbefugte
Änderung zu verhindern, muss bei einem Passwortwechsel
zunächst das ursprüngliche Passwort eingegeben
werden, bevor das neue Passwort festgelegt werden
kann.Das eigene Passwort wechseln&prompt.user; passwd
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: doneDer Superuser kann jedes beliebige Passwort ändern,
indem er den Benutzernamen an &man.passwd.1; übergibt.
Das Programm fordert den Superuser nicht dazu auf, das
aktuelle Passwort des Benutzers einzugeben. Dadurch kann
das Passwort geändert werden, falls der Benutzer sein
ursprüngliches Passwort vergessen hat.Als Superuser das Passwort eines anderen Accounts
verändern&prompt.root; passwd jru
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: doneWie bei &man.chpass.1; ist &man.yppasswd.1;
nur ein Verweis auf &man.passwd.1;.
NIS wird von jedem dieser Kommandos
unterstützt.pwpwMit dem Werkzeug &man.pw.8; können Accounts und Gruppen
erstellt, entfernt, verändert und angezeigt werden. Dieses
Kommando dient als Schnittstelle zu den Benutzer- und
Gruppendateien des Systems. &man.pw.8; besitzt eine Reihe
mächtiger Kommandozeilenschalter, die es für die Benutzung
in Shell-Skripten geeignet machen, doch finden neue Benutzer
die Bedienung des Kommandos komplizierter, als die der
anderen hier vorgestellten Kommandos.GruppenGruppen/etc/groupsAccountsGruppenEine Gruppe ist einfach eine Zusammenfassung von Accounts.
Gruppen werden durch den Gruppennamen und die
GID identifiziert. Der Kernel von &os;
entscheidet anhand der UID und der
Gruppenmitgliedschaft eines Prozesses, ob er dem Prozess etwas
erlaubt oder nicht. Wenn jemand von der
GID eines Benutzers oder Prozesses spricht,
meint er damit meistens die erste Gruppe der
Gruppenliste.Die Zuordnung von Gruppennamen zur GID
steht in /etc/group, einer Textdatei mit
vier durch Doppelpunkte getrennten Feldern. Im ersten Feld
steht der Gruppenname, das zweite enthält ein verschlüsseltes
Passwort, das dritte gibt die GID an und
das vierte besteht aus einer Komma separierten Liste der
Mitglieder der Gruppe. Eine ausführliche Beschreibung der
Syntax dieser Datei finden Sie in &man.group.5;.Wenn Sie /etc/group nicht von Hand
editieren möchten, können Sie &man.pw.8; zum Editieren
benutzen. Das folgende Beispiel zeigt das Hinzufügen einer
Gruppe mit dem Namen teamtwo:Setzen der Mitgliederliste einer Gruppe mit
&man.pw.8;&prompt.root; pw groupadd teamtwo
&prompt.root; pw groupshow teamtwo
teamtwo:*:1100:1100 ist die GID der
Gruppe teamtwo.
Momentan hat teamtwo noch keine
Mitglieder. Mit dem folgenden Kommando wird der Benutzer
jru in die Gruppe
teamtwo
aufgenommen.Ein Gruppenmitglied mit &man.pw.8; hinzufügen&prompt.root; pw groupmod teamtwo -M jru
&prompt.root; pw groupshow teamtwo
teamtwo:*:1100:jruAls Argument von geben Sie eine Komma
separierte Liste von Mitgliedern an, die in die Gruppe
aufgenommen werden sollen. Aus den vorherigen Abschnitten ist
bekannt, dass die Passwort-Datei ebenfalls eine Gruppe für
jeden Benutzer enthält. Das System teilt dem Benutzer
automatisch eine Gruppe zu, die aber vom
Kommando von &man.pw.8; nicht
angezeigt wird. Diese Information wird allerdings von
&man.id.1; und ähnlichen Werkzeugen angezeigt. Das heißt,
dass &man.pw.8; nur /etc/group
manipuliert, es wird nicht versuchen, zusätzliche
Informationen aus /etc/passwd zu
lesen.Hinzufügen eines neuen Gruppenmitglieds mittels
&man.pw.8;&prompt.root; pw groupmod teamtwo -m db
&prompt.root; pw groupshow teamtwo
teamtwo:*:1100:jru,dbDie Argumente zur Option ist eine
durch Komma getrennte Liste von Benutzern, die der Gruppe
hinzugefügt werden sollen. Anders als im vorherigen Beispiel
werden diese Benutzer in die Gruppe aufgenommen und ersetzen
nicht die bestehenden Benutzer in der Gruppe.Mit id die Gruppenzugehörigkeit
bestimmen&prompt.user; id jru
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)In diesem Beispiel ist jru Mitglied von
jru und
teamtwo.Weitere Informationen zu diesem Befehl und dem Format von
/etc/group finden Sie in &man.pw.8; und
&man.group.5;.ZugriffsrechteUNIXIn &os; besitzt jede Datei und jedes Verzeichnis einen Satz
von Zugriffsrechten. Es stehen mehrere Programme zum Anzeigen
und Bearbeiten dieser Rechte zur Verfügung. Ein Verständnis für
die Funktionsweise von Zugriffsrechten ist notwendig, um
sicherzustellen, dass Benutzer nur auf die von ihnen benötigten
Dateien zugreifen können und nicht auf die Dateien des
Betriebssystems oder von anderen Benutzern.In diesem Abschnitt werden die traditionellen
Zugriffsrechte von &unix; beschrieben. Informationen
zu feingranularen Zugriffsrechten für Dateisysteme finden
Sie im .In &unix; werden die grundlegenden Zugriffsrechte in
drei Typen unterteilt: Lesen, Schreiben und Ausführen.
Diese Zugriffstypen werden verwendet, um den Dateizugriff
für den Besitzer der Datei, die Gruppe und alle anderen zu
bestimmen. Die Lese-, Schreib- und Ausführungsberechtigungen
werden mit den Buchstaben r,
w und x dargestellt.
Alternativ können die Berechtigungen als binäre Zahlen
dargestellt werden, da jede Berechtigung entweder aktiviert
oder deaktiviert (0) ist. Wenn die
Berechtigung als Zahl dargestellt wird, ist die Reihenfolge
immer als rwx zu lesen, wobei
r den Wert 4 hat,
w den Wert 2 und
x den Wert 1.In Tabelle 4.1 sind die einzelnen nummerischen und
alphabetischen Möglichkeiten zusammengefasst. Das Zeichen
- in der Spalte
Auflistung im Verzeichnis besagt, dass eine
Berechtigung deaktiviert ist.ZugriffsrechteDateizugriffsrechte
&unix; ZugriffsrechteWertZugriffsrechteAuflistung im Verzeichnis0Kein Lesen, Kein Schreiben, Kein Ausführen---1Kein Lesen, Kein Schreiben, Ausführen--x2Kein Lesen, Schreiben, Kein Ausführen-w-3Kein Lesen, Schreiben, Ausführen-wx4Lesen, Kein Schreiben, Kein Ausführenr--5Lesen, Kein Schreiben, Ausführenr-x6Lesen, Schreiben, Kein Ausführenrw-7Lesen, Schreiben, Ausführenrwx
&man.ls.1;VerzeichnisseBenutzen Sie das Argument mit
&man.ls.1;, 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 ls -l könnte
wie folgt aussehen:&prompt.user; ls -l
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.txtDas erste Zeichen (ganz links) der ersten Spalte zeigt an,
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
- eine normale Datei an. Die nächsten drei
Zeichen, dargestellt als rw-, ergeben die
Rechte für den Datei-Besitzer. Die drei Zeichen danach
r-- die Rechte der Gruppe, zu der die Datei
gehört. Die letzten drei Zeichen, r--,
geben die Rechte für den Rest der Welt an. Ein Minus
bedeutet, dass das Recht nicht gegeben ist. In diesem Beispiel
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
644, worin jede Ziffer die drei Teile der
Zugriffsrechte dieser Datei verkörpert.Wie kontrolliert das System die Rechte von Hardware-Geräten?
&os; behandelt die meisten Hardware-Geräte als Dateien, welche
Programme öffnen, lesen und mit Daten beschreiben können. Diese
speziellen Gerätedateien sind in /dev
gespeichert.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 &man.cd.1;, 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.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- und Ausführ-Rechte
gesetzt sein.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;.Symbolische ZugriffsrechteTomRhodesBeigesteuert von ZugriffsrechtesymbolischeSymbolische Zugriffsrechte verwenden Zeichen anstelle von
oktalen Werten, um die Berechtigungen für Dateien oder
Verzeichnisse festzulegen. Zugriffsrechte verwenden die
Syntax Wer,
Aktion und
Berechtigung. Die folgenden Werte
stehen zur Auswahl:OptionSymbolBedeutungWeruBenutzer
(user)WergGruppe
(group)WeroAndere
(other)WeraAlleAktion+Berechtigungen hinzufügenAktion-Berechtigungen entziehenAktion=Berechtigungen explizit setzenBerechtigungrlesen
(read)Berechtigungwschreiben
(write)Berechtigungxausführen
(execute)BerechtigungtSticky-BitBerechtigungsSet-UID oder Set-GIDDiese symbolischen Werte werden zusammen mit &man.chmod.1;
verwendet. Beispielsweise würde der folgende Befehl den Zugriff
auf FILE für alle anderen Benutzer
verbieten:&prompt.user; chmod go= FILEWenn 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 die Schreibberechtigung auf
FILE und fügt für jeden
Ausführungsrechte hinzu:&prompt.user; chmod go-w,a+x FILE&os; Datei-FlagsTomRhodesBeigetragen von Zusätzlich zu den Zugriffsrechten unterstützt &os; auch
die Nutzung von Datei-Flags. Diese erhöhen die
Sicherheit des Systems, indem sie eine verbesserte Kontrolle
von Dateien erlauben. Verzeichnisse werden allerdings nicht
unterstützt. Mit dem Einsatz von Datei-Flags kann sogar
root daran gehindert
werden, Dateien zu löschen oder zu verändern.Datei-Flags werden mit &man.chflags.1; verändert. Um
beispielsweise auf der Datei file1 das
unlöschbar-Flag zu aktivieren, geben Sie
folgenden Befehl ein:&prompt.root; chflags sunlink file1Um dieses Flag zu deaktivieren, setzen Sie ein
no vor :&prompt.root; chflags nosunlink file1Um die Flags einer Datei anzuzeigen, verwenden Sie
&man.ls.1; zusammen mit :&prompt.root; ls -lo file1-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1Einige Datei-Flags können nur vom
root-Benutzer
gesetzt oder gelöscht werden. Andere wiederum können
auch vom Eigentümer der Datei gesetzt werden. Weitere
Informationen hierzu finden sich in &man.chflags.1; und
&man.chflags.2;.Die Berechtigungen setuid,
setgid, und
stickyTomRhodesBeigetragen von Anders als die Berechtigungen, die bereits angesprochen
wurden, existieren drei weitere Einstellungen, über die alle
Administratoren Bescheid wissen sollten. Dies sind die
Berechtigungen setuid,
setgid und
sticky.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.Die reale Benutzer-ID ist die UID,
welche den Prozess besitzt oder gestartet hat. Die effektive
UID 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
root-Benutzer
ausgeführt. Das ermöglicht es normalen Benutzern, ihr
Passwort zu ändern, ohne einen
Permission Denied-Fehler angezeigt zu
bekommen.Die setuid-Berechtigung kann durch das Voranstellen bei
einer Berechtigungsgruppe mit der Nummer Vier (4) gesetzt
werden, wie im folgenden Beispiel gezeigt wird:&prompt.root; chmod 4755 suidexample.shDie Berechtigungen auf
suidexample.sh
sehen jetzt wie folgt aus:-rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.shBeachten Sie, dass ein s 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 beispielsweise
passwd.Die nosuid &man.mount.8;-Option
bewirkt, dass solche Anwendungen stillschweigend scheitern,
ohne den Anwender darüber zu informieren. Diese Option ist
nicht völlig zuverlässig, da ein
nosuid-Wrapper in der Lage wäre, dies zu
umgehen.Um dies in Echtzeit zu beobachten, öffnen Sie zwei
Terminals. Starten Sie auf einem passwd
als normaler Benutzer. Während es auf die Passworteingabe
wartet, überprüfen Sie die Prozesstabelle und sehen Sie sich
die Informationen für &man.passwd.1; an:Im Terminal A:Changing local password for trhodes
Old Password:Im Terminal B:&prompt.root; ps aux | grep passwdtrhodes 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 passwdObwohl &man.passwd.1; als normaler Benutzer ausgeführt
wird, benutzt es die effektive UID von
root.Die setgid-Berechtigung führt die
gleiche Aktion wie die setuid-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.Um die setgid-Berechtigung auf einer
Datei zu setzen, geben Sie &man.chmod.1; eine führende
Zwei (2) mit:&prompt.root; chmod 2755 sgidexample.shBeachten Sie in der folgenden Auflistung, dass das
s sich jetzt in dem Feld befindet, das für
die Berechtigungen der Gruppe bestimmt ist:-rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.shObwohl es sich bei dem in diesen Beispielen gezeigten
Shellskript um eine ausführbare Datei handelt, wird es nicht
mit einer anderen EUID oder effektiven
Benutzer-ID ausgeführt. Das ist so, weil Shellskripte
keinen Zugriff auf &man.setuid.2;-Systemaufrufe
erhalten.Die setuid und
setgid Berechtigungs-Bits können die
Systemsicherheit verringern, da sie erhöhte Rechte
ermöglichen. Das dritte Berechtigungs-Bit, das
sticky bit kann die Sicherheit eines
Systems erhöhen.Wenn das sticky bit auf einem
Verzeichnis angewendet wird, erlaubt es das Löschen von
Dateien nur durch den Besitzer der Datei. Dies ist nützlich,
um die Löschung von Dateien in öffentlichen Verzeichnissen wie
/tmp, durch Benutzer denen diese Dateien
nicht gehören, zu verhindern. Um diese Berechtigung
anzuwenden, stellen Sie der Berechtigung eine Eins (1)
voran:&prompt.root; chmod 1777 /tmpDas sticky bit kann anhand des
t ganz am Ende der Berechtigungen abgelesen
werden.&prompt.root; ls -al / | grep tmpdrwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmpVerzeichnis-StrukturenVerzeichnis HierarchienDie &os;-Verzeichnishierarchie ist die Grundlage, um ein
umfassendes Verständnis des Systems zu erlangen. Das wichtigste
Verzeichnis ist das Root-Verzeichnis /. Dieses
Verzeichnis ist das erste, das während des Bootens eingehangen
wird. Es enthält das notwendige Basissystem, um das
Betriebssystem 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.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
ausführlich beschrieben.
Standard-Mountpunkte sind /usr,
/var, /tmp,
/mnt sowie /cdrom.
Auf diese Verzeichnisse verweisen üblicherweise Einträge
in /etc/fstab. Diese Datei ist
eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten,
vom System gelesen werden. Die meisten der Dateisysteme in
/etc/fstab werden beim Booten automatisch
durch das Skript &man.rc.8; gemountet, wenn die zugehörigen
Einträge nicht mit
versehen sind. Weitere Informationen zu diesem Thema finden Sie
im .Eine vollständige Beschreibung der Dateisystem-Hierarchie
finden Sie in &man.hier.7;. Die folgende Aufstellung gibt einen
kurzen Überblick über die am häufigsten verwendeten
Verzeichnisse:VerzeichnisBeschreibung/Wurzelverzeichnis des Dateisystems./bin/Grundlegende Werkzeuge für den Single-User-Modus
sowie den Mehrbenutzerbetrieb./boot/Programme und Konfigurationsdateien, die während
des Bootens benutzt werden./boot/defaults/Vorgaben für die Boot-Konfiguration. Weitere
Details finden Sie in &man.loader.conf.5;./dev/Gerätedateien. Weitere Details finden Sie in
&man.intro.4;./etc/Konfigurationsdateien und Skripten des
Systems./etc/defaults/Vorgaben für die System Konfigurationsdateien.
Weitere Details finden Sie in &man.rc.8;./etc/mail/Konfigurationsdateien von MTAs wie
&man.sendmail.8;.
-
-
-
- /etc/namedb/
- Konfigurationsdateien von
- &man.named.8;./etc/periodic/Täglich, wöchentlich oder monatlich laufende
Skripte, die von &man.cron.8; gestartet werden.
Weitere Details finden Sie in
&man.periodic.8;./etc/ppp/Konfigurationsdateien von &man.ppp.8;./mnt/Ein leeres Verzeichnis, das von
Systemadministratoren häufig als temporärer Mountpunkt
genutzt wird./proc/Prozess Dateisystem. Weitere Details finden Sie
in &man.procfs.5; und &man.mount.procfs.8;./rescue/Statisch gelinkte Programme zur Wiederherstellung
des Systems, wie in &man.rescue.8;
beschrieben./root/Home Verzeichnis von root./sbin/Systemprogramme und administrative Werkzeuge, die
grundlegend für den Single-User-Modus und den
Mehrbenutzerbetrieb sind./tmp/Temporäre Dateien, die für gewöhnlich bei einem
Neustart des Systems verloren gehen. Häufig wird ein
speicherbasiertes Dateisystem unter
/tmp eingehängt. Dieser Vorgang
kann automatisiert werden, wenn tmpmfs-bezogene
Variablen von &man.rc.conf.5; verwendet werden, oder
ein entsprechender Eintrag in
/etc/fstab existiert. Weitere
Informationen finden Sie in &man.mdmfs.8;./usr/Der Großteil der Benutzerprogramme und
Anwendungen./usr/bin/Gebräuchliche Werkzeuge, Programmierhilfen und
Anwendungen./usr/include/Standard C include-Dateien./usr/lib/Bibliotheken./usr/libdata/Daten verschiedener Werkzeuge./usr/libexec/System-Dämonen und System-Werkzeuge, die von
anderen Programmen ausgeführt werden./usr/local/Lokale Programme und Bibliotheken. Die
Ports-Sammlung von &os; benutzt dieses Verzeichnis
als Zielverzeichnis für Anwendungen. Innerhalb von
/usr/local sollte das von
&man.hier.7; beschriebene Layout für
/usr benutzt werden. Das
man Verzeichnis wird direkt unter
/usr/local anstelle unter
/usr/local/share angelegt. Die
Dokumentation der Ports findet sich in
share/doc/port./usr/obj/Von der Architektur abhängiger Verzeichnisbaum,
der durch das Bauen von /usr/src
entsteht./usr/ports/Die &os;-Ports-Sammlung (optional)./usr/sbin/System-Dämonen und System-Werkzeuge, die von
Benutzern ausgeführt werden./usr/share/Von der Architektur unabhängige Dateien./usr/src/Quelldateien von BSD und/oder lokalen
Ergänzungen./var/Wird für mehrere Zwecke genutzt und enthält
Logdateien, temporäre Daten und Spooldateien.
Manchmal wird ein speicherbasiertes Dateisystem unter
/var
eingehängt. Dieser Vorgang kann automatisiert werden,
wenn die varmfs-bezogenen Variablen von
&man.rc.conf.5; verwendet werden, oder ein
entsprechender Eintrag in
/etc/fstab existiert. Weitere
Informationen finden Sie in &man.mdmfs.8;./var/log/Verschiedene Logdateien des Systems./var/mail/Postfächer der Benutzer./var/spool/Verschiedene Spool-Verzeichnisse der Drucker- und
Mailsysteme./var/tmp/Temporäre Dateien, die in der Regel auch bei
einem Neustart des Systems erhalten bleiben, es sei
denn, bei /var handelt es sich um
ein speicherbasiertes Dateisystem./var/yp/NIS maps.Festplatten, Slices und Partitionen&os; identifiziert Dateien anhand eines Dateinamens. In
Dateinamen wird zwischen Groß- und Kleinschreibung
unterschieden: readme.txt und
README.TXT bezeichnen daher zwei
verschiedene Dateien. &os; benutzt keine Dateiendungen, um den
Typ der Datei zu bestimmen, egal ob es sich um ein Programm, ein
Dokument oder um andere Daten handelt.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 die Ablage von
Daten erleichtert.In Dateinamen werden Verzeichnisse durch einen
Schrägstrich (/,
Slash) getrennt. Wenn z.B.
das Verzeichnis foo ein Verzeichnis
bar enthält, in dem sich die Datei
readme.txt befindet, lautet der
vollständige Name der Datei (oder der
Pfad zur Datei)
foo/bar/readme.txt. Beachten Sie, dass
sich dies von &windows; unterscheidet, wo der
\ (Backslash
für die Trennung von Datei- und Verzeichnisnamen verwendet wird.
&os; benutzt keine Laufwerkbuchstaben oder Laufwerknamen im
Pfad. Beispielsweise würde man unter &os; nicht
c:\foo\bar\readme.txt eingeben.Verzeichnisse und Dateien werden in einem Dateisystem
gespeichert. Jedes Dateisystem besitzt genau ein
Wurzelverzeichnis, das so genannte
Root-Directory. Dieses
Wurzelverzeichnis kann weitere Verzeichnisse enthalten. Ein
Dateisystem wird als Wurzeldateisystem festgelegt, und jedes
weitere Dateisystem wird unter dem Wurzeldateisystem
eingehangen. Daher scheint jedes
Verzeichnis, unabhängig von der Anzahl der Platten, auf
derselben Platte zu liegen.Betrachten wir die drei Dateisysteme A,
B und C. Jedes
Dateisystem besitzt ein eigenes Wurzelverzeichnis, das zwei
andere Verzeichnisse enthält: A1,
A2, B1,
B2, C1 und
C2.Das Wurzeldateisystem soll A sein.
&man.ls.1; zeigt darin die beiden Verzeichnisse
A1 und A2 an.
Der Verzeichnisbaum sieht wie folgt aus: /
|
+--- A1
|
`--- A2Ein Dateisystem wird in einem Verzeichnis eines anderen
Dateisystems eingehangen. Wir hängen nun das Dateisystem
B in das Verzeichnis
A1 ein. Das Wurzelverzeichnis von
B ersetzt nun das Verzeichnis
A1 und die Verzeichnisse des Dateisystems
B werden sichtbar: /
|
+--- A1
| |
| +--- B1
| |
| `--- B2
|
`--- A2Jede Datei in den Verzeichnissen
B1 oder B2 kann
über den Pfad /A1/B1 oder
/A1/B2 erreicht werden. Dateien aus dem
Verzeichnis /A1 sind jetzt verborgen.
Wenn das Dateisystem B wieder
abgehangen wird
(umount), erscheinen die
verborgenen Dateien wieder.Wenn das Dateisystem B unter dem
Verzeichnis A2
eingehangen würde, sähe der Verzeichnisbaum
so aus: /
|
+--- A1
|
`--- A2
|
+--- B1
|
`--- B2Die Dateien des Dateisystems B wären
unter den Pfaden /A2/B1 und
/A2/B2 erreichbar.Dateisysteme können übereinander eingehangen werden. Der
folgende Baum entsteht, wenn im letzten Beispiel das
Dateisystem C in das Verzeichnis
B1 des Dateisystems
B eingehangen wird: /
|
+--- A1
|
`--- A2
|
+--- B1
| |
| +--- C1
| |
| `--- C2
|
`--- B2C könnte auch im Verzeichnis
A1 eingehangen
werden: /
|
+--- A1
| |
| +--- C1
| |
| `--- C2
|
`--- A2
|
+--- B1
|
`--- B2Sie können sogar mit nur einem großen
Dateisystem auskommen. Dies hat mehrere Nachteile
und einen Vorteil.Vorteile mehrerer DateisystemeDie Dateisysteme können mit unterschiedlichen
Optionen (mount options)
eingehangen werden. Beispielsweise kann das
Wurzeldateisystem schreibgeschützt eingehangen werden,
sodass es für Benutzer nicht möglich ist, versehentlich
kritische Dateien zu editieren oder zu löschen.
Von Benutzern beschreibbare Dateisysteme
wie /home
können mit der Option nosuid
eingehangen werden, wenn sie von anderen Dateisystemen
getrennt sind. Die SUID- und
GUID-Bits verlieren auf solchen
Dateisystemen ihre Wirkung und die Sicherheit des
Systems kann dadurch erhöht werden.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.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.Vorteil eines einzelnen DateisystemsDateisysteme haben eine festgelegte Größe. 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.&os; kennt den Befehl &man.growfs.8;, mit dem man
Dateisysteme im laufenden Betrieb vergrößern kann.Dateisysteme befinden sich in Partitionen (damit sind
nicht die normalen &ms-dos;-Partitionen gemeint). Jede
Partition wird mit einem Buchstaben von a
bis h 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.&os; benutzt einen Teil der Platte für den
Swap-Bereich, um
virtuellen Speicher zur Verfügung zu
stellen. 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).Für einige Partitionen gelten besondere Konventionen:PartitionKonventionaEnthält normalerweise
das Wurzeldateisystem.bEnthält normalerweise
den Swap-Bereich.cIst 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
c-Partition benutzen. Für gewöhnlich
wird in dieser Partition kein Dateisystem
angelegt.dFrüher hatte die d-Partition
eine besondere Bedeutung. Heute ist dies nicht mehr
der Fall und die Partition d kann
wie jede andere Partition auch verwendet
werden.In &os; werden Festplatten in Slices, welche in &windows;
als Partitionen bekannt sind, aufgeteilt und von 1 bis 4
durchnummeriert. Diese werden dann in Partitionen unterteilt,
welche wiederum Dateisysteme enthalten und mit Buchstaben
benannt werden.SlicesPartitionendangerously dedicatedDie Slice-Nummern werden mit vorgestelltem
s hinter den Gerätenamen gestellt:
da0s1 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:
ada0s5 ist die erste
erweiterte Slice auf einer SATA-Platte. Diese Geräte werden
von Dateisystemen benutzt, die sich in einer kompletten Slice
befinden müssen.Slices, dangerously dedicated-Festplatten
und andere Platten enthalten Partitionen, die mit Buchstaben
von a bis h bezeichnet
werden. Der Buchstabe wird an den Gerätenamen gehangen:
da0a ist die
a-Partition des ersten
da-Laufwerks. Dieses Laufwerk ist
dangerously dedicated.
ada1s3e ist
die fünfte Partition in der dritten Slice der zweiten
SATA-Platte.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
aufgeführt.Wenn Sie eine Partition angeben, beinhaltet das den
Plattennamen, s, die Slice-Nummer und den
Buchstaben der Partition. Einige Beispiele finden Sie in
.Der Aufbau einer Festplatte wird in dargestellt.Bei der Installation von &os; legen Sie Slices auf der
Festplatte an, erstellen Partitionen für &os; innerhalb der
Slice, erstellen ein Dateisystem oder Auslagerungsbereiche und
entscheiden, welche Dateisysteme wo eingehangen werden.
Laufwerk-CodesLaufwerkstypGerätenameSATA- und
IDE-Festplattenada oder
adSCSI-Festplatten und
USB-SpeichermediendaSATA- und
IDE-CD-ROM-Laufwerkecd oder
acdSCSI-CD-ROM-LaufwerkecdDiskettenlaufwerkefdVerschiedene proprietäre
CD-ROM-Laufwerkemcd für Mitsumi
CD-ROM und scd
für Sony CD-ROMSCSI-BandlaufwerkesaIDE-BandlaufwerkeastRAID-LaufwerkeBeispiele sind aacd für
&adaptec; AdvancedRAID, mlxd für
&mylex;, amrd für AMI &megaraid;,
idad für Compaq Smart RAID,
twed für &tm.3ware; RAID.
Namen von Platten, Slices und PartitionenNameBedeutungada0s1aDie erste Partition (a)
in der ersten Slice (s1) der
ersten SATA-Festplatte
(ada0).da1s2eDie fünfte Partition (e)
der zweiten Slice (s2) auf
der zweiten SCSI-Festplatte
(da1).Aufteilung einer FestplatteDas folgende Diagramm zeigt die Sicht von &os; auf die
erste SATA-Festplatte des Systems. Die
Platte soll 250 GB groß sein und eine 80 GB große
Slice (&ms-dos;-Partitionen) sowie eine 170 GB große
Slice enthalten. Die erste Slice enthält ein &windows;
NTFS-Dateisystem
(C:), die zweite Slice enthält eine
&os;-Installation. Die &os;-Installation in diesem Beispiel
verwendet vier Datenpartitionen und einen
Auslagerungsbereich.Jede der vier Partitionen enthält ein Dateisystem. Das
Wurzeldateisystem ist die a-Partition.
In der d-Partition befindet sich
/var und in der
f-Partition befindet sich
/usr. Die
c-Partition bezieht sich auf die gesamte
Slice und wird nicht für gewöhnliche Partitionen
verwendet.Anhängen und Abhängen von DateisystemenEin Dateisystem wird am besten als ein Baum mit der
Wurzel / veranschaulicht.
/dev, /usr, und
die anderen Verzeichnisse im Rootverzeichnis sind Zweige,
die wiederum eigene Zweige wie /usr/local
haben können.Root-DateisystemEs gibt verschiedene Gründe, bestimmte dieser Verzeichnisse
auf eigenen Dateisystemen anzulegen. /var
enthält log/, spool/
sowie verschiedene andere temporäre
Dateien und kann sich daher schnell füllen. Es empfiehlt sich,
/var von / zu trennen,
da es schlecht ist, wenn das Root-Dateisystem voll
läuft.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
Network File System
oder CD-ROM-Laufwerken, befinden.Die fstab DateiDateisystemefstabWährend des Boot-Prozesses ()
werden in /etc/fstab aufgeführte
Verzeichnisse, sofern sie nicht mit der Option
versehen sind, automatisch angehangen.
Diese Datei enthält Einträge in folgendem Format:device/mount-pointfstypeoptionsdumpfreqpassnodeviceEin existierender Gerätename
wie in
beschrieben.mount-pointEin existierendes Verzeichnis, auf dem
das Dateisystem gemountet wird.fstypeDer Typ des Dateisystems,
der an &man.mount.8; weitergegeben wird. &os;s
Standarddateisystem ist ufs.optionsEntweder
für beschreibbare Dateisysteme oder
für schreibgeschützte Dateisysteme, gefolgt von
weiteren benötigten Optionen. Eine häufig verwendete
Option ist für Dateisysteme,
die während der normalen Bootsequenz nicht angehangen
werden sollen. Weitere Optionen finden sich
in &man.mount.8;.dumpfreqWird von &man.dump.8; benutzt, um bestimmen
zu können, welche Dateisysteme gesichert werden müssen.
Fehlt der Wert, wird 0
angenommen.passnoBestimmt die Reihenfolge, in der die Dateisysteme
überprüft werden sollen. Für Dateisysteme, die
übersprungen werden sollen, ist
passno auf 0 zu
setzen. Für das Root-Dateisystem, das vor allen anderen
überprüft werden muss, sollte der Wert von
passno1 betragen.
Allen anderen Dateisystemen sollten Werte größer
1 zugewiesen werden. Wenn mehrere
Dateisysteme den gleichen Wert besitzen, wird
&man.fsck.8; versuchen, diese parallel zu
überprüfen.Lesen Sie &man.fstab.5; für weitere Informationen über das
Format von /etc/fstab und dessen
Optionen.Verwendung von &man.mount.8;DateisystemeanhängenDateisysteme werden mit &man.mount.8; eingehängt. In der
grundlegenden Form wird es wie folgt benutzt:&prompt.root; mount devicemountpointDieser Befehl bietet viele Optionen, die in &man.mount.8;
beschrieben werden. Die am häufigsten verwendeten Optionen
sind:Optionen von mountHängt alle Dateisysteme aus
/etc/fstab an. Davon ausgenommen
sind Dateisysteme, die mit noauto
markiert sind, die mit der Option
ausgeschlossen wurden und Dateisysteme, die schon
angehangen sind.Führt alles bis auf den
mount-Systemaufruf aus.
Nützlich ist diese Option in Verbindung
mit . Damit wird angezeigt, was
&man.mount.8; tatsächlich versuchen
würde, um das Dateisystem anzuhängen.Erzwingt das Anhängen eines unsauberen Dateisystems
(riskant) oder die Rücknahme des Schreibzugriffs, wenn
der Status des Dateisystems von beschreibbar auf
schreibgeschützt geändert wird.Hängt das Dateisystem schreibgeschützt ein. Dies
kann auch durch Angabe von
erreicht werden.fstypeHängt das Dateisystem mit dem angegebenen Typ an,
oder hängt nur Dateisysteme mit dem angegebenen Typ
an, wenn angegeben wurde.
ufs ist das Standarddateisystem.Aktualisiert die Mountoptionen des
Dateisystems.Geschwätzig sein.Hängt das Dateisystem beschreibbar an.Die folgenden Optionen können durch eine Kommata
separierte Liste an übergeben
werden:nosuidSetUID und SetGID Bits werden auf dem Dateisystem
nicht beachtet. Dies ist eine nützliche
Sicherheitsfunktion.Verwendung von &man.umount.8;Dateisystemeabhängen&man.umount.8; hängt ein Dateisystem ab. Dieser Befehl
akzeptiert als Parameter entweder
einen Mountpoint, einen Gerätenamen,
oder .Jede Form akzeptiert , um das
Abhängen zu erzwingen, und , um
etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit
, da der Computer abstürzen kann oder es
können Daten auf dem Dateisystem beschädigt werden.Um alle Dateisysteme abzuhängen, oder nur diejenigen, die
mit gelistet werden, wird
oder benutzt.
Beachten Sie, dass das Root-Dateisystem
nicht aushängt.Prozesse und Dämonen&os; ist ein Multitasking-Betriebssystem. Jedes
Programm, das zu irgendeiner Zeit läuft wird als
Prozess bezeichnet. Jedes laufende
Kommando startet mindestens einen neuen Prozess. Dazu gibt
es eine Reihe von Systemprozessen, die von &os; ausgeführt
werden.Jeder Prozess wird durch eine eindeutige Nummer
identifiziert, die Prozess-ID
(PID) genannt wird. Prozesse haben
ebenso wie Dateien einen Besitzer und eine Gruppe, die
festlegen, welche Dateien und Geräte der Prozess benutzen kann.
Die meisten Prozesse haben auch einen Elternprozess, der sie
gestartet hat. Beispielsweise ist die Shell ein Prozess. Jedes
in Shell gestartete Kommando ist dann ein neuer Prozess, der die
Shell als Elternprozess besitzt. Die Ausnahme hiervon ist ein
spezieller Prozess namens &man.init.8;, der beim booten immer
als erstes gestartet wird und der immer die
PID 1 hat.Manche Programme erwarten keine Eingaben vom Benutzer und
lösen sich bei erster Gelegenheit von ihrem Terminal. Ein
Webserver zum Beispiel antwortet auf Web-Anfragen und nicht auf
Benutzereingaben. Mail-Server sind ein weiteres Beispiel für
diesen Typ von Anwendungen. Diese Programme sind als
Dämonen bekannt. Der Begriff Dämon
stammt aus der griechischen Mythologie und bezeichnet ein Wesen,
das weder gut noch böse ist und welches unsichtbar nützliche
Aufgaben verrichtet. Deshalb ist das BSD Maskottchen dieser
fröhlich aussehende Dämon mit Turnschuhen und Dreizack.Programme, die als Dämon laufen, werden entsprechend einer
Konvention mit einem d am Ende benannt.
BIND steht beispielsweise für
Berkeley Internet Name Domain, das tatsächlich laufende Programm
heißt aber named. Der
Apache Webserver wird
httpd genannt und der Druckerspool-Dämon
heißt &man.lpd.8;. Dies ist allerdings nur eine Konvention.
Der Dämon der Anwendung Sendmail
heißt beispielsweise sendmail und nicht
maild.Prozesse beobachtenUm die Prozesse auf dem System zu sehen, benutzen Sie
&man.ps.1; und &man.top.1;. Eine statische Liste der
laufenden Prozesse, deren PIDs,
Speicherverbrauch und die Kommandozeile, mit der sie gestartet
wurden, erhalten Sie mit &man.ps.1;. Um alle laufenden
Prozesse in einer Anzeige zu sehen, die alle paar Sekunden
aktualisiert wird, so dass Sie interaktiv sehen können was der
Computer macht, benutzen Sie &man.top.1;.In der Voreinstellung zeigt &man.ps.1; nur die laufenden
Prozesse, die dem Benutzer gehören. Zum Beispiel:&prompt.user; ps
PID TT STAT TIME COMMAND
8203 0 Ss 0:00.59 /bin/csh
8895 0 R+ 0:00.00 psDie Ausgabe von &man.ps.1; ist in einer Anzahl von Spalten
organisiert. Die PID Spalte zeigt die
Prozess-ID. PIDs werden von 1 beginnend
bis 99999 zugewiesen und fangen wieder von vorne an. Ist eine
PID bereits vergeben, wird diese allerdings
nicht erneut vergeben. Die Spalte TT zeigt
den Terminal, auf dem das Programm läuft.
STAT zeigt den Status des Programms und
TIME 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
COMMAND findet sich schließlich die
Kommandozeile, mit der das Programm gestartet wurde.&man.ps.1; besitzt viele Optionen, um die angezeigten
Informationen zu beeinflussen. Eine nützliche Kombination ist
auxww. zeigt
Information über alle laufenden Prozesse aller Benutzer. Der
Name des Besitzers des Prozesses, sowie Informationen
über den Speicherverbrauch werden mit
angezeigt. zeigt auch Dämonen-Prozesse an,
und veranlasst &man.ps.1; die komplette
Kommandozeile für jeden Befehl anzuzeigen, anstatt sie
abzuschneiden, wenn sie zu lang für die Bildschirmausgabe
wird.Die Ausgabe von &man.top.1; sieht in etwa so aus:&prompt.user; top
last pid: 9609; load averages: 0.56, 0.45, 0.36 up 0+00:20:03 10:21:46
107 processes: 2 running, 104 sleeping, 1 zombie
CPU: 6.2% user, 0.1% nice, 8.2% system, 0.4% interrupt, 85.1% idle
Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free
ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other
Swap: 2048M Total, 2048M Free
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
557 root 1 -21 r31 136M 42296K select 0 2:20 9.96% Xorg
8198 dru 2 52 0 449M 82736K select 3 0:08 5.96% kdeinit4
8311 dru 27 30 0 1150M 187M uwait 1 1:37 0.98% firefox
431 root 1 20 0 14268K 1728K select 0 0:06 0.98% moused
9551 dru 1 21 0 16600K 2660K CPU3 3 0:01 0.98% top
2357 dru 4 37 0 718M 141M select 0 0:21 0.00% kdeinit4
8705 dru 4 35 0 480M 98M select 2 0:20 0.00% kdeinit4
8076 dru 6 20 0 552M 113M uwait 0 0:12 0.00% soffice.bin
2623 root 1 30 10 12088K 1636K select 3 0:09 0.00% powerd
2338 dru 1 20 0 440M 84532K select 1 0:06 0.00% kwin
1427 dru 5 22 0 605M 86412K select 1 0:05 0.00% kdeinit4Die Ausgabe ist in zwei Abschnitte geteilt. In den ersten
fünf Kopfzeilen finden sich die zuletzt zugeteilte
PID, die Systemauslastung
(engl. load average), die
Systemlaufzeit (die Zeit seit dem letzten Reboot) und die
momentane Zeit. Die weiteren Zahlen im Kopf beschreiben wie
viele Prozesse momentan laufen, wie viel
Speicher und Swap verbraucht wurde und wie viel Zeit das
System in den verschiedenen CPU-Modi verbringt. Wenn das
ZFS-Kernelmodul geladen ist, dann zeigt
die Zeile ARC, wie
viele Daten aus dem Cache gelesen wurden.Darunter befinden sich einige Spalten mit ähnlichen
Informationen wie in der Ausgabe von &man.ps.1;,
beispielsweise die PID, den Besitzer, die
verbrauchte CPU-Zeit und das Kommando, das den Prozess
gestartet hat. &man.top.1; zeigt in zwei Spalten den
Speicherverbrauch des Prozesses an. Die erste Spalte gibt
den gesamten Speicherverbrauch des Prozesses an, in der
zweiten Spalte wird der aktuelle Verbrauch angegeben.Die Anzeige wird von &man.top.1; automatisch alle zwei
Sekunden aktualisiert. Ein anderer Intervall kann mit
spezifiziert werden.Stoppen von ProzessenEine Möglichkeit mit einem laufenden
Prozess zu kommunizieren, ist über das Versenden von
Signalen mittels &man.kill.1;. Es gibt
eine Reihe von verschiedenen Signalen. Manche haben eine
feste Bedeutung, während andere in der Dokumentation der
Anwendung beschrieben sind. Ein Benutzer kann ein Signal nur
an einen Prozess senden, welcher ihm gehört. Wird versucht
ein Signal an einen Prozess eines anderen Benutzers zu senden,
resultiert dies in einem Zugriffsfehler mangels fehlender
Berechtigungen. Die Ausnahme ist der root-Benutzer, welcher jedem
Prozess Signale senden kann.&os; kann auch ein Signal an einen Prozess senden. Wenn
eine Anwendung schlecht geschrieben ist und auf Speicher
zugreift, auf den sie nicht zugreifen soll, so sendet &os; dem
Prozess das Segmentation Violation
Signal (SIGSEGV). Wenn eine Anwendung
programmiert wurde, den &man.alarm.3; Systemaufruf zu
benutzen, um nach einiger Zeit benachrichtigt zu werden,
bekommt sie das Alarm-Signal
(SIGALRM) gesendet.Zwei Signale können benutzt werden, um einen Prozess zu
stoppen: SIGTERM und
SIGKILL. SIGTERM
fordert den Prozess höflich zum Beenden auf. Der Prozess kann
das Signal abfangen und hat dann Gelegenheit Logdateien zu
schließen und die Aktion, die er durchführte, abzuschließen.
In manchen Situationen kann der Prozess
SIGTERM ignorieren, wenn er eine Aktion
durchführt, die nicht unterbrochen werden darf.SIGKILL kann von keinem Prozess
ignoriert werden. Wird einem Prozess
SIGKILL geschickt, dann wird &os; diesen
sofort beendenEs gibt Fälle, in denen ein Prozess nicht unterbrochen
werden kann. Wenn ein Prozess zum Beispiel eine Datei von
einem anderen Rechner auf dem Netzwerk liest und dieser
Rechner nicht erreichbar ist, dann ist der Prozess nicht
zu unterbrechen. Wenn der Prozess den Lesezugriff nach
einem Timeout von typischerweise zwei Minuten aufgibt,
dann wird er beendet..Andere häufig verwendete Signale sind
SIGHUP, SIGUSR1 und
SIGUSR2. Da diese Signale für allgemeine
Zwecke vorgesehen sind, werden verschiedene Anwendungen
unterschiedlich auf diese Signale reagieren.Ändern Sie beispielsweise die Konfiguration eines
Webservers, so muss dieser angewiesen werden, seine
Konfiguration neu zu lesen. Ein Neustart von
httpd würde dazu führen, dass der Server
für kurze Zeit nicht erreichbar ist. Senden Sie dem Dämon
stattdessen das SIGHUP-Signal. Es sei
erwähnt, dass verschiedene Dämonen sich anders verhalten.
Lesen Sie die Dokumentation des entsprechenden Dämonen um zu
überprüfen, ob der Dämon bei einem SIGHUP
die gewünschten Ergebnisse erzielt.Verschicken von SignalenDas folgende Beispiel zeigt, wie Sie &man.inetd.8; ein
Signal schicken. Die Konfigurationsdatei von
&man.inetd.8; ist /etc/inetd.conf.
Diese Konfigurationsdatei liest &man.inetd.8; ein,
wenn er SIGHUP empfängt.Suchen Sie mit &man.pgrep.1; die
PID des Prozesses, dem Sie ein Signal
schicken wollen. In diesem Beispiel ist die
PID von &man.inetd.8; 198:&prompt.user; pgrep -l inetd
198 inetd -wWBenutzen Sie &man.kill.1;, um ein Signal zu senden.
Da &man.inetd.8; dem Benutzer root gehört, müssen
Sie zuerst mit &man.su.1;
root
werden:&prompt.user; suPassword:
&prompt.root; /bin/kill -s HUP 198&man.kill.1; wird, wie andere &unix; Kommandos auch,
keine Ausgabe erzeugen, wenn das Kommando erfolgreich war.
Wird versucht, einem Prozess der nicht dem Benutzer
gehört, ein Signal zu senden, dann wird die Meldung
kill: PID: Operation
not permitted ausgegeben. Ein Tippfehler
bei der Eingabe der PID führt dazu,
dass das Signal an einen falschen Prozess gesendet wird,
was zu negativen Ergebnissen führen kann, oder das Signal
wird an eine PID gesendet die derzeit
nicht in Gebrauch ist, was zu dem Fehler
kill: PID: No such
process führt.Warum sollte man /bin/kill
benutzen?Viele Shells stellen kill als
internes Kommando zur Verfügung, das heißt die Shell
sendet das Signal direkt, anstatt
/bin/kill zu starten. Beachten
Sie, dass die unterschiedlichen Shells eine andere
Syntax benutzen, um die Namen der Signale anzugeben.
Anstatt jede Syntax zu lernen, kann es einfacher sein,
/bin/kill direkt aufzurufen.Beim Versenden von anderen Signalen, ersetzen Sie
TERM oder KILL in der
Kommandozeile mit dem Namen des Signals.Das zufällige Beenden eines Prozesses kann gravierende
Auswirkungen haben. Insbesondere &man.init.8;, mit der
PID 1, ist ein Spezialfall.
/bin/kill -s KILL 1 ist ein schneller,
jedoch nicht empfohlener Weg, das System herunterzufahren.
Überprüfen Sie die Argumente von &man.kill.1;
immer zweimal
bevor Sie Return
drücken.ShellsShellsKommandozeileEine Shell stellt eine
Kommandozeilen-Schnittstelle zur Interaktion mit dem
Betriebssystem zur Verfügung. Sie empfängt Befehle von einem
Eingabekanal und führt diese aus. Viele Shells bieten
eingebaute Funktionen, die die tägliche Arbeit erleichtern,
beispielsweise eine Dateiverwaltung, die Vervollständigung von
Dateinamen (Globbing), Kommandozeilen-Editor, sowie Makros und
Umgebungsvariablen. &os; enthält einige Shells, darunter die
Bourne Shell (&man.sh.1;) und die verbesserte C-Shell
(&man.tcsh.1;). Weitere Shells, wie zsh oder
bash, befinden sich in der
Ports-Sammlung.Die verwendete Shell ist letztlich eine Frage des
Geschmacks. Ein C-Programmierer, findet vielleicht eine
C-artige Shell wie &man.tcsh.1; angenehmer. Ein
&linux;-Benutzer bevorzugt vielleicht bash.
Jede Shell hat ihre speziellen Eigenschaften, die mit der
bevorzugten Arbeitsumgebung des Benutzers harmonieren kann oder
nicht. Deshalb stehen mehrere Shells zur Auswahl.Ein verbreitetes Merkmal in Shells ist die
Dateinamen-Vervollständigung. Nachdem der Benutzer einige
Buchstaben eines Kommandos oder eines Dateinamen eingeben hat,
vervollständigt die Shell den Rest durch
drücken der Tab-Taste. Angenommen, Sie
haben zwei Dateien foobar und
football. Um foobar
zu löschen, kann der Benutzer rm foo eingeben
und Tab drücken um den Dateinamen zu
vervollständigen.Die Shell wird lediglich rm foo anzeigen.
Sie konnte den Dateinamen nicht vervollständigen, da sowohl
foobar als auch
football mit foo
anfangen. Einige Shells geben einen Signalton aus, oder zeigen
alle Möglichkeiten an, wenn mehr als ein Name mit dem gegebenen
Muster übereinstimmt. Der Benutzer muss dann
weitere Zeichen eingeben, damit die Shell den gewünschten
Dateinamen bestimmen kann. Durch Eingabe von
t und erneutes Drücken von
Tab ist die Shell in der Lage, den gewünschten
Dateinamen zu vervollständigen.UmgebungsvariablenEin 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. zeigt verbreitete
Umgebungsvariablen und deren Bedeutung. Beachten Sie, dass die
Namen der Umgebungsvariablen immer in Großbuchstaben geschrieben
sind:
Gebräuchliche UmgebungsvariablenVariableBeschreibungUSERName des angemeldeten Benutzers.PATHListe mit Verzeichnissen (getrennt durch
Doppelpunkt) zum Suchen nach Programmen.DISPLAYDer Name des
Xorg-Bildschirms, auf dem
Ausgaben erfolgen sollen.SHELLDie aktuelle Shell.TERMName des Terminaltyps des Benutzers. Benutzt, um
die Fähigkeiten des Terminals zu bestimmen.TERMCAPDatenbankeintrag der Terminal Escape Codes,
benötigt um verschieden Terminalfunktionen
auszuführen.OSTYPETyp des Betriebssystems.MACHTYPEDie CPU-Architektur des Systems.EDITORVom Benutzer bevorzugter Text-Editor.PAGERVom Benutzer bevorzugter Text-Betrachter.MANPATHListe mit Verzeichnissen (getrennt durch
Doppelpunkt) zum Suchen nach Manualpages.
ShellsBourne ShellDas Setzen von Umgebungsvariablen unterscheidet sich
von Shell zu Shell. In &man.tcsh.1; und &man.csh.1; wird dazu
setenv benutzt. &man.sh.1; und
bash benutzen export um
Umgebungsvariablen zu setzen. Dieses Beispiel für die
&man.tcsh.1;-Shell setzt die Variable EDITOR auf
/usr/local/bin/emacs:&prompt.user; setenv EDITOR /usr/local/bin/emacsDer entsprechende Befehl für bash
wäre:&prompt.user; export EDITOR="/usr/local/bin/emacs"Um eine Umgebungsvariable zu expandieren, geben Sie in der
Kommandozeile das Zeichen $ vor dessen Namen
ein. Zum Beispiel gibt echo $TERM den
aktuellen Wert von$TERM aus.Shells behandeln Spezialzeichen, so genannte Metazeichen,
als besondere Darstellungen für Daten. Das häufigste Zeichen
ist *, das eine beliebige Anzahl Zeichen in
einem Dateinamen repräsentiert. Metazeichen können zur
Vervollständigung von Dateinamen (Globbing) benutzt werden.
Beispielsweise liefert echo * nahezu das
gleiche wie ls, da die Shell alle Dateinamen
die mit * übereinstimmen, an
echo weitergibt.Um zu verhindern, dass die Shell ein Sonderzeichen
interpretiert, schützt man es, indem man einen
Backslash (\) voranstellt. Zum Beispiel
zeigt echo $TERM die Einstellung des
Terminals an, wohingegen echo \$TERM einfach
die Zeichenfolge $TERM ausgibt.Ändern der ShellDer einfachste Weg die Standard Shell zu ändern, ist
chsh zu benutzen.
chsh startet den Editor, welcher durch
die Umgebungsvariable EDITOR gesetzt ist.
Standardmäßig ist dies &man.vi.1;. Tragen Sie in die Zeile
die mit Shell: beginnt, den absoluten Pfad
der neuen Shell ein.Alternativ setzt chsh -s die Shell,
ohne dabei einen Editor aufzurufen. Um die Shell zum Beispiel
auf bash zu ändern, geben Sie folgenden
Befehl ein:&prompt.user; chsh -s /usr/local/bin/bashDie neue Shell muss in
/etc/shells aufgeführt sein. Wurde die
Shell aus der &os; Ports-Sammlung installiert, so wie in
beschrieben, sollte sie automatisch
zu dieser Datei hinzugefügt worden sein. Wenn der Eintrag
fehlt, nutzen Sie folgenden Befehl, und ersetzen Sie den
Pfad mit dem Pfad zur gewünschten Shell:&prompt.root; echo /usr/local/bin/bash >> /etc/shellsDanach kann &man.chsh.1; erneut aufgerufen
werden.Fortgeschrittene Shell TechnikenTomRhodesGeschrieben von Die &unix;-Shell ist nicht nur ein
Kommandozeileninterpreter, sie ist ein leistungsfähiges
Werkzeug, das Benutzern die Ausführung von Befehlen
ermöglicht. Es kann die Ein- und Ausgabe umleiten und Befehle
miteinander verketten, um die finale Ausgabe zu verbessern.
Diese Funktionalität, gepaart mit den eingebauten Befehlen,
bietet dem Benutzer eine Umgebung, welche die Effizienz
erheblich steigern kann.Als Redirection bezeichnet
man die Umleitung der Ein- oder Ausgabe in einen anderen
Befehl oder Datei. Um beispielsweise die Ausgabe des Befehls
&man.ls.1; in eine Datei zu schreiben, muss die Ausgabe
umgeleitet werden:&prompt.user; ls > Verzeichnis_Ausgabe.txtDie Datei Verzeichnis_Ausgabe.txt
enthält nun den Verzeichnisinhalt. Einige Befehle, wie
beispielsweise &man.sort.1;, können verwendet werden um von
der Eingabe zu lesen. Wenn Sie die Ausgabe sortieren möchten,
müssen Sie die Eingabe umleiten:&prompt.user; sort < Verzeichnis_Ausgabe.txtDie Eingabe wird sortiert und auf dem Bildschirm
ausgegeben. Um diese Ausgabe wiederum in eine Datei
umzuleiten, kann die Ausgabe von &man.sort.1;
umgeleitet werden:&prompt.user; sort < Verzeichnis_Ausgabe.txt > Sortierte_Ausgabe.txtIn den bisherigen Beispielen wurden für die Umleitung
Dateideskriptoren verwendet. Jedes &unix;-System verfügt über
drei Dateideskriptoren: Standardeingabe (stdin),
Standardausgabe (stdout) und Stardardfehlerausgabe (stderr).
Jeder Deskriptor hat einen bestimmten Zweck. Die Eingabe
könnte von einer Tastatur, einer Maus oder einem anderen
Eingabegerät stammen. Die Ausgabe könnte der Bildschirm oder
ein Drucker sein. Die Standardfehlerausgabe wird zur Diagnose
und für Fehlermeldungen verwendet. Alle drei Deskriptoren
arbeiten I/O basiert und werden häufig als
Streams bezeichnet.Die Verwendung von Deskriptoren erlaubt es der Shell, die
Ein- und Ausgabe von verschiedenen Kommandos umzuleiten und
zu teilen. Eine weitere Möglichkeit zur Umleitung bietet der
Pipe-Operator.Der &unix; Pipe-Operator | wird verwendet,
um die Ausgabe eines Kommandos an ein anderes Programm zu
übergeben. Grundsätzlich bedeutet dies, dass die
Standardausgabe eines Programms als Standardeingabe für ein
weiteres Programm verwendet wird. Ein Beispiel:&prompt.user; cat Verzeichnis_Auflistung.txt | sort | lessIn diesem Beispiel wird der Inhalt von
Verzeichnis_Auflistung.txt sortiert und
die Ausgabe an &man.less.1; übergeben. Dies erlaubt es dem
Benutzer, die Ausgabe Schritt für Schritt und im eigenen Tempo
zu betrachten.Text-EditorenText EditorenEditorenDie meiste Konfiguration unter &os; wird durch
das Editieren von Textdateien erledigt. Deshalb ist es eine
gute Idee, mit einem Texteditor vertraut zu werden. &os; hat
ein paar davon im Basissystem und sehr viel mehr in der
Ports-Sammlung.&man.ee.1;Text EditoreneeEin einfach zu erlernender Editor ist &man.ee.1;, was für
easy editor steht. Um diesen
Editor zu starten, gibt man in der Kommandozeile ee
filename ein, wobei
filename den Namen der zu
editierenden Datei darstellt. Einmal im Editor, finden sich
alle Editor-Funktionen oben im Display aufgelistet. Das
Einschaltungszeichen (^) steht für die
Ctrl (oder Strg) Taste, mit
^e ist also die Tastenkombination
Ctrle
gemeint. Um &man.ee.1; zu verlassen, drücken Sie
Esc und wählen dann im Hauptmenü aus. Der Editor fragt nach, ob Sie speichern
möchten, wenn die Datei verändert wurde.viText Editorenemacs&os; verfügt über leistungsfähigere Editoren wie &man.vi.1;
als Teil des Basissystems. Andere Editoren wie
editors/emacs und
editors/vim sind Teil der Ports-Sammlung.
Diese Editoren bieten höhere Funktionalität, jedoch auf Kosten
einer etwas schwierigeren Erlernbarkeit. Das Erlernen eines
leistungsfähigeren Editors, wie vim
oder Emacs, kann auf lange Sicht Zeit
einsparen.Viele Anwendungen, die Dateien verändern oder Texteingabe
erwarten, werden automatisch einen Texteditor öffnen. Um den
Standardeditor zu ändern, wird die Umgebungsvariable
EDITOR gesetzt, wie im Abschnitt
beschrieben.Geräte und GerätedateienDer 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 &os; angezeigt
werden, beziehen sich auf gefundene Geräte. Eine Kopie dieser
Bootmeldungen wird in /var/run/dmesg.boot
gespeichert.Jedes Gerät verfügt über einen Gerätenamen und Gerätenummer.
Zum Beispiel steht ada0 für die erste
SATA Festplatte, während kbd0 die
Tastatur repräsentiert.Auf die meisten Geräte wird unter &os; über spezielle
Gerätedateien im /dev Verzeichnis
zugegriffen.ManualpagesManualpagesManualpagesDie umfassendste Dokumentation rund um &os; 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 Manuals können mit man
eingesehen werden:&prompt.user; man KommandoKommando ist der Name des
Kommandos, über das man etwas erfahren will. Um
beispielsweise mehr über das Kommando &man.ls.1; zu
erfahren, geben Sie ein:&prompt.user; man lsDie Manualpages sind in nummerierte Sektionen
unterteilt, die jeweils ein Thema darstellen. In &os; sind
die folgenden Sektionen verfügbar:Benutzerkommandos.Systemaufrufe und Fehlernummern.Funktionen der C Bibliothek.Gerätetreiber.Dateiformate.Spiele und andere Unterhaltung.Verschiedene Informationen.Systemverwaltung und -Kommandos.Kernel Schnittstellen.In einigen Fällen kann dasselbe Thema in mehreren
Sektionen auftauchen. Es gibt zum Beispiel ein
chmod Benutzerkommando und einen
chmod() Systemaufruf. Um &man.man.1;
mitzuteilen, aus welcher Sektion die Information angezeigt
werden soll, kann die Sektionsnummer mit angeben
werden:&prompt.user; man 1 chmodDies wird Ihnen die Manualpage für das Benutzerkommando
&man.chmod.1; zeigen. Verweise auf eine Sektion der
Manualpages werden traditionell in Klammern gesetzt. So
bezieht sich &man.chmod.1; auf das Benutzerkommando und
&man.chmod.2; auf den Systemaufruf.Wenn das Kommando nicht bekannt ist, kann
man -k benutzt werden, um nach
Schlüsselbegriffen in den Kommandobeschreibungen zu
suchen:&prompt.user; man -k mailDieser Befehl zeigt eine Liste von Kommandos, deren
Beschreibung das Schlüsselwort mail enthält.
Die gleiche Funktionalität erhalten Sie auch, wenn Sie
&man.apropos.1; benutzen.Um die Beschreibungen der Kommandos in
/usr/bin zu lesen, geben Sie ein:&prompt.user; cd /usr/bin
&prompt.user; man -f * | moreDasselbe erreichen Sie durch Eingabe von:&prompt.user; cd /usr/bin
&prompt.user; whatis * | moreGNU Info DateienFree Software Foundation&os; enthält verschiedene Anwendungen und Utilities der
Free Software Foundation (FSF). Zusätzlich zu den Manualpages
können diese Programme Hypertext-Dokumente enthalten, die
info-Seiten genannt werden. Diese
Dokumente können mit &man.info.1; ansehen kann. Wenn
editors/emacs installiert ist, kann auch
der info-Modus von emacs benutzt
werden.Um &man.info.1; zu benutzen, geben Sie ein:&prompt.user; infoEine kurze Einführung gibt es mit
h; eine Befehlsreferenz erhalten Sie durch
Eingabe von: ?.
Index: head/de_DE.ISO8859-1/books/handbook/config/chapter.xml
===================================================================
--- head/de_DE.ISO8859-1/books/handbook/config/chapter.xml (revision 51673)
+++ head/de_DE.ISO8859-1/books/handbook/config/chapter.xml (revision 51674)
@@ -1,3839 +1,3831 @@
Konfiguration und TuningChernLeeGeschrieben von MikeSmithNach einem Tutorium von MattDillonBasiert ebenfalls auf tuning(7) von MartinHeinenÜbersetzt von ÜbersichtSystem-KonfigurationSystem-OptimierungDie richtige Systemkonfiguration ist einer der wichtigsten
Aspekte unter &os;. Dieses Kapitel beschreibt die
Konfiguration von &os; sowie Maßnahmen zur Leistungssteigerung
von &os;-Systemen.Nachdem Sie dieses Kapitel durchgearbeitet haben,
werden Sie Folgendes wissen:Die Grundlagen der Konfiguration von
rc.conf und die Skripte zum Starten
von Anwendungen in
/usr/local/etc/rc.d.Wie Sie Netzwerkkarten konfigurieren und testen.Wie Sie virtuelle Hosts und Netzwerkgeräte
konfigurieren.Wie Sie die verschiedenen Konfigurationsdateien
in /etc benutzen.Wie Sie mit &os; mit &man.sysctl.8;-Variablen
einstellen können.Wie Sie die Platten-Performance einstellen und
Kernel-Parameter modifizieren können.Bevor Sie dieses Kapitel lesen, sollten Siedie Grundlagen von &unix; und
&os; () verstehen.Damit vertraut sein, wie Sie einen Kernel konfigurieren
und kompilieren ().Start von DienstenTomRhodesBeigetragen von DiensteViele Benutzer installieren Software Dritter auf &os;
mithilfe der Ports-Sammlung. Häufig soll die
Software bei einem Systemstart mitgestartet werden.
Beispielsweise sollen die Dienste
mail/postfix oder
www/apache22 nach
einem Systemstart laufen. Dieser Abschnitt stellt
die Startprozeduren für Software Dritter vor.Unter &os; werden die meisten der im System enthaltenen
Dienste wie &man.cron.8; mithilfe von Systemskripten
gestartet.Dienste über das rc.d-System
startenMit rc.d lässt sich der Start
von Anwendungen besser steuern und es sind mehr Funktionen
verfügbar. Mit den in
besprochenen Schlüsselwörtern können
Anwendungen in einer bestimmten Reihenfolge gestartet werden
und Optionen können in rc.conf statt fest
im Startskript der Anwendung festgelegt werden. Ein einfaches
Startskript sieht wie folgt aus:#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# KEYWORD: shutdown
. /etc/rc.subr
name=utility
rcvar=utility_enable
command="/usr/local/sbin/utility"
load_rc_config $name
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
utility_enable=${utility_enable-"NO"}
pidfile=${utility_pidfile-"/var/run/utility.pid"}
run_rc_command "$1"Dieses Skript stellt sicher, dass
utility nach den
DAEMON-Pseudodiensten gestartet wird.
Es stellt auch eine Methode bereit, die
Prozess-ID (PID)
der Anwendung in einer Datei zu speichern.In /etc/rc.conf könnte für diese
Anwendung die folgende Zeile stehen:utility_enable="YES"Die Methode erleichtert den Umgang mit
Kommandozeilenargumenten, bindet Funktionen aus
/etc/rc.subr ein, ist kompatibel
zu &man.rcorder.8; und lässt sich über
rc.conf leichter konfigurieren.Andere Arten, um Dienste zu startenAndere Dienste können über &man.inetd.8; gestartet werden.
Die Konfiguration von &man.inetd.8; wird in ausführlich beschrieben.Systemdienste können auch mit &man.cron.8; gestartet
werden. Dieser Ansatz hat einige Vorteile; nicht zuletzt,
weil &man.cron.8; die Prozesse unter dem Eigentümer der
crontab startet, ist es möglich, dass
Dienste von normalen Benutzern gestartet und gepflegt werden
können.Für die Zeitangabe in &man.cron.8; kann
@reboot eingesetzt werden. Damit wird das
Kommando gestartet, wenn &man.cron.8; kurz nach dem Systemboot
gestartet wird.&man.cron.8; konfigurierenTomRhodesBeigetragen von cronkonfigurierenEin sehr nützliches Werkzeug von &os; ist
cron. Dieses Programm läuft im
Hintergrund und überprüft fortlaufend
/etc/crontab und
/var/cron/tabs. In diesen Dateien wird
festgelegt, welche Programme zu welchem Zeitpunkt von
cron ausgeführt werden sollen.
Jede Zeile in diesen Dateien definiert eine auszuführende
Aufgabe, die auch als Cronjob bezeichnet
wird.Das Werkzeug verwendet zwei verschiedene
Konfigurationsdateien: die System-crontab, welche nicht
verändert werden sollte und die Benutzer-crontabs, die nach
Bedarf erstellt und geändert werden können. Das Format, dass
von diesen beiden Dateien verwendet wird, ist in &man.crontab.5;
dokumentiert. Das Format der System-crontab in
/etc/crontab enthält das Feld
who, das in der Benutzer-crontab nicht
existiert. Dieses Feld gibt den Benutzer an, mit dem die
Aufgabe ausgeführt wird. Die Aufgaben in den Benutzer-crontabs
laufen unter dem Benutzer, der die crontab erstellt hat.Benutzer-crontabs erlauben es den Benutzern, ihre eigenen
Aufgaben zu planen. Der Benutzer root kann auch seine eigene
Benutzer-crontab haben, um Aufgaben zu planen, die nicht in der
System-crontab existieren.Hier ist ein Beispieleintrag aus der
System-crontab, /etc/crontab:# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD$
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
#
#
#minute hour mday month wday who command
#
*/5 * * * * root /usr/libexec/atrun Das Zeichen # am Zeilenanfang leitet
einen Kommentar
ein. Benutzen Sie Kommentare, um die Funktion eines
Eintrags zu erläutern. Kommentare müssen in einer extra
Zeile stehen. Sie können nicht in derselben Zeile wie ein
Kommando stehen, da sie sonst Teil des Kommandos wären.
Leerzeilen in dieser Datei werden ignoriert.Umgebungsvariablen werden mit dem Gleichheits-Zeichen
(=) festgelegt. Im Beispiel werden
die Variablen SHELL, PATH
und HOME definiert. Wenn die Variable
SHELL nicht definiert wird, benutzt
cron die Bourne Shell.
Wird die Variable PATH nicht gesetzt,
müssen alle Pfadangaben absolut sein, da es keinen
Vorgabewert für PATH gibt.In dieser Zeile werden sieben Felder der System-crontab
beschrieben: minute,
hour, mday,
month, wday,
who und command. Das
Feld minute legt die Minute fest in der
die Aufgabe ausgeführt wird, das Feld
hour die Stunde, das Feld
mday den Tag des Monats. Im Feld
month wird der Monat und im Feld
wday der Wochentag festgelegt. Alle
Felder müssen numerische Werte enthalten und die Zeitangaben
sind im 24-Stunden-Format. Das Zeichen *
repräsentiert dabei alle möglichen Werte für dieses Feld.
Das Feld who gibt es nur in der
System-crontab und gibt den Account an, unter dem das
Kommando laufen soll. Im letzten Feld wird schließlich das
auszuführende Kommando angegeben.Diese Zeile definiert die Werte für den Cronjob. Die
Zeichenfolge */5 gefolgt von mehreren
*-Zeichen bedeutet, dass
/usr/libexec/atrun von root alle fünf Minuten
aufgerufen wird.Bei den Kommandos können beliebig viele Optionen
angegeben werden. Wenn das Kommando zu lang ist und
auf der nächsten Zeile fortgesetzt werden soll,
muss am Ende der Zeile das Fortsetzungszeichen
(\) angegeben werden.Eine Benutzer-crontab erstellenRufen Sie crontab im Editor-Modus auf,
um eine Benutzer-crontab zu erstellen:&prompt.user; crontab -eDies wird die crontab des Benutzers mit dem
voreingestellten Editor öffnen. Wenn der Benutzer diesen
Befehl zum ersten Mal ausführt, wird eine leere Datei
geöffnet. Nachdem der Benutzer eine crontab erstellt hat,
wird die Datei mit diesem Kommando zur Bearbeitung
geöffnet.Es empfiehlt sich, die folgenden Zeilen an den Anfang der
crontab-Datei hinzuzufügen, um die Umgebungsvariablen zu
setzen und die einzelnen Felder zu beschreiben:SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
# Order of crontab fields
# minute hour mday month wday commandFügen Sie dann für jedes Kommando oder Skript eine Zeile
hinzu, mit der Angabe wann das Kommando ausgeführt werden
soll. In diesem Beispiel wird ein Bourne Shell Skript täglich
um 14:00 Uhr ausgeführt. Da der Pfad zum Skript nicht in
PATH enthalten ist, wird der vollständige
Pfad zum Skript angegeben:0 14 * * * /usr/home/dru/bin/mycustomscript.shBevor Sie ein eigenes Skript verwenden, stellen Sie
sicher, dass es ausführbar ist und dass es mit den wenigen
Umgebungsvariablen von cron
funktioniert. Um die Umgebung nachzubilden, die der obige
cron-Eintrag bei der Ausführung
verwenden würde, benutzen Sie dieses Kommando:&prompt.user; env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru/usr/home/dru/bin/mycustomscript.shDie Umgebung von cron wird in
&man.crontab.5; beschrieben. Es ist wichtig, dass
sichergestellt wird, dass die Skripte in der Umgebung von
cron korrekt arbeiten, besonders
wenn Befehle enthalten sind, welche Dateien mit Wildcards
löschen.Wenn Sie mit der Bearbeitung der crontab fertig sind,
speichern Sie die Datei. Sie wird automatisch installiert
und cron wird die darin enthalten
Cronjobs zu den angegebenen Zeiten ausführen. Um die Cronjobs
in einer crontab aufzulisten, verwenden Sie diesen
Befehl:&prompt.user; crontab -l
0 14 * * * /usr/home/dru/bin/mycustomscript.shUm alle Cronjobs einer Benutzer-crontab zu löschen,
verwenden Sie diesen Befehl:&prompt.user; crontab -r
remove crontab for dru? yDienste unter &os; verwaltenTomRhodesBeigetragen von &os; verwendet die vom &man.rc.8;-System bereit gestellten
Startskripten beim Systemstart und für die Verwaltung von
Diensten. Die Skripte sind in /etc/rc.d
abgelegt und bieten grundlegende Dienste an, die über die
Optionen , und
des &man.service.8; Kommandos
kontrolliert werden können. Beispielsweise kann &man.sshd.8;
mit dem nachstehenden Kommando neu gestartet werden:&prompt.root; service sshd restartAnalog können Sie andere Dienste starten und stoppen.
Normalerweise werden die Dienste beim Systemstart über
Einträge in der Datei &man.rc.conf.5; automatisch gestartet.
&man.natd.8; wird zum Beispiel mit dem folgenden
Eintrag in /etc/rc.conf aktiviert:natd_enable="YES"Wenn dort bereits die Zeile
existiert, ändern Sie
in . Die
&man.rc.8;-Skripten starten, wie unten beschrieben, auch
abhängige Dienste.Da das &man.rc.8;-System primär
zum automatischen Starten und Stoppen von Systemdiensten
dient, funktionieren die Optionen ,
und nur,
wenn die entsprechenden Variablen in
/etc/rc.conf gesetzt sind. Beispielsweise
funktioniert sshd restart nur dann, wenn in
/etc/rc.conf die Variable
sshd_enable auf gesetzt
wurde. Wenn Sie die Optionen ,
oder
unabhängig von den Einstellungen in
/etc/rc.conf benutzen wollen,
müssen Sie den Optionen mit dem Präfix
one verwenden. Um beispielsweise
sshd unabhängig von den
Einstellungen in /etc/rc.conf neu
zu starten, benutzen Sie das nachstehende Kommando:&prompt.root; service sshd onerestartOb ein Dienst in /etc/rc.conf
aktiviert ist, können Sie herausfinden, indem
Sie das entsprechende &man.rc.8;-Skript
mit der Option aufrufen. Dieses Beispiel
prüft, ob der sshd-Dienst in
/etc/rc.conf aktiviert ist:&prompt.root; service sshd rcvar
# sshd
#
sshd_enable="YES"
# (default: "")Die Zeile # sshd wird von dem Kommando
ausgegeben; sie kennzeichnet nicht die Eingabeaufforderung von
root.Ob ein Dienst läuft, kann mit
abgefragt werden. Das folgende
Kommando überprüft, ob sshd
auch wirklich gestartet wurde:&prompt.root; service sshd status
sshd is running as pid 433.Einige Dienste können über die Option
neu initialisiert werden. Dazu wird
dem Dienst über ein Signal mitgeteilt,
dass er seine Konfigurationsdateien neu einlesen soll.
Oft wird dazu das Signal SIGHUP
verwendet. Beachten Sie aber, dass nicht alle Dienste diese
Option unterstützen.Die meisten Systemdienste werden beim Systemstart vom
&man.rc.8;-System gestartet. Zum Beispiel aktiviert das Skript
/etc/rc.d/bgfsck die Prüfung von
Dateisystemen im Hintergrund. Das Skript gibt die folgende
Meldung aus, wenn es gestartet wird:Starting background file system checks in 60 seconds.Dieses Skript wird während des Systemstarts ausgeführt und
führt eine Überprüfung der Dateisysteme im Hintergrund
durch.Viele Systemdienste hängen von anderen Diensten
ab. &man.yp.8; und andere RPC-basierende Systeme hängen
beispielsweise von dem rpcbind-Dienst
ab. Im Kopf der Startskripten befinden sich
die Informationen über Abhängigkeiten von anderen
Diensten und weitere Metadaten. Mithilfe dieser Daten
bestimmt das Programm &man.rcorder.8; beim Systemstart die
Startreihenfolge der Dienste.Folgende Schlüsselwörter müssen im Kopf aller Startskripten
verwendet werden, da sie von &man.rc.subr.8; zum
Aktivieren des Startskripts benötigt
werden:PROVIDE: Gibt die Namen der Dienste
an, die mit dieser Datei zur Verfügung gestellt
werden.Die folgenden Schlüsselwörter können im Kopf
des Startskripts angegeben werden. Sie sind zwar nicht
unbedingt notwendig, sind aber hilfreich beim Umgang mit
&man.rcorder.8;:REQUIRE: Gibt die Namen der Dienste
an, von denen dieser Dienst abhängt. Ein Skript, das dieses
Schlüsselwort enthält wird nach den
angegebenen Diensten ausgeführt.BEFORE: Zählt Dienste auf,
die auf diesen Dienst angewiesen sind. Ein Skript, dass
dieses Schlüsselwort enthält wird vor
den angegebenen Diensten ausgeführt.Durch das Verwenden dieser Schlüsselwörter kann
ein Administrator die Startreihenfolge von Systemdiensten
feingranuliert steuern, ohne mit den
Schwierigkeiten des runlevel-Systems
anderer &unix; Systeme kämpfen zu müssen.Weitere Informationen über das
&man.rc.8;-System finden Sie in &man.rc.8; und
&man.rc.subr.8;. Wenn Sie eigene
rc.d-Skripte schreiben wollen, sollten Sie
diesen Artikel lesen.Systemspezifische Konfigurationrc-Dateienrc.confInformationen zur Systemkonfiguration sind hauptsächlich
in /etc/rc.conf, die meist beim Start
des Systems verwendet wird, abgelegt. Sie enthält die
Konfigurationen für die
rc* Dateien.In rc.conf werden die Vorgabewerte
aus /etc/defaults/rc.conf überschrieben.
Die Vorgabedatei sollte nicht editiert werden. Stattdessen
sollten alle systemspezifischen Änderungen in
rc.conf vorgenommen werden.Um den administrativen Aufwand gering zu halten,
existieren in geclusterten Anwendungen mehrere Strategien,
globale Konfigurationen von systemspezifischen Konfigurationen
zu trennen. Der empfohlene Weg hält die globale Konfiguration
in einer separaten Datei z.B.
/etc/rc.conf.local. Zum Beispiel
so:/etc/rc.conf:sshd_enable="YES"
keyrate="fast"
defaultrouter="10.1.1.254"/etc/rc.conf.local:hostname="node1.example.org"
ifconfig_fxp0="inet 10.1.1.1/8"/etc/rc.conf kann dann auf jedes
System mit rsync oder
puppet verteilt werden,
während /etc/rc.conf.local dabei
systemspezifisch bleibt.Bei einem Upgrade des Systems wird
/etc/rc.conf nicht überschrieben, so dass
die Systemkonfiguration erhalten bleibt./etc/rc.conf und
/etc/rc.conf.local werden von
&man.sh.1; gelesen. Dies erlaubt es dem
Systemadministrator, komplexe Konfigurationsszenarien zu
erstellen. Lesen Sie &man.rc.conf.5;, um weitere
Informationen zu diesem Thema zu erhalten.Einrichten von NetzwerkkartenMarcFonvieilleBeigetragen von NetzwerkkarteneinrichtenDie Konfiguration einer Netzwerkkarte gehört zu
den alltäglichen Aufgaben eines &os; Administrators.Bestimmen des richtigen TreibersNetzwerkkartenTreiberErmitteln Sie zunächst das Modell der Netzwerkkarte und
den darin verwendeten Chip. &os; unterstützt eine Vielzahl
von Netzwerkkarten. Prüfen Sie die
Hardware-Kompatibilitätsliste für das &os; Release, um zu
sehen ob die Karte unterstützt wird.Wenn die Karte unterstützt wird, müssen Sie den Treiber
für die Karte bestimmen.
/usr/src/sys/conf/NOTES und
/usr/src/sys/arch/conf/NOTES
enthalten eine Liste der verfügbaren Treiber mit Informationen
zu den unterstützten Chipsätzen. Wenn Sie sich nicht
sicher sind, ob Sie den richtigen Treiber ausgewählt haben,
lesen Sie die Hilfeseite des Treibers. Sie enthält weitere
Informationen über die unterstützten Geräte und bekannte
Einschränkungen des Treibers.Die Treiber für gebräuchliche Netzwerkkarten sind schon im
GENERIC-Kernel enthalten, so dass die
Karte während des Systemstarts erkannt werden sollte. Die
Systemmeldungen können Sie sich mit
more /var/run/dmesg.boot ansehen. Mit der
Leertaste können Sie durch den Text blättern. In diesem
Beispiel findet das System zwei Karten, die den
&man.dc.4;-Treiber benutzen:dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
miibus0: <MII bus> on dc0
bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0
bmtphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc0: Ethernet address: 00:a0:cc:da:da:da
dc0: [ITHREAD]
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
miibus1: <MII bus> on dc1
bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1
bmtphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: Ethernet address: 00:a0:cc:da:da:db
dc1: [ITHREAD]Ist der Treiber für die Netzwerkkarte nicht
in GENERIC enthalten, muss zunächst
ein Treiber geladen werden, um die Karte konfigurieren und
benutzen zu können. Dafür gibt es zwei Methoden:Am einfachsten ist es, das Kernelmodul für
die Karte mit &man.kldload.8; zu laden. Um den Treiber
automatisch beim Systemstart zu laden, fügen Sie die
entsprechende Zeile in
/boot/loader.conf ein. Es gibt nicht
für alle Karten Kernelmodule.Alternativ kann der Treiber für die Karte fest in den
Kernel eingebunden werden. Lesen Sie dazu
/usr/src/sys/conf/NOTES,
/usr/src/sys/arch/conf/NOTES
und die Hilfeseite des Treibers, den Sie in den Kernel
einbinden möchten, an. Die Übersetzung des Kernels
wird in beschrieben. Wenn
die Karte während des Systemstarts vom Kernel erkannt
wurde, muss der Kernel nicht neu übersetzt werden.&windows;-NDIS-Treiber
einsetzenNDISNDISulator&windows;-Treiberµsoft.windows;GerätetreiberKLD
(kernel loadable object)Leider stellen nach wie vor viele Unternehmen die
Spezifikationen ihrer Treiber der Open Source Gemeinde
nicht zur Verfügung, weil sie diese Informationen
als Geschäftsgeheimnisse betrachten. Daher haben die
Entwickler von &os; und anderen Betriebssystemen nur
zwei Möglichkeiten. Entweder versuchen sie in einem
aufwändigen Prozess den Treiber durch
Reverse Engineering
nachzubauen, oder sie versuchen, die vorhandenen
Binärtreiber der µsoft.windows;-Plattform zu
verwenden.&os; bietet native Unterstützung für die
Network Driver Interface
Specification (NDIS).
&man.ndisgen.8; wird benutzt, um einen &windowsxp;-Treiber
in ein Format zu konvertieren, das von &os; verwendet werden
kann. Da der &man.ndis.4;-Treiber einen
&windowsxp;-Binärtreiber nutzt, kann er nur auf &i386;- und
amd64-Systemen verwendet werden. Unterstützt werden
PCI, CardBus, PCMCIA
und USB-Geräte.Um den NDISulator zu verwenden, benötigen Sie drei
Dinge:Die &os; KernelquellenDen &windowsxp;-Binärtreiber mit der Erweiterung
.SYSDie Konfigurationsdatei des &windowsxp;-Treibers
mit der Erweiterung .INFLaden Sie die .SYS- und
.INF-Dateien für die Karte. Diese
befinden sich meistens auf einer beigelegten CD-ROM, oder
können von der Internetseite des Herstellers
heruntergeladen werden. In den folgenden Beispielen werden
die Dateien W32DRIVER.SYS und
W32DRIVER.INF verwendet.Die Architektur des Treibers muss zur jeweiligen
Version von &os; passen. Benutzen Sie einen &windows;
32-bit Treiber für &os;/i386. Für &os;/amd64 wird ein
&windows; 64-bit Treiber benötigt.Als Nächstes kompilieren Sie den binären Treiber, um ein
Kernelmodul zu erzeugen. Dazu rufen Sie als
root
&man.ndisgen.8; auf:&prompt.root; ndisgen /path/to/W32DRIVER.INF/path/to/W32DRIVER.SYSDieses Kommando arbeitet interaktiv, benötigt es weitere
Informationen, so fragt es Sie danach. Das Ergebnis ist ein
neu erzeugtes Kernelmodul im aktuellen Verzeichnis.
Benutzen Sie &man.kldload.8; um das neue Modul zu
laden:&prompt.root; kldload ./W32DRIVER.koNeben dem erzeugten Kernelmodul müssen auch die
Kernelmodule ndis.ko und
if_ndis.ko geladen werden. Dies
passiert automatisch, wenn Sie ein von &man.ndis.4;
abhängiges Modul laden. Andernfalls können die Module mit
den folgenden Kommandos manuell geladen werden:&prompt.root; kldload ndis
&prompt.root; kldload if_ndisDer erste Befehl lädt den &man.ndis.4;-Miniport-Treiber,
der zweite das tatsächliche Netzwerkgerät.Überprüfen Sie die Ausgabe von &man.dmesg.8;
auf eventuelle Fehler während des Ladevorgangs. Gab es
dabei keine Probleme, sollte die Ausgabe wie folgt
aussehen:ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54MbpsAb jetzt kann das Gerät ndis0 wie
jede andere Netzwerkkarte konfiguriert werden.Um die &man.ndis.4;-Module automatisch beim Systemstart
zu laden, kopieren Sie das erzeugte Modul
W32DRIVER_SYS.ko nach
/boot/modules. Danach fügen Sie die
folgende Zeile in /boot/loader.conf
ein:W32DRIVER_SYS_load="YES"Konfiguration von NetzwerkkartenNetzwerkkarteneinrichtenNachdem der richtige Treiber für die Karte geladen ist,
muss die Karte konfiguriert werden. Unter Umständen ist
die Karte schon während der Installation mit
&man.bsdinstall.8; konfiguriert worden.Das nachstehende Kommando zeigt die Konfiguration der
Netzwerkkarten an:&prompt.user; ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:da
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:db
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet 10baseT/UTP
status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>Im Beispiel werden Informationen zu den folgenden Geräten
angezeigt:dc0: Der erste
Ethernet-Adapter.dc1: Der zweite
Ethernet-Adapter.lo0: Das Loopback-Gerät.Der Name der Netzwerkkarte wird aus dem Namen des Treibers
und einer Zahl zusammengesetzt. Die Zahl gibt die Reihenfolge
an, in der die Geräte beim Systemstart erkannt wurden. Die
dritte Karte, die den &man.sis.4; Treiber benutzt, würde
beispielsweise sis2 heißen.Der Adapter dc0 aus dem Beispiel ist
aktiv. Sie erkennen das an den folgenden Hinweisen:UP bedeutet, dass die Karte
konfiguriert und aktiv ist.Der Karte wurde die Internet-Adresse
(inet)
192.168.1.3
zugewiesen.Die Subnetzmaske ist richtig
(0xffffff00
entspricht 255.255.255.0).Die Broadcast-Adresse
192.168.1.255
ist richtig.Die MAC-Adresse der Karte (ether)
lautet
00:a0:cc:da:da:da.Die automatische Medienerkennung ist aktiviert
(media: Ethernet autoselect (100baseTX
<full-duplex>)). Der Adapter
dc1 benutzt das Medium
10baseT/UTP. Weitere Informationen
über die einstellbaren Medien entnehmen
Sie der Hilfeseite des Treibers.Der Verbindungsstatus (status) ist
active, das heißt es wurde ein
Trägersignal entdeckt. Für dc1 wird
status: no carrier angezeigt. Das ist
normal, wenn kein Kabel an der Karte angeschlossen
ist.Wäre die Karte nicht konfiguriert, würde die Ausgabe
von &man.ifconfig.8; so aussehen:dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:da
media: Ethernet autoselect (100baseTX <full-duplex>)
status: activeDie Karte muss als Benutzer root konfiguriert werden. Die
Konfiguration kann auf der Kommandozeile mit &man.ifconfig.8;
erfolgen. Allerdings gehen diese Informationen bei einem
Neustart verloren. Tragen Sie stattdessen die Konfiguration
in /etc/rc.conf ein. Wenn es im
LAN einen DHCP-Server
gibt, fügen Sie einfach folgende Zeile hinzu:ifconfig_dc0="DHCP"Ersetzen Sie >dc0 durch die
richtigen Werte für das System.Nachdem Sie die Zeile hinzugefügt haben, folgen Sie den
Anweisungen in .Wenn das Netzwerk während der Installation konfiguriert
wurde, existieren vielleicht schon Einträge für die
Netzwerkkarte(n). Überprüfen Sie
/etc/rc.conf bevor Sie weitere Zeilen
hinzufügen.Falls kein DHCP-Server zur Verfügung
steht, müssen die Netzwerkkarten manuell konfiguriert werden.
Fügen Sie für jede Karte im System eine Zeile hinzu, wie in
diesem Beispiel zu sehen:ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"Ersetzen Sie dc0 und
dc1 und die
IP-Adressen durch die richtigen Werte für
das System. Die Manualpages des Treibers, &man.ifconfig.8;
und &man.rc.conf.5; enthalten weitere Einzelheiten über
verfügbare Optionen und die Syntax von
/etc/rc.conf.Wenn das Netzwerk kein DNS benutzt,
können Sie in /etc/hosts die Namen und
IP-Adressen der Rechner des
LANs eintragen. Weitere Informationen
entnehmen Sie &man.hosts.5; und
/usr/share/examples/etc/hosts.Falls kein DHCP-Server zur Verfügung
steht, Sie aber Zugang zum Internet benötigen, müssen Sie
das Standard-Gateway und die Nameserver manuell
konfigurieren:&prompt.root; echo 'defaultrouter="Ihr_Default_Gateway"' >> /etc/rc.conf
&prompt.root; echo 'nameserver Ihr_DNS_Server' >> /etc/resolv.confTest und FehlersucheNachdem die notwendigen Änderungen in
/etc/rc.conf gespeichert wurden, kann das
System neu gestartet werden, um die Konfiguration zu testen
und zu überprüfen, ob das System ohne Fehler neu gestartet
wurde. Alternativ können Sie mit folgenden Befehl die
Netzwerkeinstellungen neu initialisieren:&prompt.root; service netif restartFalls in /etc/rc.conf ein
Default-Gateway definiert wurde, müssen Sie auch den
folgenden Befehl ausführen:&prompt.root; service routing restartWenn das System gestartet ist, sollten Sie die
Netzwerkkarten testen.Test der Ethernet-KarteNetzwerkkartentestenUm zu prüfen, ob die Ethernet-Karte richtig konfiguriert
ist, testen Sie zunächst mit &man.ping.8; den Adapter selbst
und sprechen Sie dann eine andere Maschine im
LAN an.Zuerst, der Test des Adapters:&prompt.user; ping -c5 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms
--- 192.168.1.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms&prompt.user; ping -c5 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms
--- 192.168.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 msUm die Namensauflösung zu testen, verwenden Sie den
Namen der Maschine anstelle der
IP-Adresse. Wenn kein
DNS-Server im Netzwerk vorhanden ist,
muss /etc/hosts entsprechend
eingerichtet sein. Fügen Sie dazu die Namen und
IP-Adressen der Rechner im
LAN in /etc/hosts
hinzu, falls sie nicht bereits vorhanden sind. Weitere
Informationen finden Sie in &man.hosts.5; und
/usr/share/examples/etc/hosts.FehlersucheNetzwerkkartenFehlersucheFehler zu beheben, ist immer sehr mühsam.
Indem Sie die einfachen Sachen zuerst prüfen,
erleichtern Sie sich die Aufgabe. Steckt das Netzwerkkabel?
Sind die Netzwerkdienste richtig konfiguriert? Funktioniert
die Firewall? Wird die Netzwerkkarte von &os;
unterstützt? Lesen Sie immer die Hardware-Informationen
des Releases, bevor Sie einen Fehlerbericht einsenden.
Aktualisieren Sie die &os;-Version auf die neueste -STABLE
Version. Suchen Sie in den Archiven der Mailinglisten
und im Internet nach bekannten Lösungen.Wenn die Karte funktioniert, die Verbindungen aber
zu langsam sind, sollten Sie &man.tuning.7; lesen. Prüfen
Sie auch die Netzwerkkonfiguration, da falsche Einstellungen
die Ursache für langsame Verbindungen sein können.Wenn Sie viele device timeout
Meldungen in den Systemprotokollen finden, prüfen
Sie, dass es keinen Konflikt zwischen der Netzwerkkarte
und anderen Geräten des Systems gibt.
Überprüfen Sie nochmals die Verkabelung.
Unter Umständen benötigen Sie eine andere
Netzwerkkarte.Bei watchdog timeout
Fehlermeldungen, kontrollieren Sie zuerst die Verkabelung.
Überprüfen Sie dann, ob der
PCI-Steckplatz der
Karte Bus Mastering unterstützt. Auf einigen
älteren Motherboards ist das nur für einen
Steckplatz (meistens Steckplatz 0) der Fall. Lesen Sie
in der Dokumentation der Karte und des Motherboards
nach, ob das vielleicht die Ursache des Problems sein
könnte.Die Meldung No route to host
erscheint, wenn das System ein Paket nicht zustellen
kann. Das kann vorkommen weil beispielsweise keine
Default-Route gesetzt wurde oder das Netzwerkkabel
nicht richtig steckt. Schauen Sie in der Ausgabe
von netstat -rn nach, ob eine
gültige Route zu dem Zielsystem existiert. Wenn nicht,
lesen Sie .Die Meldung ping: sendto: Permission
denied wird oft von einer falsch
konfigurierten Firewall verursacht. Wenn keine Regeln
definiert wurden, blockiert eine aktivierte Firewall alle
Pakete, selbst einfache &man.ping.8;-Pakete.
Weitere Informationen erhalten Sie
in .Falls die Leistung der Karte schlecht ist, setzen
Sie die Medienerkennung von autoselect
(automatisch) auf das richtige Medium. In vielen Fällen
löst diese Maßnahme Leistungsprobleme. Wenn
nicht, prüfen Sie nochmal die Netzwerkeinstellungen
und lesen Sie &man.tuning.7;.Virtual Hostsvirtual hostsIP-AliaseEin gebräuchlicher Zweck von &os; ist das
virtuelle Hosting, bei dem ein Server im Netzwerk wie
mehrere Server aussieht. Dies wird dadurch erreicht,
dass einem Netzwerkinterface mehrere Netzwerk-Adressen
zugewiesen werden.Ein Netzwerkinterface hat eine echte
Adresse und kann beliebig viele alias Adressen
haben. Die Aliase werden durch entsprechende alias Einträge
in /etc/rc.conf festgelegt, wie in diesem
Beispiel zu sehen ist:ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"Beachten Sie, dass die Alias-Einträge mit
alias0 anfangen
müssen und weiter hochgezählt werden, das heißt
alias1, alias2, und so
weiter. Die Konfiguration der Aliase hört bei der ersten
fehlenden Zahl auf.Die Berechnung der Alias-Netzwerkmasken ist wichtig. Für
jedes Interface muss es eine Adresse geben, die die
Netzwerkmaske des Netzwerkes richtig beschreibt. Alle anderen
Adressen in diesem Netzwerk haben dann eine Netzwerkmaske, die
mit 1 gefüllt ist, also 255.255.255.255 oder hexadezimal
0xffffffff.Als Beispiel betrachten wir den Fall, in dem
fxp0 mit zwei Netzwerken verbunden
ist: dem Netzwerk
10.1.1.0 mit der
Netzwerkmaske
255.255.255.0 und dem
Netzwerk 202.0.75.16
mit der Netzwerkmaske
255.255.255.240. Das
System soll die Adressen
10.1.1.1 bis
10.1.1.5 und
202.0.75.17 bis
202.0.75.20 belegen.
Nur die erste Adresse in einem Netzwerk sollte die richtige
Netzwerkmaske haben. Alle anderen Adressen
(10.1.1.2 bis
10.1.1.5 und
202.0.75.18 bis
202.0.75.20) müssen
die Maske
255.255.255.255 erhalten.Die folgenden Einträge in
/etc/rc.conf konfigurieren den Adapter
entsprechend dem Beispiel:ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"Dies kann mit einer durch Leerzeichen getrennten Liste
von IP-Adressbereichen auch einfacher
ausgedrückt werden. Die erste Adresse hat wieder die angegebene
Netzwerkmaske und die zusätzlichen Adressen haben die
Netzwerkmaske 255.255.255.255.ifconfig_fxp0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"Konfiguration der SystemprotokollierungNiclasZeisingBeigetragen von system loggingsyslog&man.syslogd.8;Die Aufzeichnung und Kontrolle von Log-Meldungen ist ein
wichtiger Aspekt der Systemadministration. Die Informationen
werden nicht nur verwendet um Hard- und Softwarefehler ausfindig
zu machen, auch zur Überwachung der Sicherheit und der Reaktion
bei einem Zwischenfall spielen diese Aufzeichnungen eine
wichtige Rolle. Die meisten Systemdienste und Anwendungen
erzeugen Log-Meldungen.&os; stellt mit syslogd ein
Werkzeug zur Verwaltung von Protokollen bereit. In der
Voreinstellung wird syslogd beim
Booten automatisch gestartet. Dieses Verhalten wird über die
Variable syslogd_enable in
/etc/rc.conf gesteuert. Dazu gibt es noch
zahlreiche Argumente, die in der Variable
syslogd_flags in
/etc/rc.conf gesetzt werden können. Lesen
Sie &man.syslogd.8; für weitere Informationen über die
verfügbaren Argumente.Dieser Abschnitt beschreibt die Konfiguration und Verwendung
des &os; Protokollservers, und diskutiert auch die Log-Rotation
und das Management von Logdateien.Konfiguration der lokalen Protokollierungsyslog.confDie Konfigurationsdatei
/etc/syslog.conf steuert, was
syslogd mit Log-Meldungen macht,
sobald sie empfangen werden. Es gibt verschiedene Parameter,
die das Verhalten bei eingehenden Ereignissen kontrollieren.
facility beschreibt das
Subsystem, welches das Ereignis generiert hat. Beispielsweise
der Kernel, oder ein Daemon.
level hingegen beschreibt den
Schweregrad des aufgetretenen Ereignisses. Dies macht es
möglich, Meldungen in verschiedenen Logdateien zu
protokollieren, oder Meldungen zu verwerfen, je nach
Konfiguration von facility und
level. Ebenfalls besteht die
Möglichkeit auf Meldungen zu reagieren, die von einer
bestimmten Anwendung stammen, oder von einem
spezifischen Host erzeugt wurden.Die Konfigurationsdatei von &man.syslogd.8; enthält für
jede Aktion eine Zeile. Die Syntax besteht aus einem
Auswahlfeld, gefolgt von einem Aktionsfeld. Die Syntax für
das Auswahlfeld ist facility.level.
Dies entspricht Log-Meldungen von
facility mit einem Level von
level oder höher. Um noch präziser
festzulegen was protokolliert wird, kann dem Level optional
ein Vergleichsflag vorangestellt werden. Mehrere Auswahlen
können, durch Semikolon (;) getrennt, für
die gleiche Aktion verwendet werden. *
wählt dabei alles aus. Das Aktionsfeld definiert, wohin die
Log-Meldungen gesendet werden, beispielsweise in eine Datei
oder zu einem entfernten Log-Server. Als Beispiel dient hier
/etc/syslog.conf aus &os;:# $&os;$
#
# Spaces ARE valid field separators in this file. However,
# other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you$
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) manpage.
*.err;kern.warning;auth.notice;mail.crit /dev/console
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
auth.info;authpriv.info /var/log/auth.log
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
ftp.info /var/log/xferlog
cron.* /var/log/cron
!-devd
*.=debug /var/log/debug.log
*.emerg *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
#*.* /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.* @loghost
# uncomment these if you're running inn
# news.crit /var/log/news/news.crit
# news.err /var/log/news/news.err
# news.notice /var/log/news/news.notice
# Uncomment this if you wish to see messages produced by devd
# !devd
# *.>=info
!ppp
*.* /var/log/ppp.log
!*In diesem Beispiel:Zeile 8 selektiert alle Meldungen vom Level
err, sowie
kern.warning,
auth.notice und
mail.crit und schickt diese zur Konsole
(/dev/console).Zeile 12 selektiert alle Meldungen von
mail ab dem Level
info oder höher und schreibt diese in
/var/log/maillog.Zeile 17 benutzt ein Vergleichsflag
(=), um nur Meldungen vom Level
debug zu selektieren und schreibt
diese in /var/log/debug.log.Zeile 33 zeigt ein Beispiel für die Nutzung einer
Programmspezifikation. Die
nachfolgenden Regeln sind dann nur für Programme gültig,
welche der Programmspezifikation stehen. In diesem Fall
werden alle Meldungen von ppp
(und keinem anderen Programm) in
/var/log/ppp.log geschrieben.Die verfügbaren level,
beginnend mit den höchst kritischen, hin zu den weniger
kritischen, sind:
emerg, alert,
crit, err,
warning, notice,
info und
debug.Die facilities, in
beliebiger Reihenfolge, sind: auth,
authpriv, console,
cron, daemon,
ftp, kern,
lpr, mail,
mark, news,
security, syslog,
user, uucp, sowie
local0 bis local7.
Beachten Sie, dass andere Betriebssysteme hiervon abweichende
facilities haben
können.Um alle Meldungen vom Level notice und
höher in /var/log/daemon.log zu
protokollieren, fügen Sie folgenden Eintrag hinzu:daemon.notice /var/log/daemon.logFür weitere Informationen zu verschiedenen Level und
faclilities, lesen Sie
&man.syslog.3; und &man.syslogd.8;. Weitere Informationen
zu /etc/syslog.conf, dessen Syntax und
erweiterten Anwendungsbeispielen, finden Sie in
&man.syslog.conf.5;.Management und Rotation von Logdateiennewsyslognewsyslog.conflog rotationlog managementLogdateien können schnell wachsen und viel Speicherplatz
belegen, was es schwieriger macht, nützliche Informationen
zu finden. Log-Management versucht,
diesen Effekt zu mildern. &os; verwendet
newsyslog für die Verwaltung von
Logdateien. Dieses in &os; integrierte Programm
rotiert und komprimiert in regelmäßigen Abständen Logdateien.
Optional kann es auch fehlende Logdateien erstellen und
Programme benachrichtigen, wenn Logdateien verschoben wurden.
Die Logdateien können von syslogd
oder einem anderen Programm generiert werden. Obwohl
newsyslog normalerweise von
&man.cron.8; aufgerufen wird, ist es kein Systemdämon. In der
Standardkonfiguration wird dieser Job jede Stunde
ausgeführt.Um zu wissen, welche Maßnahmen zu ergreifen sind, liest
newsyslog seine Konfigurationsdatei
/etc/newsyslog.conf. Diese
Konfigurationsdatei enthält eine Zeile für jede Datei, die von
newsyslog verwaltet wird. Jede
Zeile enthält Informationen über den Besitzer der Datei, die
Dateiberechtigungen, wann die Datei rotiert wird, optionale
Flags, welche die Log-Rotation
beeinflussen (bspw. Komprimierung) und Programme, denen ein
Signal geschickt wird, wenn Logdateien rotiert werden. Hier
folgt die Standardkonfiguration in &os;:# configuration file for newsyslog
# $FreeBSD$
#
# Entries which do not specify the '/pid_file' field will cause the
# syslogd process to be signalled when that log file is rotated. This
# action is only appropriate for log files which are written to by the
# syslogd process (ie, files listed in /etc/syslog.conf). If there
# is no process which needs to be signalled when a given log file is
# rotated, then the entry for that file should include the 'N' flag.
#
# The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'.
#
# Note: some sites will want to select more restrictive protections than the
# defaults. In particular, it may be desirable to switch many of the 644
# entries to 640 or 600. For example, some sites will consider the
# contents of maillog, messages, and lpd-errs to be confidential. In the
# future, these defaults may change to more conservative ones.
#
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/var/log/all.log 600 7 * @T00 J
/var/log/amd.log 644 7 100 * J
/var/log/auth.log 600 7 100 @0101T JC
/var/log/console.log 600 5 100 * J
/var/log/cron 600 3 100 * JC
/var/log/daily.log 640 7 * @T00 JN
/var/log/debug.log 600 7 100 * JC
/var/log/kerberos.log 600 7 100 * J
/var/log/lpd-errs 644 7 100 * JC
/var/log/maillog 640 7 * @T00 JC
/var/log/messages 644 5 100 @0101T JC
/var/log/monthly.log 640 12 * $M1D0 JN
/var/log/pflog 600 3 100 * JB /var/run/pflogd.pid
/var/log/ppp.log root:network 640 3 100 * JC
/var/log/devd.log 644 3 100 * JC
/var/log/security 600 10 100 * JC
/var/log/sendmail.st 640 10 * 168 B
/var/log/utx.log 644 3 * @01T05 B
/var/log/weekly.log 640 5 1 $W6D0 JN
/var/log/xferlog 600 7 100 * JCJede Zeile beginnt mit dem Namen der Protokolldatei, die
rotiert werden soll, optional gefolgt von Besitzer und Gruppe
für rotierende, als auch für neu erstellte Dateien. Das Feld
mode definiert die Zugriffsrechte der
Datei. count gibt an, wie viele rotierte
Dateien aufbewahrt werden sollen. Anhand der
size- und
when-Flags
erkennt newsyslog, wann die Datei
rotiert werden muss. Eine Logdatei wird rotiert, wenn ihre
Größe den Wert von size überschreitet, oder
wenn die Zeit im when-Feld abgelaufen ist.
Ein * bedeutet, dass dieses Feld ignoriert
wird. Das flags-Feld gibt
newsyslog weitere Instruktionen,
zum Beispiel wie eine Datei zu rotieren ist, oder eine Datei
zu erstellen falls diese nicht existiert. Die letzten beiden
Felder sind optional und bestimmen die
PID-Datei und wann die Datei rotiert
wird.Weitere Informationen zu allen Feldern, gültigen
Flags und wie Sie die
Rotationszeit angeben können, finden Sie in
&man.newsyslog.conf.5;. Denken Sie daran, dass
newsyslog von &man.cron.8;
aufgerufen wird und somit Dateien auch nur dann rotiert, wenn
es von &man.cron.8; aufgerufen wird, und nicht
häufiger.Protokollierung von anderen HostsTomRhodesBeigetragen von BenedictReuschlingÜbersetzt von Die Überwachung der Protokolldateien kann bei steigender
Anzahl von Rechnern sehr unhandlich werden. Eine zentrale
Protokollierung kann manche administrativen Belastungen bei
der Verwaltung von Protokolldateien reduzieren.Die Aggregation, Zusammenführung und Rotation von
Protokolldateien kann in &os; mit
syslogd und
newsyslog konfiguriert werden. In
der folgenden Beispielkonfiguration sammelt Host
A, genannt logserv.example.com,
Protokollinformationen für das lokale Netzwerk. Host
B, genannt logclient.example.com wird
seine Protokollinformationen an den Server
weiterleiten.Konfiguration des ProtokollserversEin Protokollserver ist ein System, welches
Protokollinformationen von anderen Hosts akzeptiert. Bevor
Sie diesen Server konfigurieren, prüfen Sie
folgendes:Falls eine Firewall zwischen dem
Protokollserver und den -Clients steht, muss das
Regelwerk der Firewall UDP auf Port
514 sowohl auf Client- als auch auf Serverseite
freigegeben werden.Der syslogd-Server und alle
Clientrechner müssen gültige Einträge für sowohl
Vorwärts- als auch Umkehr-DNS
besitzen. Falls im Netzwerk kein
DNS-Server vorhanden ist, muss auf
jedem System die Datei /etc/hosts
mit den richtigen Einträgen gepflegt werden. Eine
funktionierende Namensauflösung ist zwingend
erforderlich, ansonsten würde der Server die
Protokollnachrichten ablehnen.Bearbeiten Sie /etc/syslog.conf auf
dem Server. Tragen Sie den Namen des Clients ein, den
Verbindungsweg und den Namen der Protokolldatei. Dieses
Beispiel verwendet den Rechnernamen
B, alle Verbindungswege, und die
Protokolle werden in
/var/log/logclient.log
gespeichert.Einfache Server Konfiguration+logclient.example.com
*.* /var/log/logclient.logFügen Sie für jeden Client zwei Zeilen hinzu, falls Sie
mehrere Clients in diese Datei aufnehmen. Weitere
Informationen über die verfügbaren Verbindungswege finden
Sie in &man.syslog.conf.5;.Konfigurieren Sie als nächstes
/etc/rc.conf:syslogd_enable="YES"
syslogd_flags="-a logclient.example.com -v -v"Der erste Eintrag startet syslogd
während des Bootens. Der zweite Eintrag erlaubt es, Daten
von dem spezifizierten Client auf diesem Server zu
akzeptieren. Die Verwendung von
erhöht die Anzahl von Protokollnachrichten. Dies ist
hilfreich für die Feineinstellung der Verbindungswege, da
Administratoren auf diese Weise erkennen, welche Arten von
Nachrichten von welchen Verbindungswegen protokolliert
werden.Mehrere -Optionen können angegeben
werden, um die Protokollierung von mehreren Clients zu
erlauben. IP-Adressen und ganze
Netzblöcke können ebenfalls spezifiziert werden. Eine
vollständige Liste der Optionen finden Sie in
&man.syslogd.8;.Zum Schluss muss die Protokolldatei erstellt
werden:&prompt.root; touch /var/log/logclient.logZu diesem Zeitpunkt sollte syslogd
neu gestartet und überprüft werden:&prompt.root; service syslogd restart
&prompt.root; pgrep syslogWenn eine PID zurückgegeben wird,
wurde der Server erfolgreich neu gestartet und die
Clientkonfiguration kann beginnen. Wenn der Server nicht
neu gestartet wurde, suchen Sie in
/var/log/messages nach dem
Fehler.Konfiguration des ProtokollclientsEin Protokollclient sendet Protokollinformationen
an einen Protokollserver. Zusätzlich behält er eine
lokale Kopie seiner eigenen Protokolle.Sobald der Server konfiguriert ist, bearbeiten Sie
/etc/rc.conf auf dem Client:syslogd_enable="YES"
syslogd_flags="-s -v -v"Der erste Eintrag aktiviert den
syslogd-Dienst während des Systemstarts.
Der zweite Eintrag erhöht die Anzahl der
Protokollnachrichten. Die Option
verhindert, dass dieser Client Protokolle von anderen
Hosts akzeptiert.Als nächstes muss der Protokollserver in der
/etc/syslog.conf des Clients
eingetragen werden. In diesem Beispiel wird das
@-Symbol benutzt, um sämtliche
Protokolldaten an einen bestimmten Server zu senden:*.* @logserv.example.comNachdem die Änderungs gespeichert wurden, muss
syslogd neu gestartet werden, damit die
Änderungen wirksam werden:&prompt.root; service syslogd restartUm zu testen, ob Protokollnachrichten über das Netzwerk
gesendet werden, kann &man.logger.1; auf dem Client benutzt
werden, um eine Nachricht an
syslogd zu schicken:&prompt.root; logger "Test message from logclient"Diese Nachricht sollte jetzt sowohl in
/var/log/messages auf dem Client, als
auch in /var/log/logclient.log auf dem
Server vorhanden sein.Fehlerbehebung beim ProtokollserverWenn der Server keine Nachrichten empfängt, ist die
Ursache wahrscheinlich ein Netzwerkproblem, ein Problem bei
der Namensauflösung oder ein Tippfehler in einer
Konfigurationsdatei. Um die Ursache zu isolieren, müssen
Sie sicherstellen, dass sich Server und Client über den in
/etc/rc.conf konfigurierten Hostnamen
mit ping erreichen lässt. Falls dies
nicht gelingt sollten Sie die Netzwerkverkabelung
überprüfen, außerdem Firewallregeln sowie die Einträge für
Hosts im DNS und
/etc/hosts. Überprüfen Sie diese Dinge
auf dem Server und dem Client, bis der
ping von beiden Hosts erfolgreich
ist.Wenn sich die Hosts gegenseitig mit
ping erreichen können, der Server aber
immer noch keine Nachrichten empfängt, können Sie
vorübergehend die Ausführlichkeit der Protokollierung
erhöhen, um die Ursache für das Problem weiter einzugrenzen.
In dem folgenden Beispiel ist auf dem Server die Datei
/var/log/logclient.log leer und in der
Datei /var/log/messages auf dem Client
ist keine Ursache für das Problem erkennbar. Um nun die
Ausführlichkeit der Protokollierung zu erhöhen, passen Sie
auf dem Server den Eintrag syslogd_flags
an. Anschließend starten Sie den Dienst neu:syslogd_flags="-d -a logclient.example.com -v -v"&prompt.root; service syslogd restartInformationen wie diese werden sofort nach dem Neustart
auf der Konsole erscheinen:logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart
syslogd: restarted
logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel
Logging to FILE /var/log/messages
syslogd: kernel boot file is /boot/kernel/kernel
cvthname(192.168.1.10)
validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com;
rejected in rule 0 due to name mismatch.In diesem Beispiel werden die Nachrichten aufgrund eines
fehlerhaften Namens abgewiesen. Der Hostname sollte
logclient und nicht
logclien sein. Beheben Sie den
Tippfehler, starten Sie den Dienst neu und überprüfen Sie
das Ergebnis:&prompt.root; service syslogd restart
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart
syslogd: restarted
logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel
syslogd: kernel boot file is /boot/kernel/kernel
logmsg: pri 166, flags 17, from logserv.example.com,
msg Dec 10 20:55:02 <syslog.err> logserv.example.com syslogd: exiting on signal 2
cvthname(192.168.1.10)
validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com;
accepted in rule 0.
logmsg: pri 15, flags 0, from logclient.example.com, msg Dec 11 02:01:28 trhodes: Test message 2
Logging to FILE /var/log/logclient.log
Logging to FILE /var/log/messagesZu diesem Zeitpunkt werden die Nachrichten korrekt
empfangen und in die richtige Datei geschrieben.SicherheitsbedenkenWie mit jedem Netzwerkdienst, müssen
Sicherheitsanforderungen in Betracht gezogen werden, bevor
ein Protokollserver eingesetzt wird. Manchmal enthalten
Protokolldateien sensitive Daten über aktivierte Dienste auf
dem lokalen Rechner, Benutzerkonten und Konfigurationsdaten.
Daten, die vom Client an den Server geschickt werden, sind
weder verschlüsselt noch mit einem Passwort geschützt. Wenn
ein Bedarf für Verschlüsselung besteht, ist es möglich
security/stunnel zu verwenden, welches
die Protokolldateien über einen verschlüsselten Tunnel
versendet.Lokale Sicherheit ist ebenfalls ein Thema.
Protokolldateien sind während der Verwendung oder nach ihrer
Rotation nicht verschlüsselt. Lokale Benutzer versuchen
vielleicht, auf diese Dateien zuzugreifen, um zusätzliche
Einsichten in die Systemkonfiguration zu erlangen. Es ist
absolut notwendig, die richtigen Berechtigungen auf diesen
Dateien zu setzen. Das Werkzeug
newsyslog unterstützt
das Setzen von Berechtigungen auf gerade erstellte oder
rotierte Protokolldateien. Protokolldateien mit
Zugriffsmodus 600 sollten verhindern,
dass lokale Benutzer darin herumschnüffeln. Zusätzliche
Informationen finden Sie in &man.newsyslog.conf.5;.Konfigurationsdateien/etc LayoutKonfigurationsdateien finden sich in einigen
Verzeichnissen unter anderem in:/etcEnthält generelle systemspezifische
Konfigurationsinformationen./etc/defaultsDefault Versionen der
Konfigurationsdateien./etc/mailEnthält die &man.sendmail.8; Konfiguration
und weitere MTA
Konfigurationsdateien./etc/pppHier findet sich die Konfiguration für
die User- und Kernel-ppp Programme.
-
-
-
- /etc/namedb
- Das Vorgabeverzeichnis, in dem Daten von
- &man.named.8; gehalten werden. Normalerweise
- werden hier named.conf und
- Zonendaten abgelegt./usr/local/etcInstallierte Anwendungen legen hier ihre
Konfigurationsdateien ab. Dieses Verzeichnis kann
Unterverzeichnisse für bestimmte Anwendungen
enthalten./usr/local/etc/rc.d&man.rc.8;-Skripten installierter
Anwendungen./var/dbAutomatisch generierte systemspezifische
Datenbanken, wie die Paket-Datenbank oder die
&man.locate.1;-Datenbank.HostnamenhostnameDNS/etc/resolv.confresolv.confWie ein &os;-System auf das
Internet Domain Name System
(DNS) zugreift, wird in
/etc/resolv.conf festgelegt.Die gebräuchlichsten Einträge in
/etc/resolv.conf sind:nameserverDie IP-Adresse eines Nameservers, den
der Resolver abfragen soll. Bis zu drei Server
werden in der Reihenfolge, in der sie aufgezählt
sind, abgefragt.searchSuchliste mit Domain-Namen zum Auflösen von
Hostnamen. Die Liste wird normalerweise durch den
Domain-Teil des lokalen Hostnamens
festgelegt.domainDer lokale Domain-Name.Beispiel für eine typische
/etc/resolv.conf:search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30Nur eine der Anweisungen search
oder domain sollte benutzt
werden.Wenn Sie DHCP benutzen, überschreibt
&man.dhclient.8; für gewöhnlich
/etc/resolv.conf mit den Informationen
vom DHCP-Server./etc/hostshosts/etc/hosts ist eine einfache
textbasierte Datenbank. Zusammen mit DNS
und NIS stellt sie eine Abbildung
zwischen Namen und IP-Adressen zur
Verfügung. Anstatt &man.named.8; zu konfigurieren, können
hier lokale Rechner, die über ein LAN
verbunden sind, eingetragen werden. Lokale Einträge für
gebräuchliche Internet-Adressen in
/etc/hosts verhindern die Abfrage eines
externen Servers und beschleunigen die
Namensauflösung.# $&os;$
#
#
# Host Database
#
# This file should contain the addresses and aliases for local hosts that
# share this file. Replace 'my.domain' below with the domainname of your
# machine.
#
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
#
::1 localhost localhost.my.domain
127.0.0.1 localhost localhost.my.domain
#
# Imaginary network.
#10.0.0.2 myname.my.domain myname
#10.0.0.3 myfriend.my.domain myfriend
#
# According to RFC 1918, you can use the following IP networks for
# private nets which will never be connected to the Internet:
#
# 10.0.0.0 - 10.255.255.255
# 172.16.0.0 - 172.31.255.255
# 192.168.0.0 - 192.168.255.255
#
# In case you want to be able to connect to the Internet, you need
# real official assigned numbers. Do not try to invent your own network
# numbers but instead get one from your network provider (if any) or
# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)
#/etc/hosts hat das folgende
Format:[Internet Adresse] [Offizieller Hostname] [Alias1] [Alias2] ...Zum Beispiel:10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2Weitere Informationen entnehmen Sie bitte
&man.hosts.5;.Einstellungen mit &man.sysctl.8;sysctlEinstellungenmit sysctlMit &man.sysctl.8; können Sie Änderungen an
einem laufenden &os;-System vornehmen. Unter anderem
können Optionen des TCP/IP-Stacks oder des
virtuellen Speichermanagements verändert werden. Unter
der Hand eines erfahrenen Systemadministrators kann dies
die Systemperformance erheblich verbessern. Über 500
Variablen können mit &man.sysctl.8; gelesen und gesetzt
werden.Der Hauptzweck von &man.sysctl.8; besteht darin,
Systemeinstellungen zu lesen und zu verändern.Alle auslesbaren Variablen werden wie folgt
angezeigt:&prompt.user; sysctl -aUm eine spezielle Variable zu lesen, geben Sie den Namen
an:&prompt.user; sysctl kern.maxproc
kern.maxproc: 1044Um eine Variable zu setzen, benutzen Sie die Syntax
Variable=
Wert:&prompt.root; sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000Mit sysctl können Strings, Zahlen oder Boolean-Werte gesetzt
werden. Bei Boolean-Werten steht 1
für wahr und 0 für falsch.Um die Variablen automatisch während des Systemstarts zu
setzen, fügen Sie sie in /etc/sysctl.conf
ein. Weitere Informationen finden Sie in der Hilfeseite
&man.sysctl.conf.5; und in .sysctl.confsysctl.confsysctl/etc/sysctl.conf sieht ähnlich
wie /etc/rc.conf aus. Werte werden
in der Form Variable=Wert gesetzt.
Die angegebenen Werte werden gesetzt, nachdem sich das
System bereits im Mehrbenutzermodus befindet. Allerdings
lassen sich im Mehrbenutzermodus nicht alle Werte
setzen.Um das Protokollieren von fatalen Signalen abzustellen
und Benutzer daran zu hindern, von anderen Benutzern
gestartete Prozesse zu sehen, können Sie in
/etc/sysctl.conf die folgenden
Variablen setzen:# Do not log fatal signal exits (e.g. sig 11)
kern.logsigexit=0
# Prevent users from seeing information about processes that
# are being run under another UID.
security.bsd.see_other_uids=0Schreibgeschützte VariablenTomRhodesContributed by Wenn schreibgeschützte &man.sysctl.8;-Variablen verändert
werden, ist ein Neustart des Systems erforderlich.Beispielsweise hat &man.cardbus.4; auf einigen Laptops
Schwierigkeiten, Speicherbereiche zu erkennen. Es treten
dann Fehlermeldungen wie die folgende auf:cbb0: Could not map register memory
device_probe_and_attach: cbb0 attach returned 12Um dieses Problem zu lösen, muss eine
schreibgeschützte &man.sysctl.8;-Variable verändert werden.
Fügen Sie
in /boot/loader.conf hinzu und starten
Sie das System neu. Danach sollte &man.cardbus.4; fehlerfrei
funktionieren.Tuning von LaufwerkenDer folgende Abschnitt beschreibt die verschiedenen
Methoden zur Feinabstimmung der Laufwerke. Oft sind mechanische
Teile in Laufwerken, wie SCSI-Laufwerke,
verbaut. Diese können einen Flaschenhals bei der Gesamtleistung
des Systems darstellen. Sie können zwar auch ein Laufwerk ohne
mechanische Teile einbauen, wie z.B. ein
Solid-State-Drive, aber Laufwerke
mit mechanischen Teilen werden auch in naher Zukunft nicht vom
Markt verschwinden. Bei der Feinabstimmung ist es ratsam, die
Funktionen von &man.iostat.8; zu verwenden, um verschiedene
Änderungen zu testen und um nützliche
IO-Informationen des Systems zu
erhalten.Sysctl Variablenvfs.vmiodirenablevfs.vmiodirenableDie &man.sysctl.8;-Variable
vfs.vmiodirenable besitzt in der
Voreinstellung den Wert 1. Die Variable
kann auf den Wert 0 (deaktiviert) oder
1 (aktiviert) gesetzt werden. Sie
steuert, wie Verzeichnisse vom System zwischengespeichert
werden. Die meisten Verzeichnisse sind klein und benutzen
nur ein einzelnes Fragment, typischerweise 1 kB, im
Dateisystem und 512 Bytes im Buffer-Cache. Ist
die Variable deaktiviert, wird der Buffer-Cache nur
eine limitierte Anzahl Verzeichnisse zwischenspeichern, auch
wenn das System über sehr viel Speicher verfügt.
Ist die Variable aktiviert, kann der Buffer-Cache
den VM-Page-Cache benutzen, um
Verzeichnisse zwischenzuspeichern. Der ganze Speicher steht
damit zum Zwischenspeichern von Verzeichnissen zur
Verfügung. Der Nachteil bei dieser Vorgehensweise ist, dass
zum Zwischenspeichern eines Verzeichnisses mindestens eine
physikalische Seite im Speicher, die normalerweise 4 kB
groß ist, anstelle von 512 Bytes gebraucht wird. Es
wird empfohlen, diese Option aktiviert zu lassen, wenn Sie
Dienste zur Verfügung stellen, die viele Dateien
manipulieren. Beispiele für solche Dienste sind Web-Caches,
große Mail-Systeme oder Netnews. Die aktivierte
Variable vermindert, trotz des verschwendeten Speichers,
in aller Regel nicht die Leistung des Systems, obwohl Sie
das nachprüfen sollten.vfs.write_behindvfs.write_behindIn der Voreinstellung besitzt die
&man.sysctl.8;-Variable vfs.write_behind
den Wert 1 (aktiviert). Mit dieser
Einstellung schreibt das Dateisystem anfallende vollständige
Cluster, die besonders beim sequentiellen Schreiben großer
Dateien auftreten, direkt auf das Medium aus. Dies
verhindert, dass sich im Buffer-Cache veränderte Puffer
(dirty buffers) ansammeln,
die die I/O-Verarbeitung nicht mehr beschleunigen würden.
Unter bestimmten Umständen blockiert diese Funktion
allerdings Prozesse. Setzen Sie in diesem Fall die Variable
vfs.write_behind auf den Wert
0.vfs.hirunningspacevfs.hirunningspaceDie &man.sysctl.8;-Variable
vfs.hirunningspace bestimmt systemweit
die Menge ausstehender Schreiboperationen, die dem
Platten-Controller zu jedem beliebigen Zeitpunkt übergeben
werden können. Normalerweise können Sie den Vorgabewert
verwenden. Auf Systemen mit vielen Platten kann der Wert
aber auf 4 bis 5 Megabyte erhöht
werden. Ein zu hoher Wert (größer als der
Schreib-Schwellwert des Buffer-Caches) kann zu
Leistungsverlusten führen. Setzen Sie den Wert daher nicht
zu hoch! Hohe Werte können auch Leseoperationen verzögern,
die gleichzeitig mit Schreiboperationen ausgeführt
werden.Es gibt weitere &man.sysctl.8;-Variablen, mit denen Sie
den Buffer-Cache und den VM-Page-Cache
beeinflussen können. Es wird nicht empfohlen, diese
Variablen zu verändern, da das VM-System
den virtuellen Speicher selbst sehr gut verwaltet.vm.swap_idle_enabledvm.swap_idle_enabledDie &man.sysctl.8;-Variable
vm.swap_idle_enabled ist für große
Mehrbenutzer-Systeme gedacht, auf denen sich viele Benutzer
an- und abmelden und auf denen es viele Prozesse im Leerlauf
(idle) gibt. Solche Systeme
fragen kontinuierlich freien Speicher an. Wenn Sie die
Variable vm.swap_idle_enabled aktivieren,
können Sie die Auslagerungs-Hysterese von Seiten mit
den Variablen vm.swap_idle_threshold1 und
vm.swap_idle_threshold2 einstellen. Die
Schwellwerte beider Variablen geben die Zeit in Sekunden an,
in denen sich ein Prozess im Leerlauf befinden muss. Wenn
die Werte so eingestellt sind, dass Seiten früher als nach
dem normalen Algorithmus ausgelagert werden, verschafft das
dem Auslagerungs-Prozess mehr Luft. Aktivieren Sie diese
Funktion nur, wenn Sie sie wirklich benötigen: Die
Speicherseiten werden eher früher als später ausgelagert.
Der Platz im Swap-Bereich wird dadurch schneller verbraucht
und die Plattenaktivitäten steigen an. Auf kleinen
Systemen hat diese Funktion spürbare Auswirkungen. Auf
großen Systemen, die sowieso schon Seiten auslagern müssen,
können ganze Prozesse leichter in den Speicher geladen oder
ausgelagert werden.hw.ata.wchw.ata.wcObwohl das Abstellen des
IDE-Schreib-Zwischenspeichers die
Bandbreite zum Schreiben auf die
IDE-Festplatte verringert, kann es aus
Gründen der Datenkonsistenz als notwendig angesehen werden.
Das Problem ist, dass IDE-Platten keine
zuverlässige Aussage über das Ende eines Schreibvorgangs
treffen. Wenn der Schreib-Zwischenspeicher aktiviert ist,
werden die Daten nicht in der Reihenfolge ihres Eintreffens
geschrieben. Es kann sogar passieren, dass das Schreiben
mancher Blöcke im Fall von starker Plattenaktivität auf
unbefristete Zeit verzögert wird. Ein Absturz oder
Stromausfall zu dieser Zeit kann die Dateisysteme erheblich
beschädigen. Sie sollten den Wert der
&man.sysctl.8;-Variable hw.ata.wc auf dem
System überprüfen. Wenn der Schreib-Zwischenspeicher
abgestellt ist, können Sie ihn beim Systemstart aktivieren,
indem Sie die Variable in
/boot/loader.conf auf den Wert
1 setzen.Weitere Informationen finden Sie in &man.ata.4;.SCSI_DELAY
(kern.cam.scsi_delay)kern.cam.scsi_delayKerneloptionenSCSI DELAYMit der Kerneloption SCSI_DELAY kann
die Dauer des Systemstarts verringert werden. Der
Vorgabewert ist recht hoch und er verzögert den Systemstart
um 15 oder mehr Sekunden. Normalerweise
kann dieser Wert, insbesondere mit modernen Laufwerken, mit
der &man.sysctl.8;-Variable
kern.cam.scsi_delay auf
5 Sekunden heruntergesetzt werden. Die
Variable sowie die Kerneloption verwenden für die Zeitangabe
Millisekunden und nicht
Sekunden.Soft UpdatesSoft Updates&man.tunefs.8;Mit &man.tunefs.8; lassen sich Feineinstellungen an
Dateisystemen vornehmen. Das Programm hat verschiedene
Optionen. Soft Updates werden wie folgt ein- und
ausgeschaltet:&prompt.root; tunefs -n enable /filesystem
&prompt.root; tunefs -n disable /filesystemEin eingehängtes Dateisystem kann nicht mit &man.tunefs.8;
modifiziert werden. Soft Updates werden am besten im
Single-User Modus aktiviert, bevor Partitionen eingehangen
sind.Durch Einsatz eines Zwischenspeichers wird die Performance
im Bereich der Metadaten, vorwiegend beim Anlegen und Löschen
von Dateien, gesteigert. Es wird empfohlen, Soft Updates auf
allen UFS-Dateisystemen zu aktivieren.
Allerdings sollten Sie sich über die zwei Nachteile von Soft
Updates bewusst sein: Erstens garantieren Soft Updates zwar
die Konsistenz der Daten im Fall eines Absturzes, aber es kann
passieren, dass das Dateisystem über mehrere Sekunden oder gar
eine Minute nicht synchronisiert wurde. Nicht geschriebene
Daten gehen dann vielleicht verloren. Zweitens verzögern Soft
Updates die Freigabe von Datenblöcken. Eine größere
Aktualisierung eines fast vollen Dateisystems, wie dem
Root-Dateisystem, z.B. während eines
make installworld, kann das Dateisystem
vollaufen lassen. Dadurch würde die Aktualisierung
fehlschlagen.Details über Soft UpdatesSoft UpdatesDetailsBei einem Metadaten-Update werden die Inodes und
Verzeichniseinträge aktualisiert auf die Platte
zurückgeschrieben. Es gibt zwei klassische Ansätze, um die
Metadaten des Dateisystems auf die Platte zu
schreiben.Das historisch übliche Verfahren waren synchrone
Updates der Metadaten, d. h. wenn eine Änderung an
einem Verzeichnis nötig war, wurde anschließend
gewartet, bis diese Änderung tatsächlich auf die
Platte zurückgeschrieben worden war. Der
Inhalt der Dateien wurde im
Buffer Cache zwischengespeichert und
später asynchron auf die Platte geschrieben.
Der Vorteil dieser Implementierung ist, dass sie
sicher funktioniert. Wenn während eines Updates ein
Ausfall erfolgt, haben die Metadaten immer einen
konsistenten Zustand. Eine Datei ist entweder komplett
angelegt oder gar nicht. Wenn die Datenblöcke einer
Datei im Fall eines Absturzes noch nicht den Weg aus dem
Buffer Cache auf die Platte gefunden haben,
kann &man.fsck.8; das Dateisystem reparieren, indem es die
Dateilänge einfach auf 0 setzt. Außerdem
ist die Implementierung einfach und überschaubar. Der
Nachteil ist, dass Änderungen der Metadaten sehr
langsam vor sich gehen. Ein rm -r
beispielsweise fasst alle Dateien eines Verzeichnisses
der Reihe nach an, aber jede dieser Änderungen am
Verzeichnis (Löschen einer Datei) wird einzeln synchron
auf die Platte geschrieben. Gleiches beim Auspacken
großer Hierarchien mit tar -x.Der zweite Ansatz sind asynchrone Metadaten-Updates.
Das ist der Standard, wenn
UFS-Dateisysteme mit
mount -o async eingehängt werden. Man
schickt die Updates der Metadaten einfach auch noch
über den Buffer Cache, sie werden also
zwischen die Updates der normalen Daten eingeschoben.
Vorteil ist, dass man nun nicht mehr auf jeden Update
warten muss, Operationen, die zahlreiche Metadaten
ändern, werden also viel schneller. Auch
hier ist die Implementierung sehr einfach und wenig
anfällig für Fehler. Nachteil ist, dass
keinerlei Konsistenz des Dateisystems mehr gesichert ist.
Wenn mitten in einer Operation, die viele Metadaten
ändert, ein Ausfall erfolgt (Stromausfall, drücken
des Reset-Schalters), dann ist das Dateisystem
anschließend in einem unbestimmten Zustand. Niemand
kann genau sagen, was noch geschrieben worden ist und was
nicht mehr; die Datenblöcke einer Datei können
schon auf der Platte stehen, während die inode Tabelle
oder das zugehörige Verzeichnis nicht mehr aktualisiert
worden ist. Man kann praktisch kein &man.fsck.8;
mehr implementieren, das diesen Zustand
wieder reparieren kann, da die dazu nötigen
Informationen einfach auf der Platte fehlen. Wenn ein
Dateisystem irreparabel beschädigt wurde, hat man nur noch
die Möglichkeit es neu zu erzeugen und die Daten vom Backup
zurückspielen.Der Ausweg aus diesem Dilemma ist ein
dirty region logging, was auch als
Journalling bezeichnet wird. Man
schreibt die Metadaten-Updates zwar synchron, aber nur in
einen kleinen Plattenbereich, die
logging area. Von da aus werden sie
dann asynchron auf ihre eigentlichen Bereiche verteilt. Da
die logging area ein kleines
zusammenhängendes Stückchen ist, haben die
Schreibköpfe der Platte bei massiven Operationen auf
Metadaten keine allzu großen Wege zurückzulegen,
so dass alles ein ganzes Stück schneller geht als
bei klassischen synchronen Updates. Die Komplexität
der Implementierung hält sich ebenfalls in Grenzen,
somit auch die Anfälligkeit für Fehler. Als
Nachteil ergibt sich, dass Metadaten zweimal auf die
Platte geschrieben werden müssen (einmal in die
logging area, einmal an die richtige
Stelle), so dass das im Falle regulärer
Arbeit (also keine gehäuften Metadatenoperationen) eine
Pessimisierung des Falls der synchronen
Updates eintritt, es wird alles langsamer. Dafür hat man
als Vorteil, dass im Falle eines Absturzes der
konsistente Zustand dadurch erzielbar ist, dass die
angefangenen Operationen aus dem dirty region
log entweder zu Ende ausgeführt oder
komplett verworfen werden, wodurch das Dateisystem schnell
wieder zur Verfügung steht.Die Lösung von Kirk McKusick, dem Schöpfer von
Berkeley FFS, waren
Soft Updates: die
notwendigen Updates der Metadaten werden im Speicher
gehalten und dann sortiert auf die Platte geschrieben
(ordered metadata updates). Dadurch hat man
den Effekt, dass im Falle massiver
Metadaten-Änderungen spätere Operationen die
vorhergehenden, noch nicht auf die Platte geschriebenen
Updates desselben Elements im Speicher
einholen. Alle Operationen, auf ein
Verzeichnis beispielsweise, werden also in der Regel noch im
Speicher abgewickelt, bevor der Update überhaupt auf
die Platte geschrieben wird (die dazugehörigen
Datenblöcke werden natürlich auch so sortiert,
dass sie nicht vor ihren Metadaten auf der Platte
sind). Im Fall eines Absturzes hat man ein implizites
log rewind: alle Operationen, die noch nicht
den Weg auf die Platte gefunden haben, sehen danach so aus,
als hätten sie nie stattgefunden. Man hat so also den
konsistenten Zustand von ca. 30 bis 60 Sekunden früher
sichergestellt. Der verwendete Algorithmus garantiert
dabei, dass alle tatsächlich benutzten Ressourcen
auch in den entsprechenden Bitmaps (Block- und inode
Tabellen) als belegt markiert sind. Der einzige Fehler, der
auftreten kann, ist, dass Ressourcen noch als
belegt markiert sind, die tatsächlich
frei sind. &man.fsck.8; erkennt dies und
korrigiert diese nicht mehr belegten Ressourcen. Die
Notwendigkeit eines Dateisystem-Checks darf aus diesem
Grunde auch ignoriert und das Dateisystem mittels
mount -f zwangsweise eingebunden werden.
Um noch allozierte Ressourcen freizugeben muss
später ein &man.fsck.8; nachgeholt werden. Das ist
dann auch die Idee des background fsck:
beim Starten des Systems wird lediglich ein
Schnappschuss des Dateisystems
gemacht, mit dem &man.fsck.8; dann später arbeiten
kann. Alle Dateisysteme dürfen unsauber
eingebunden werden und das System kann sofort in den
Multiuser-Modus gehen. Danach wird ein
Hintergrund-&man.fsck.8; für die Dateisysteme gestartet, die
dies benötigen, um möglicherweise irrtümlich belegte
Ressourcen freizugeben. Dateisysteme ohne
Soft Updates benötigen natürlich immer
noch den üblichen Vordergrund-&man.fsck.8;, bevor sie
eingebunden werden können.Der Vorteil ist, dass die Metadaten-Operationen
beinahe so schnell ablaufen wie im asynchronen Fall, also
auch schneller als beim logging, das
die Metadaten immer zweimal schreiben muss. Als Nachteil
stehen dem die Komplexität des Codes, ein erhöhter
Speicherverbrauch und einige spezielle Eigenheiten entgegen.
Nach einem Absturz ist ein etwas älterer
Stand auf der Platte – statt einer leeren, aber
bereits angelegten Datei, wie nach einem herkömmlichen
&man.fsck.8; Lauf, ist auf einem Dateisystem mit
Soft Updates keine Spur der
entsprechenden Datei mehr zu sehen, da weder die Metadaten
noch der Dateiinhalt je auf die Platte geschrieben wurden.
Weiterhin kann der Platz nach einem &man.rm.1;
nicht sofort wieder als verfügbar markiert werden,
sondern erst dann, wenn der Update auch auf die Platte
vermittelt worden ist. Dies kann besonders dann Probleme
bereiten, wenn große Datenmengen in einem Dateisystem
installiert werden, das nicht genügend Platz hat, um alle
Dateien zweimal unterzubringen.Einstellungen von Kernel LimitsEinstellungenvon Kernel LimitsDatei und Prozeß Limitskern.maxfileskern.maxfilesAbhängig von den Anforderungen an das System kann die
&man.sysctl.8;-Variable kern.maxfiles
erhöht oder gesenkt werden. Die Variable legt die maximale
Anzahl von Dateideskriptoren auf dem System fest. Wenn die
Dateideskriptoren aufgebraucht sind, werden Sie die Meldung
file: table is full wiederholt im
Puffer für Systemmeldungen sehen. Den Inhalt des Puffers
können Sie sich mit &man.dmesg.8; anzeigen lassen.Jede offene Datei, jedes Socket und jede FIFO verbraucht
einen Dateideskriptor. Auf dicken
Produktionsservern können leicht Tausende Dateideskriptoren
benötigt werden, abhängig von der Art und Anzahl der
gleichzeitig laufenden Dienste.In älteren &os;-Versionen wurde die Voreinstellung
von kern.maxfile aus der
Kernelkonfigurationsoption maxusers
bestimmt. kern.maxfiles wächst
proportional mit dem Wert von maxusers.
Wenn Sie einen angepassten Kernel kompilieren, empfiehlt es
sich diese Option entsprechend der maximalen Benutzerzahl
des Systems einzustellen. Obwohl auf einer
Produktionsmaschine vielleicht nicht 256 Benutzer
gleichzeitig angemeldet sind, können die benötigten
Ressourcen ähnlich hoch wie bei einem großen Webserver
sein.Die nur lesbare &man.sysctl.8;-Variable
kern.maxusers wird beim Systemstart
automatisch aus dem zur Verfügung stehenden Hauptspeicher
bestimmt. Im laufenden Betrieb kann dieser Wert aus
kern.maxusers ermittelt werden. Einige
Systeme benötigen für diese Variable einen anderen Wert,
wobei 64, 128 und
256 gewöhnliche Werte darstellen.
Es wird nicht empfohlen, die Anzahl der Dateideskriptoren
auf einen Wert größer 256 zu setzen, es
sei denn, Sie benötigen wirklich eine riesige Anzahl von
ihnen. Viele der von kern.maxusers auf
einen Standardwert gesetzten Parameter können beim
Systemstart oder im laufenden Betrieb in
/boot/loader.conf angepasst werden.
In &man.loader.conf.5; und
/boot/defaults/loader.conf finden Sie
weitere Details und Hinweise.Ältere &os;-Versionen setzen diesen Wert selbst, wenn
Sie in der Konfigurationsdatei den Wert 0Der verwendete Algorithmus setzt
maxusers auf die Speichergröße des
Systems. Der minimale Wert beträgt dabei
32, das Maximum ist
384.
angeben. Wenn Sie den Wert selbst bestimmen wollen,
sollten Sie maxusers mindestens auf
4 setzen. Dies gilt insbesondere dann,
wenn Sie beabsichtigen, &xorg; zu
benutzen oder Software zu kompilieren. Der wichtigste Wert,
der durch maxusers bestimmt wird, die
maximale Anzahl an Prozessen ist, die auf
20 + 16 * maxusers gesetzt wird. Wird
maxusers auf 1 setzen,
können gleichzeitig nur 36 Prozesse
laufen, von denen ungefähr 18 schon beim
Booten des Systems gestartet werden. Dazu kommen nochmals
etwa 15 Prozesse beim Start von
&xorg;. Selbst eine einfache
Aufgabe wie das Lesen einer Manualpage benötigt neun
Prozesse zum Filtern, Dekomprimieren und Betrachten der
Datei. Für die meisten Benutzer sollte es ausreichen,
maxusers auf 64 zu
setzen, womit 1044 gleichzeitige Prozesse
zur Verfügung stehen. Wenn Sie allerdings den Fehler
proc table full beim Start eines
Programms oder auf einem Server mit einer großen
Benutzerzahl sehen, dann sollten Sie den Wert nochmals
erhöhen und den Kernel neu bauen.Die Anzahl der Benutzer, die sich auf einem
Rechner anmelden kann, wird durch
maxusersnicht
begrenzt. Der Wert dieser Variablen legt neben der
möglichen Anzahl der Prozesse eines Benutzers weitere
sinnvolle Größen für bestimmte Systemtabellen fest.kern.ipc.soacceptqueuekern.ipc.soacceptqueueDie &man.sysctl.8;-Variable
kern.ipc.soacceptqueue beschränkt die
Größe der Warteschlange
(Listen-Queue) für neue
TCP-Verbindungen. Der Vorgabewert von
128 ist normalerweise zu klein, um neue
Verbindungen auf einem stark ausgelasteten Webserver
zuverlässig zu handhaben. Auf solchen Servern sollte
der Wert auf 1024 oder höher gesetzt
werden. Dienste wie &man.sendmail.8; oder
Apache können die Größe
der Queue selbst einschränken. Oft gibt es die
Möglichkeit, die Größe der Listen-Queue in
einer Konfigurationsdatei einzustellen. Eine große
Listen-Queue übersteht vielleicht auch einen
Denial of Service Angriff (DoS).Netzwerk LimitsDie Kerneloption NMBCLUSTERS schreibt
die Anzahl der Netzwerkpuffer (Mbufs) fest, die das System
besitzt. Eine zu geringe Anzahl Mbufs auf einem Server mit
viel Netzwerkverkehr verringert die Leistung von &os;. Jeder
Mbuf-Cluster nimmt ungefähr 2 kB Speicher in Anspruch, so
dass ein Wert von 1024 insgesamt
2 Megabyte Speicher für Netzwerkpuffer im System
reserviert. Wie viele Cluster benötigt werden, lässt sich
durch eine einfache Berechnung herausfinden. Ein Webserver,
der maximal 1000 gleichzeitige Verbindungen
servieren soll, wobei jede der Verbindungen einen 6 kB
großen Sendepuffer und einen 16 kB großen Empfangspuffer
benötigt, braucht ungefähr 32 MB Speicher für
Netzwerkpuffer. Als Daumenregel verdoppeln Sie diese Zahl, so
dass sich für NMBCLUSTERS der Wert
2x32 MB / 2 kB=
64 MB / 2 kB=
32768 ergibt. Für Maschinen mit viel
Speicher werden Werte zwischen 4096 und
32768 empfohlen. Unter keinen Umständen
sollten Sie diesen Wert willkürlich erhöhen, da dies zu einem
Absturz beim Systemstart führen kann. Verwenden Sie
&man.netstat.1; mit um den Gebrauch der
Netzwerkpuffer zu kontrollieren.Die Netzwerkpuffer können beim Systemstart mit der
Loader-Variablen kern.ipc.nmbclusters
eingestellt werden. Nur auf älteren &os;-Systemen
müssen Sie die Kerneloption NMBCLUSTERS
verwenden.Die Anzahl der &man.sendfile.2; Puffer muss auf
ausgelasteten Servern, die den Systemaufruf &man.sendfile.2;
oft verwenden, vielleicht erhöht werden. Dazu können Sie die
Kerneloption NSFBUFS verwenden oder die
Anzahl der Puffer in /boot/loader.conf
(siehe &man.loader.8;) setzen. Die Puffer sollten erhöht
werden, wenn Sie Prozesse im Zustand sfbufa
sehen. Die schreibgeschützte &man.sysctl.8;-Variable
kern.ipc.nsfbufs zeigt die Anzahl
eingerichteten Puffer im Kernel. Der Wert dieser Variablen
wird normalerweise von kern.maxusers
bestimmt. Manchmal muss die Pufferanzahl jedoch manuell
eingestellt werden.Auch wenn ein Socket nicht blockierend angelegt wurde,
kann der Aufruf von &man.sendfile.2; blockieren, um auf
freie struct sf_buf Puffer zu
warten.net.inet.ip.portrange.*net.inet.ip.portrange.*Die &man.sysctl.8;-Variable
net.inet.ip.portrange.* legt die
Portnummern für TCP- und
UDP-Sockets fest. Es gibt drei
Bereiche: den niedrigen Bereich, den normalen Bereich und
den hohen Bereich. Die meisten Netzprogramme benutzen den
normalen Bereich. Dieser Bereich umfasst in der
Voreinstellung die Portnummern 1024 bis
5000 und wird durch die Variablen
net.inet.ip.portrange.first und
net.inet.ip.portrange.last
festgelegt. Die festgelegten Bereiche für Portnummern
werden von ausgehenden Verbindungen benutzt. Unter
bestimmten Umständen, beispielsweise auf stark ausgelasteten
Proxy-Servern, sind alle Portnummern für ausgehende
Verbindungen belegt. Bereiche
für Portnummern spielen auf Servern keine Rolle, die
hauptsächlich eingehende Verbindungen verarbeiten (wie ein
normaler Webserver) oder nur eine begrenzte Anzahl
ausgehender Verbindungen öffnen (beispielsweise ein
Mail-Relay). Wenn keine freien Portnummern mehr vorhanden
sind, sollte die Variable
net.inet.ip.portrange.last langsam
erhöht werden. Ein Wert von 10000,
20000 oder 30000 ist
angemessen. Beachten Sie auch eine vorhandene Firewall,
wenn Sie die Bereiche für Portnummern ändern. Einige
Firewalls sperren große Bereiche (normalerweise aus den
kleinen Portnummern) und erwarten, dass hohe Portnummern für
ausgehende Verbindungen verwendet werden. Daher kann es
erforderlich sein, den Wert von
net.inet.ip.portrange.first zu
erhöhen.TCP Bandwidth Delay Product
BegrenzungTCP Bandwidth Delay Product
Begrenzungnet.inet.tcp.inflight.enableDie TCP Bandwidth Delay Product
Begrenzung wird aktiviert, indem die &man.sysctl.8;-Variable
net.inet.tcp.inflight.enable auf den
Wert 1 gesetzt wird. Das System wird
dadurch angewiesen, für jede Verbindung, das Produkt aus der
Übertragungsrate und der Verzögerungszeit zu bestimmen.
Dieses Produkt begrenzt die Datenmenge, die für einen
optimalen Durchsatz zwischengespeichert werden muss.Diese Begrenzung ist nützlich, wenn Sie Daten
über Verbindungen mit einem hohen Produkt aus
Übertragungsrate und Verzögerungszeit wie Modems,
Gigabit-Ethernet oder schnellen WANs, zur
Verfügung stellen. Insbesondere wirkt sich die Begrenzung
aus, wenn die Verbindung die Option
Window-scaling verwendet oder
große Sende-Fenster
(send window) benutzt.
Schalten Sie die Debug-Meldungen aus, wenn Sie die
Begrenzung aktiviert haben. Dazu setzen Sie die Variable
net.inet.tcp.inflight.debug auf
0. Auf Produktions-Systemen sollten Sie
zudem die Variable
net.inet.tcp.inflight.min mindestens auf
den Wert 6144 setzen. Allerdings kann
ein zu hoher Wert, abhängig von der Verbindung, die
Begrenzungsfunktion unwirksam machen. Die Begrenzung
reduziert die Datenmenge in den Queues von Routern und
Switches, sowie die Datenmenge in der Queue der lokalen
Netzwerkkarte. Die Verzögerungszeit
(Round Trip Time) für
interaktive Anwendungen sinkt, da weniger Pakete
zwischengespeichert werden. Dies gilt besonders für
Verbindungen über langsame Modems. Die Begrenzung
wirkt sich allerdings nur auf das Versenden von Daten aus
(Uploads, Server). Auf den Empfang von Daten (Downloads)
hat die Begrenzung keine Auswirkungen.Die Variable
net.inet.tcp.inflight.stab sollte
nicht angepasst werden. Der
Vorgabewert der Variablen beträgt 20,
das heißt es werden maximal zwei Pakete zu dem Produkt
aus Übertragungsrate und Verzögerungszeit addiert.
Dies stabilisiert den Algorithmus und verbessert die
Reaktionszeit auf Veränderungen. Bei langsamen
Verbindungen können sich aber die Laufzeiten der Pakete
erhöhen (ohne diesen Algorithmus wären sie allerdings noch
höher). In solchen Fällen können Sie versuchen, den Wert
der Variablen auf 15,
10 oder 5
herabzusetzen. Gleichzeitig müssen Sie vielleicht auch
net.inet.tcp.inflight.min auf einen
kleineren Wert (beispielsweise 3500)
setzen. Ändern Sie diese Variablen nur ab, wenn Sie
keine anderen Möglichkeiten mehr haben.Virtueller Speicher (Virtual
Memory)kern.maxvnodesEin vnode ist die interne Darstellung einer Datei oder
eines Verzeichnisses. Die Erhöhung der Anzahl der für das
Betriebssystem verfügbaren vnodes verringert also die
Schreib- und Lesezugriffe auf der Festplatte. vnodes
werden im Normalfall vom Betriebssystem automatisch vergeben
und müssen nicht manuell angepasst werden. In einigen
Fällen stellt der Zugriff auf eine Platte allerdings einen
Flaschenhals dar, daher sollten Sie in diesem Fall die
Anzahl der möglichen vnodes erhöhen, um dieses Problem zu
beheben. Beachten Sie dabei aber die Größe des inaktiven
und freien Hauptspeichers.Um die Anzahl der derzeit verwendeten vnodes zu sehen,
geben Sie Folgendes ein:&prompt.root; sysctl vfs.numvnodes
vfs.numvnodes: 91349Die maximal mögliche Anzahl der vnodes erhalten Sie
durch die Eingabe von:&prompt.root; sysctl kern.maxvnodes
kern.maxvnodes: 100000Wenn sich die Anzahl der genutzten vnodes dem maximal
möglichen Wert nähert, sollten Sie den Wert
kern.maxvnodes zuerst um etwa
1000 erhöhen. Beobachten Sie danach die
Anzahl der vom System genutzten
vfs.numvnodes. Nähert sich der Wert
wiederum dem definierten Maximum, müssen Sie
kern.maxvnodes nochmals erhöhen. Sie
sollten nun eine Änderung des Speicherverbrauches über
&man.top.1; registrieren können und über mehr aktiven
Speicher verfügen.Hinzufügen von Swap-BereichenManchmal benötigt ein System mehr Swap-Bereiche. Dieser
Abschnitt beschreibt zwei Methoden, um Swap-Bereiche
hinzuzufügen: auf einer bestehenden Partition oder auf einem
neuen Laufwerk, und das Hinzufügen einer Swap-Datei auf einer
existierenden Partition.Für Informationen zur Verschlüsselung von
Swap-Partitionen, zu den dabei möglichen Optionen sowie
zu den Gründen für eine Verschlüsselung des
Auslagerungsspeichers lesen Sie
.Swap auf einer neuen Festplatte oder einer existierenden
PartitionDas Hinzufügen einer neuen Festplatte für den Swap-Bereich
bietet eine bessere Leistung, als die Verwendung
einer Partition auf einem vorhandenem Laufwerk. Die
Einrichtung von Partitionen und Laufwerken wird in
beschrieben.
diskutiert Aspekte über
die Anordnung und Größe von Swap-Bereichen.Benutzen Sie swapon um eine
Swap-Partition zum System hinzuzufügen. Zum Beispiel:&prompt.root; swapon /dev/ada1s1bSie können jede Partition verwenden, sofern sie nicht
schon eingehangen ist. Das gilt auch dann, wenn die
Partition bereits Daten enthält. Wird
swapon auf
einer Partition ausgeführt die Daten enthält, werden
die vorhandenen Daten überschrieben und sind unweigerlich
verloren. Stellen Sie sicher, dass die Partition, die Sie
als Swap-Bereich hinzufügen möchten, wirklich die gewünschte
Partition ist, bevor Sie swapon
ausführen.Um diese Swap-Partition automatisch beim Systemstart
hinzuzufügen, fügen Sie einen Eintrag in
/etc/fstab hinzu:/dev/ada1s1b none swap sw 0 0Die einzelnen Einträge von /etc/fstab
werden in &man.fstab.5; erläutert. Weitere Informationen zu
swapon finden Sie in &man.swapon.8;.Swap-Dateien erstellenAnstatt eine Partition zu verwenden, erstellen diese
Beispiele eine 64 MB große Swap-Datei mit dem Namen
/usr/swap0.Die Verwendung von Swap-Dateien macht es erforderlich,
dass das Modul &man.md.4; entweder im Kernel vorhanden oder
geladen wird, bevor Swap aktiviert ist. enthält Informationen zum Bau eines
angepassten Kernels.Erstellen einer Swap-Datei unter
&os; 10.X und neuerErstellen Sie die Swap-Datei:&prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64Setzen Sie die richtigen Berechtigungen für die neue
Datei:&prompt.root; chmod 0600 /usr/swap0Fügen Sie einen Eintrag in
/etc/fstab hinzu:md99 none swap sw,file=/usr/swap0,late 0 0Das &man.md.4; Gerät md99 wird
verwendet, damit die niedrigeren Gerätenummer für die
interaktive Benutzung frei bleiben.Der Swap-Speicher wird nun automatisch beim
Systemstart hinzugefügt. Benutzen Sie &man.swapon.8; um
den Swap-Speicher direkt zu aktivieren:&prompt.root; swapon -aLErstellen einer Swap-Datei unter
&os; 9.X und älterErstellen Sie die Swap-Datei
/usr/swap0:&prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64Setzen Sie die richtigen Berechtigungen für die neue
Datei:&prompt.root; chmod 0600 /usr/swap0Aktivieren Sie die Swap-Datei in
/etc/rc.conf:swapfile="/usr/swap0" # Set to name of swap fileUm die Swap-Datei sofort zu aktivieren,
spezifizieren Sie ein speicherbasiertes Laufwerk.
enthält weitere
Informationen.&prompt.root; mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0Energie- und RessourcenverwaltungHitenPandyaVerfasst von TomRhodesEs ist wichtig, Hardware effizient einzusetzen. Energie-
und Ressourcenverwaltung ermöglicht es dem System auf
verschiedene Ereignisse, beispielsweise einen unerwarteten
Temperaturanstieg, reagieren zu können. Eine frühe
Spezifikation für die Energieverwaltung war das
Advanced Power Management
(APM). APM steuert den
Energieverbrauch eines Systems auf Basis der Systemaktivität.
Ursprünglich konnten Stromverbrauch und Wärmeabgabe eines
Systems nur schlecht von Betriebssystemen gesteuert werden.
Die Hardware wurde vom BIOS gesteuert, was
die Kontrolle der Energieverwaltung für den Anwender erschwerte.
Das APM-BIOS wird von dem
Hersteller des Systems zur Verfügung gestellt und ist auf die
spezielle Hardware angepasst. Der
APM-Treiber des Betriebssystems greift auf
das
APM Software Interface
zu, das den Energieverbrauch regelt.APM hat hauptsächlich vier Probleme.
Erstens läuft die Energieverwaltung unabhängig vom
Betriebssystem in einem herstellerspezifischen
BIOS. Beispielsweise kann das
APM-BIOS die Festplatten
nach einer konfigurierbaren Zeit ohne die Zustimmung des
Betriebssystems herunterfahren. Zweitens befindet sich die
ganze APM-Logik im BIOS;
das Betriebssystem hat gar keine
APM-Komponenten. Bei Problemen mit dem
APM-BIOS muss das
Flash-ROM aktualisiert werden. Diese Prozedur ist gefährlich,
da sie im Fehlerfall das System unbrauchbar machen kann. Zum
Dritten ist APM eine Technik, die
herstellerspezifisch ist und nicht koordiniert wird. Fehler im
BIOS eines Herstellers werden nicht unbedingt
im BIOS anderer Hersteller korrigiert. Das
letzte Problem ist, dass im
APM-BIOS nicht genügend
Platz vorhanden ist, um eine durchdachte oder eine auf den Zweck
der Maschine zugeschnittene Energieverwaltung zu
implementieren.Das Plug and Play BIOS
(PNPBIOS) war in vielen
Situationen ebenfalls unzureichend. Das
PNPBIOS verwendet eine 16-Bit-Technik. Damit
das Betriebssystem das PNPBIOS ansprechen
kann, muss es in einer 16-Bit-Emulation laufen. &os; stellt
einen APM-Treiber zur Verfügung, welcher für
Systeme benutzt werden sollte, die vor dem Jahr 2000 hergestellt
wurden. Der Treiber wird in &man.apm.4; beschrieben.ACPIAPMDer Nachfolger von APM ist das
Advanced Configuration and Power Interface
(ACPI). ACPI ist ein
Standard verschiedener Hersteller, welcher die Verwaltung von
Hardware und Energiesparfunktionen festlegt. Die
ACPI-Funktionen, die mehr Kontrolle und
Flexibilität bieten, können vom Betriebssystem gesteuert
werden.Dieser Abschnitt zeigt die Konfiguration von
ACPI unter &os;. Zudem werden einige Tipps
zur Fehlersuche vorgestellt und wie Sie Problemberichte
einreichen können, sodass Entwickler
ACPI-Probleme erfassen und beheben
können.Konfiguration des ACPIDer &man.acpi.4;-Treiber wird standardmäßig beim
Systemstart vom &man.loader.8; geladen und sollte daher
nicht fest in den Kernel eingebunden
werden. Der Treiber kann im laufenden Betrieb nicht entfernt
werden, da er zur Kommunikation mit der Hardware verwendet
wird. Falls jedoch Probleme auftreten, kann
ACPI auch komplett deaktiviert werden.
Dazu muss hint.acpi.0.disabled="1" in
/boot/loader.conf gesetzt und
anschließend das System neu gestartet werden. Alternativ
können Sie diese Variable auch am &man.loader.8;-Prompt
eingeben, wie in
beschrieben.ACPI und APM
können nicht zusammen verwendet werden. Das zuletzt
geladene Modul beendet sich, sobald es bemerkt, dass das
andere Modul geladen ist.Mit acpiconf können Sie das System in
einen Ruhemodus (sleep mode)
versetzen. Es gibt verschiedene Modi
(von 1 bis 5), die Sie
auf der Kommandozeile mit angeben können.
Für die meisten Anwender sind die Modi 1
und 3 völlig ausreichend. Der Modus
5 schaltet das System
aus (Soft-off) und entspricht
dem Befehl halt -p.Verschiedene Optionen können mit sysctl
gesetzt werden. Lesen Sie dazu &man.acpi.4; sowie
&man.acpiconf.8;.Häufige ProblemeACPIACPI gibt es in allen modernen Rechnern
der ia32- (x86), ia64- (Itanium) und amd64-
(AMD) Architektur.
Der vollständige Standard bietet Funktionen zur Steuerung und
Verwaltung der CPU-Leistung, der
Stromversorgung, von Wärmebereichen, Batterien, eingebetteten
Controllern und Bussen. Auf den meisten Systemen wird nicht
der vollständige Standard implementiert. Arbeitsplatzrechner
besitzen meist nur Funktionen zur Verwaltung der Busse,
während Notebooks Funktionen zur Temperaturkontrolle und
Ruhezustände besitzen.Ein ACPI konformes System besitzt
verschiedene Komponenten. Die BIOS- und
Chipsatz-Hersteller stellen mehrere statische Tabellen bereit,
zum Beispiel die
Fixed-ACPI-Description-Table
(FADT). Die Tabellen enthalten
beispielsweise die mit SMP-Systemen
benutzte APIC-Map, Konfigurationsregister
und einfache Konfigurationen. Zusätzlich gibt es die
Differentiated-System-Description-Table
(DSDT), die Bytecode enthält. Die Tabelle
ordnet Geräte und Methoden in einem baumartigen Namensraum
an.Ein ACPI-Treiber muss die statischen
Tabellen einlesen, einen Interpreter für den Bytecode
bereitstellen und die Gerätetreiber im Kernel so
modifizieren, dass sie mit dem
ACPI-Subsystem kommunizieren. Für &os;,
&linux; und NetBSD hat &intel; den Interpreter
ACPI-CA, zur Verfügung gestellt. Der
Quelltext zu ACPI-CA befindet sich im
Verzeichnis src/sys/contrib/dev/acpica.
Die Schnittstelle von ACPI-CA zu &os;
befindet sich unter
src/sys/dev/acpica/Osd. Treiber, die
verschiedene ACPI-Geräte implementieren,
befinden sich im Verzeichnis
src/sys/dev/acpica.ACPIProbleme mitDamit ACPI richtig funktioniert,
müssen alle Teile funktionieren. Im Folgenden
finden Sie eine Liste mit Problemen und möglichen
Abhilfen oder Korrekturen. Die Liste ist nach
der Häufigkeit, mit der die Probleme auftreten,
sortiert. Wenn eine Korrektur das Problem nicht
behebt, finden Sie in
Anweisungen, wie Sie einen Problembericht einreichen
können.MausproblemeEs kann vorkommen, dass die Maus nicht mehr
funktioniert, wenn Sie nach einem Suspend weiterarbeiten
wollen. Ist dies bei Ihnen der Fall, reicht es meistens
aus, den Eintrag
hint.psm.0.flags="0x3000" in
/boot/loader.conf aufzunehmen.Suspend/ResumeACPI kennt drei
Suspend-to-RAM-Zustände
(STR),
S1-S3 sowie einen
Suspend-to-Disk-Zustand (STD)
S4. STD kann auf zwei
Arten implementiert werden:
S4BIOS und
S4OS. Im ersten Fall
wird der Suspend-to-Disk-Zustand durch das
BIOS hergestellt im zweiten Fall alleine
durch das Betriebssystem. Der Zustand S5
wird Soft off genannt. In diesem Zustand
befindet sich ein Rechner, wenn die Stromversorgung
angeschlossen ist, der Rechner aber nicht hochgefahren
ist.Benutzen Sie sysctl hw.acpi um die
Suspend-Zustände zu ermitteln. Diese Beispielausgabe stammt
von einem Thinkpad:hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.s4bios: 0Diese Ausgabe besagt, dass mit dem Befehl
acpiconf -s die Zustände
S3, S4
und S5 eingestellt werden können.
Hätte den Wert
1, gäbe es den Zustand
S4BIOS anstelle
von S4.Wenn Sie die Suspend- und Resume-Funktionen
testen, fangen Sie mit dem S1-Zustand
an, wenn er angeboten wird. Dieser Zustand wird
am ehesten funktionieren, da der Zustand wenig
Treiber-Unterstützung benötigt. Der Zustand
S2 ist ähnlich wie
S1, allerdings hat ihn noch niemand
implementiert. Als nächstes sollten Sie den
Zustand S3 ausprobieren. Dies
ist der tiefste STR-Schlafzustand.
Dieser Zustand ist auf massive Treiber-Unterstützung
angewiesen, um die Geräte wieder richtig zu
initialisieren.Ein häufiges Problem mit Suspend/Resume ist,
dass viele Gerätetreiber ihre Firmware, Register
und Gerätespeicher nicht korrekt speichern,
wiederherstellen und/oder reinitialisieren. Um dieses
Problem zu lösen, sollten Sie zuerst die
folgenden Befehle ausführen:&prompt.root; sysctl debug.bootverbose=1
&prompt.root; sysctl debug.acpi.suspend_bounce=1
&prompt.root; acpiconf -s 3Dieser Test emuliert einen Suspend/Resume-Zyklus für
alle Geräte (ohne dass diese dabei wirklich in den Status
S3 wechseln). In vielen Fällen
reicht dies bereits aus, um Probleme (beispielsweise
verlorener Firmware-Status, Timeouts, hängende Geräte)
zu entdecken. Beachten Sie dabei, dass das Gerät bei
diesem Test nicht wirklich in den Status
S3 wechseln. Es kann also vorkommen,
dass manche Geräte weiterhin mit Strom versorgt werden (dies
wäre bei einem wirklichen Wechsel in den Status
S3 NICHT möglich.
Andere Geräte werden normal weiterarbeiten, weil sie
über keine Suspend/Resume-Funktionen verfügen.Schwierigere Fälle können den Einsatz
zusätzlicher Hardware (beispielsweise serielle
Ports/Kabel für die Verbindung über eine
serielle Konsole oder Firewire-Ports/Kabel für
&man.dcons.4;) sowie Kenntnisse im Bereich
Kerneldebugging erforderlich machen.Um das Problem einzugrenzen, entladen Sie soviele
Treiber wie möglich. Wenn das funktioniert, laden Sie einen
Treiber nach dem anderen, bis der Fehler wieder auftritt.
Typischerweise verursachen binäre Treiber wie
nvidia.ko, Grafiktreiber und
USB-Treiber die meisten Fehler,
hingegen laufen Ethernet-Treiber für gewöhnlich
sehr zuverlässig. Wenn ein Treiber
zuverlässig geladen und entfernt werden kann,
können Sie den Vorgang automatisieren, indem
Sie die entsprechenden Kommandos in
/etc/rc.suspend und
/etc/rc.resume einfügen.
In den Dateien finden Sie ein deaktiviertes Beispiel,
das einen Treiber lädt und wieder entfernt.
Ist die Bildschirmanzeige bei der Wiederaufnahme
des Betriebs gestört, setzen Sie die
Variable auf
1. Versuchen Sie auch, die Variable
auf kürzere
Zeitspannen zu setzen.Die Suspend- und Resume-Funktionen können
Sie auch auf einer neuen &linux;-Distribution
mit ACPI testen. Wenn es mit
&linux; funktioniert, liegt das Problem wahrscheinlich
bei einem &os;-Treiber. Es hilft uns, das Problem
zu lösen, wenn Sie feststellen können, welcher
Treiber das Problem verursacht. Beachten Sie bitte,
dass die ACPI-Entwickler normalerweise
keine anderen Treiber pflegen (beispielsweise Sound- oder
ATA-Treiber). Es ist wohl das beste,
die Ergebnisse der Fehlersuche an die Mailingliste
&a.current.name; und den Entwickler des Treibers
zu schicken. Erfahrene Benutzer können versuchen, den
Fehler in der Resume-Funktion zu finden, indem
sie einige &man.printf.3;-Anweisungen in den Code
des fehlerhaften Treibers einfügen.Schließlich können Sie ACPI
noch abschalten und stattdessen APM
verwenden. Wenn die Suspend- und Resume-Funktionen mit
APM funktionieren, sollten Sie
besser APM verwenden
(insbesondere mit alter Hardware von vor dem Jahr 2000).
Die Hersteller benötigten einige Zeit, um
ACPI korrekt zu implementieren, daher
gibt es mit älterer Hardware oft
ACPI-Probleme.SystemhängerDie meisten Systemhänger entstehen durch verlorene
Interrupts oder einen Interrupt-Sturm.
Probleme werden verursacht durch die Art, in der das
BIOS Interrupts vor dem Systemstart
konfiguriert, durch eine fehlerhafte
APIC-Tabelle und durch die
Zustellung des System-Control-Interrupts
(SCI).Interrupt-SturmAnhand der Ausgabe des Befehls
vmstat -i können Sie verlorene
Interrupts von einem Interrupt-Sturm unterscheiden.
Untersuchen Sie die Ausgabezeile, die
acpi0 enthält. Ein Interrupt-Sturm liegt
vor, wenn der Zähler öfter als ein paar Mal pro Sekunde
hochgezählt wird. Wenn sich das System aufgehangen hat,
versuchen Sie mit der Tastenkombination
CtrlAltEsc in den Debugger DDB
zu gelangen. Geben Sie dort den Befehl
show interrupts ein.APICdeaktivierenWenn Sie Interrupt-Probleme haben, ist es vorerst
wohl am besten, APIC zu deaktivieren.
Tragen Sie dazu die Zeile
hint.apic.0.disabled="1" in
/boot/loader.conf ein.Abstürze (Panics)Panics werden so
schnell wie möglich behoben; mit ACPI
kommt es aber selten dazu. Zuerst sollten Sie
die Panic reproduzieren und dann versuchen einen
backtrace (eine
Rückverfolgung der Funktionsaufrufe) zu erstellen.
Richten Sie dazu den DDB über
die serielle Schnittstelle (siehe
) oder eine gesonderte
&man.dump.8;-Partition ein. In DDB
können Sie den backtrace
mit dem Kommando tr erstellen.
Falls Sie den backtrace
vom Bildschirm abschreiben müssen, schreiben
Sie bitte mindestens die fünf ersten und die
fünf letzten Zeile der Ausgabe auf.Versuchen Sie anschließend, das Problem
durch einen Neustart ohne ACPI
zu beseitigen. Wenn das funktioniert hat, können
Sie versuchen, das verantwortliche
ACPI-Subsystem durch Setzen der
Variablen
herauszufinden. Die Hilfeseite &man.acpi.4; enthält
dazu einige Beispiele.Nach einem Suspend oder einem Stopp startet
das System wiederSetzen Sie zuerst
in
/boot/loader.conf. Damit wird
verhindert, dass ACPI während des
Systemabschlusses die Bearbeitung verschiedener Ereignisse
deaktiviert. Auf manchen Systemen muss die Variable den
Wert 1 besitzen (die Voreinstellung).
Normalerweise wird der unerwünschte Neustart des Systems
durch Setzen dieser Variablen behoben.BIOS mit fehlerhaftem BytecodeACPIASLEinige BIOS-Hersteller liefern einen
fehlerhaften Bytecode aus. Dies erkennen Sie an
Kernelmeldungen wie diesen:ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
(Node 0xc3f6d160), AE_NOT_FOUNDOft können Sie das Problem dadurch lösen, dass Sie eine
aktuelle BIOS-Version einspielen. Die
meisten Meldungen auf der Konsole sind harmlos, wenn aber
beispielsweise der Batteriestatus falsch angezeigt wird,
können Sie in den Meldungen nach Problemen suchen.Die voreingestellte ASL
überschreibenDer BIOS-Bytecode, bekannt als
ACPI Maschine Language
(AML) wird aus der Sprache namens
ACPI Source Language
(ASL) übersetzt. Die
AML ist in einer Tabelle, bekannt als
Differentiated System Description Table
(DSDT), abgelegt.ACPIASLEs ist das Ziel von &os;, dass
ACPI ohne Eingriffe des Benutzers
läuft. Zurzeit werden allerdings noch Abhilfen für Fehler
der BIOS-Hersteller entwickelt.
Der µsoft;-Interpreter (acpi.sys
und acpiec.sys) prüft die
ASL nicht streng gegen den Standard.
Daher reparieren BIOS-Hersteller,
die ACPI nur unter &windows; testen,
ihre ASL nicht. Die &os; Entwickler
hoffen, dass sie das vom Standard abweichende Verhalten des
µsoft;-Interpreters dokumentieren und in &os; replizieren
können. Dadurch müssen Benutzer ihre
ASL nicht selbst reparieren.Um bei der Fehlersuche zu helfen und das Problem
möglicherweise zu beheben, kann eine Kopie der
ASL gemacht werden. Dazu nutzen Sie
acpidump zusammen mit ,
um den Inhalt der Tabelle anzuzeigen und ,
um die AML zu zerlegen:&prompt.root; acpidump -td > my.aslEinige AMLs gehen davon aus, dass
der Anwender eine &windows;-Versionen benutzt. Versuchen
Sie das Betriebssystem, das Sie in der ASL
finden, in /boot/loader.conf anzugeben:
hw.acpi.osname="Windows 2009".Manche Abhilfen erfordern eine Anpassung von
my.asl. Wenn diese Datei bearbeitet
wird, erstellen Sie die neue ASL mit dem
folgenden Befehl. Warnung können meistens ignoriert werden,
aber Fehler verhindern die ordnungsgemäße Funktion von
ACPI.&prompt.root; iasl -f my.aslDie Option erzwingt das Erstellen der
AML auch dann, wenn während der Übersetzung
Fehler auftreten. Einige Fehler, wie fehlende
Return-Anweisungen, werden automatisch vom &os; Interpreter
umgangen.Die voreingestellte Ausgabedatei von
iasl ist DSDT.aml.
Wenn Sie diese Datei anstelle der fehlerhaften Kopie des
BIOS laden wollen, editieren Sie
/boot/loader.conf wie folgt:acpi_dsdt_load="YES"
acpi_dsdt_name="/boot/DSDT.aml"Stellen Sie bitte sicher, dass sich
DSDT.aml in
/boot befindet und starten Sie das
System neu. Wenn dadurch das Problem behoben wird, schicken
Sie einen &man.diff.1; der alten und der neuen
ASL an &a.acpi.name;, damit die
Entwickler das Problem in acpica
umgehen können.Abrufen und Einreichen von Informationen zur
FehlersucheNateLawsonGeschrieben von PeterSchultzMit Beiträgen von TomRhodesACPIProbleme mitACPIFehlersucheDer ACPI-Treiber besitzt
flexible Möglichkeiten zur Fehlersuche. Sie
können sowohl die zu untersuchenden Subsysteme
als auch die zu erzeugenden Ausgaben festlegen. Die zu
untersuchenden Subsysteme werden als layer
angegeben und in Komponenten
(ACPI_ALL_COMPONENTS) und
ACPI-Hardware
(ACPI_ALL_DRIVERS) aufgeteilt.
Welche Meldungen ausgegeben werden, wird über
level gesteuert. Die Level reichen von von
ACPI_LV_ERROR (es werden nur Fehler
ausgegeben) bis zu ACPI_LV_VERBOSE (alles
wird ausgegeben). Das Level ist eine Bitmaske, sodass
verschiedene Stufen auf einmal (durch Leerzeichen getrennt)
angegeben werden können. Die erzeugte Ausgabemenge passt
vielleicht nicht in den Konsolenpuffer. In diesem Fall sollte
die Ausgabe mithilfe einer seriellen Konsole gesichert werden.
Die möglichen Werte für layers und
level werden in &man.acpi.4;
beschrieben.Die Ausgaben zur Fehlersuche sind in der Voreinstellung
nicht aktiviert. Wenn ACPI im Kernel
enthalten ist, fügen Sie options ACPI_DEBUG
zur Kernelkonfigurationsdatei hinzu. Sie können die
Ausgaben zur Fehlersuche global aktivieren, indem Sie in der
Datei /etc/make.conf die Zeile
ACPI_DEBUG=1 einfügen. Das Modul
acpi.ko können Sie wie folgt
neu übersetzen:&prompt.root; cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1Kopieren Sie anschließend
acpi.ko ins Verzeichnis
/boot/kernel.
In /boot/loader.conf stellen Sie
level und layer ein. Das
folgende Beispiel aktiviert die Ausgabe von Fehlern für
alle ACPI-Komponenten und alle
Hardwaretreiber:debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
debug.acpi.level="ACPI_LV_ERROR"Wenn ein Problem durch ein bestimmtes Ereignis,
beispielsweise den Start nach einem Ruhezustand, hervorgerufen
wird, können Sie die Einstellungen für
level und layer auch mit dem
Kommando sysctl vornehmen. In diesem
Fall müssen Sie /boot/loader.conf
nicht editieren. Auf der Kommandozeile geben Sie über
sysctl dieselben Variablennamen wie in
/boot/loader.conf an.ACPIProbleme mitSobald Sie die Fehlerinformationen gesammelt haben,
schicken Sie diese an &a.acpi.name;, sodass die Betreuer des
&os;-ACPI-Subsystems diese Informationen
zur Analyse und für die Entwicklung einer Lösung verwenden
können.Bevor Sie einen Fehlerbericht an diese Mailingliste
einreichen, stellen Sie bitte sicher, dass das
BIOS und die Firmware des Controllers
aktuell sind.Wenn Sie einen Fehlerbericht einsenden, fügen Sie bitte
die folgenden Informationen ein:Beschreiben Sie den Fehler und alle Umstände,
unter denen der Fehler auftritt. Geben Sie
ebenfalls den Typ und das Modell Ihres Systems
an. Wenn Sie einen neuen Fehler entdeckt haben,
versuchen Sie möglichst genau zu beschreiben,
wann der Fehler das erste Mal aufgetreten ist.Die Ausgabe von dmesg nach der
Eingabe von boot -v.
Geben Sie auch alle Fehlermeldungen an, die erscheinen,
wenn Sie den Fehler provozieren.Die Ausgabe von dmesg nach der
Eingabe von boot -v und mit
deaktiviertem ACPI, wenn das Problem
ohne ACPI nicht auftritt.Die Ausgabe von sysctl hw.acpi.
Dieses Kommando zeigt die vom System unterstützten
ACPI-Funktionen an.Die URL, unter der die
ASL liegt. Schicken Sie
bitte nicht die
ASL an die Mailingliste, da die
ASL sehr groß sein kann. Eine Kopie
der ASL erstellen Sie mit dem
nachstehenden Befehl:&prompt.root; acpidump -td > name-system.aslSetzen Sie für name
den Namen des Kontos und für
system den Hersteller und
das Modell des Systems ein. Zum Beispiel:
njl-FooCo6000.asl.Obwohl die meisten Entwickler die Mailingliste
&a.current.name; lesen, sollten Sie Fehlerberichte an
die Liste &a.acpi.name; schicken. Seien Sie bitte
geduldig; wir haben alle Arbeit außerhalb des Projekts.
Wenn der Fehler nicht offensichtlich ist, bitten
wir Sie vielleicht, einen offiziellen Fehlerbericht
(PR) mit &man.send-pr.1; einzusenden.
Geben Sie im Fehlerbericht bitte dieselben Informationen
wie oben an. Mithilfe der PRs
verfolgen und lösen wir Probleme. Senden Sie
bitte keinen PR ein, ohne vorher
den Fehlerbericht an die Liste &a.acpi.name; zu senden.
Es kann sein, dass der Fehler schon von
jemand anderem gemeldet wurde.ReferenzenWeitere Informationen über ACPI finden
Sie hier:Die &os; ACPI Mailingliste
(https://lists.freebsd.org/pipermail/freebsd-acpi/)Die ACPI 2.0 Spezifikation (http://acpi.info/spec.htm)&man.acpi.4;, &man.acpi.thermal.4;, &man.acpidump.8;,
&man.iasl.8; und &man.acpidb.8;