Unix Grundlagen Übersicht Neugeschrieben von Chris Shumway cshumway@cdrom.com, 10 Mar 2000. Übersetzt von &a.de.pierau, Juni 2000 Das folgende Kapitel umfaßt die grundlegenden Kommandos und Funktionsweisen des Betriebssystems FreeBSD. Wenn FreeBSD neu für Sie ist, dann sollten Sie dieses Kapitel auf jeden Fall lesen, bevor Sie um Hilfe fragen. Zugriffsrechte Die Grundlagen von FreeBSD, dessen Geschichte in BSD UNIX begründet ist, stützen sich auf verschiedene UNIX Grundkonzepte. Das erste und ausgeprägteste: FreeBSD ist ein Multi-User Betriebssystem. Das System ermöglicht, daß mehrere User gleichzeitig an völlig verschiedenen und unabhängigen Aufgaben arbeiten können. Es ist verantwortlich für eine gerechte Auf- und Zuteilung von Nachfragen nach Hardware- und Peripheriegeräten, Speicher und CPU Zeit unter den Usern. Da das System mehere Benutzer unterstützt, hat alles, was das System verwaltet, einen Satz von Rechten, die bestimmen, wer die jeweilige Ressource lesen, schreiben oder ausführen darf. Diese Zugriffsrechte stehen in einer Achtergruppe, die in drei Teile unterteilt ist: einen für den Besitzer der Datei, einen für die Gruppe¸ zu der die Datei gehört und einen für alle anderen. Die numerische Darstellung sieht wie folgt aus: Wert Zugriffsrechte Auflistung im Verzeichnis 0 Kein Lesen, Kein Schreiben, Kein Ausführen --- 1 Kein Lesen, Kein Schreiben, Ausführen --x 2 Kein Lesen, Schreiben, Kein Ausführen -w- 3 Kein Lesen, Schreiben, Ausführen -wx 4 Lesen, Kein Schreiben, Kein Ausführen r-- 5 Lesen, Kein Schreiben, Ausführen r-x 6 Lesen, Schreiben, Kein Ausführen rw- 7 Lesen, Schreiben, Ausführen rwx Bei einer ausführlichen Verzeichnisauflistung mittels ls -l zeigt eine Spalte die Zugriffsrechte für den Besitzer, die Gruppe und alle anderen an. Hier sieht man, wie das aussehen könnte: -rw-r--r-- Das erste Zeichen von links ist ein Sysmbol, welches angibt, ob es sich um eine normale Datei, ein Verzeichnis, ein special- oder block-device, ein Socket oder irgend eine andere Pseudo-Datei handelt. 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, daß das Recht nicht gegeben ist. In diesem Fall sind die Zugriffsrechte also: der Eigentümer kann die Datei lesen und schreiben, die Gruppe kann lesen und alle anderen können auch nur lesen. Entsprechend obiger Tabelle wären die Zugriffsrechte für diese Datei 644, worin jede Ziffer die drei Teile der Zugriffrechte dieser Datei verkörpert. Das ist alles schön und gut, aber wie kontrolliert das System die Rechte von Hardware Geräten? FreeBSD behandelt die meisten Hardware Geräte als Dateien, welche Programme öffnen, lesen und mit Daten beschreiben können wie alle anderen Dateien auch. Diese Spezial-Dateien sind im Verzeichnis /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, daß man darin Suchen kann. Zum Beispiel kann man sich in diesem Verzeichnis eine Auflistung erstellen. Es gibt noch mehr Rechte, aber die werden vor allem in speziellen Umständen benutzt, wie zum Beispiel bei setuid binaries und sticky directories. Wollen Sie mehr über Zugriffsrechte von Dateien erfahren, lesen Sie in die &man.chmod.1; Man-Page. Verzeichnis-Strukturen Da FreeBSD seine Dateisysteme nutzt, um viele grundlegende Systemtätigkeiten festzulegen, ist die Hierarchie des Dateisystems äußerst wichtig. Durch den Umstand, daß die Man-Page &man.hier.7; eine komplette Beschreibung der Verzeichnisstruktur bietet, wird sie hier nicht dupliziert. Bitte lesen Sie &man.hier.7; für ausführlichere Informationen. Von bedeutender Wichtigkeit ist die Wurzel aller Verzeichnisse, das / Verzeichnis. Dieses wird beim booten als erstes gemountet und es enthält das Basissystem, welches zum boot-Zeitpunkt notwendig ist. Das / Verzeichnis enthält außerdem mount Punkte (Montierungspunkte) für jedes weitere Dateisystem, das Sie mounten wollen. Ein mount Punkt ist ein Verzeichnis, in das zusätzliche Dateisysteme ins / Verzeichnis eingepflanzt werden können. Standard mount Punkte beinhalten /usr, /var, /mnt und /cdrom. Auf diese Verzeichnisse verweisen üblicherweise Einträge in der Datei /etc/fstab. /etc/fstab ist eine Tabelle mit verschiedenen Dateisystemen und mount Punkten als Referenz des Systems. Die meisten der Dateisysteme in /etc/fstab werden zur boot Zeit automatisch durch das Skript &man.rc.8; gemountet, wenn die zugehörigen Einträge nicht mit der Option versehen sind. Konsultieren Sie die &man.fstab.5; Man-Page für mehr Informationen über das Format der Datei /etc/fstab und den Optionen darin. Shells Von der tagtäglichen Arbeit mit FreeBSD wird eine Menge mit der Kommandozeilen Schnittstelle der Shell erledigt. Die Hauptaufgabe einer Shell besteht darin, Kommandos der Eingabe anzunehmen und diese auszuführen. Viele Shells haben außerdem eingebaute Funktionen, um die tägliche Arbeit zu erleichtern, wie Dateiverwaltung, Editieren von Kommandozeilen, Makros und Umgebungsvariablen. FreeBSD enthält die Shells sh (die Bourne Shell) und csh (die C-Shell) im Basissystem. Viele andere sind in der Ports Sammlung zu finden, von denen einige auch leistungsfähiger sind, zum Beispiel tcsh und bash. Welche Shell soll ich benutzen? Das ist wirklich eine Geschmacksfrage. Sind Sie ein C Programmierer, finden Sie vielleicht eine C-artige Shell wie die tcsh angenehmer. Kommen Sie von Linux oder Ihnen ist eine UNIX Kommandozeile neu, so könnten Sie die bash probieren. Der Punkt ist, daß jede Shell ihre speziellen Eigenschaften hat, die mit Ihrer bevorzugten Arbeitsumgebung harmonieren können oder nicht. Sie müssen sich eine Shell aussuchen. Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollständigung. Sie müssen nur einige Buchstaben eines Kommandos oder eines Dateinames eingeben und die Shell vervollständigt den Rest automatisch durch drücken der TAB-Taste. Hier ist ein Beispiel. Ich habe zwei Dateien foobar und foo.bar. Die Datei foo.bar möchte ich löschen. Nun würde ich an der Tastatur eingeben: rm fo[TAB].[TAB]. Die Shell gäbe dann ausgeben rm foo[BEEP].bar. [BEEP] meint den Rechner-Piepser. Diesen gibt die Shell aus, um anzuzeigen, daß es den Dateinamen nicht vervollständigen konnte, da es mehrere Möglichkeiten gibt. Beide Dateien foobar und foo.bar beginnen mit fo, so konnte nur bis foo ergänzt werden. Nachdem ich . eingab und dann die TAB-Taste drückte, konnte die Shell den Rest für mich ausfüllen. Eine andere Funktion der Shell sind die Umgebungsvariablen. Das sind veränderbare Schlüsselpaare im Umgebungsraum der Shell. Diesen Umgebungsraum kann jedes von der Shell aufgerufene Programm lesen. So kommt es, daß viel Programmkonfiguration darin enthalten ist. Hier eine Liste verbreiteter Umgebungsvariablen und was sie bedeuten: Variable Beschreibung USER Name des zur Zeit angemeldeten Benutzers. PATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen. DISPLAY Wenn gesetzt der Netzwerkname des X11 Bildschirms für die Anzeige. SHELL Die aktuelle Shell. TERM Name des Terminals des Benutzers. Benutzt, um die Fähigkeiten des Terminals bestimmen. TERMCAP Datenbankeintrag der Terminal Escape Kodes, benötigt um verschieden Terminalfunktionen auszuführen. OSTYPE Typ des Betriebsystems. Z.B., FreeBSD. MACHTYPE Die CPU Architektur auf dem das System läuft. EDITOR Vom Benutzer bervorzugter Text-Editor. PAGER Vom Benutzer bevorzugter Text-Betrachter. MANPATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Man-Pages. Das Anzeigen oder Setzen von Umgebungsvariablen funktioniert von Shell zu Shell unterschiedlich. Zum Beispiel benutzt man in C-artigen Shells wie der tcsh dazu setenv. Unter Bourne-Shells wie sh oder bash würde man set und export benutzen zum ansehen oder setzen von aktuellen Umgebungsvariablen. Um beispielsweise die Variable EDITOR zu setzen oder zu modifizieren, würde folgendes Kommando die Variable EDITOR auf /usr/local/bin/emacs setzen: setenv EDITOR /usr/local/bin/emacs Unter Bourne-Shells: export EDITOR="/usr/local/bin/emacs" Sie können die meisten Shells Umgebungsvariablen expandieren lassen, in dem Sie in der Kommandozeile ein $ davor eingeben. Zum Beispiel gibt echo $TERM aus, worauf $TERM gesetzt ist, weil die Shell $TERM expandiert und das Ergebnis an echo gibt. Shells behandeln eine Menge an Spezialzeichen, sogenannte meta-characters, als besondere Darstellungen für Daten. Das allgemeinste ist das Zeichen *, das eine beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. Das Kommando echo * liefert nahezu das gleiche wie die Eingabe von ls, da die Shell alle Dateinamen die mit * übereinstimmen an echo weitergibt. Um zu verhindern, daß die Shell diese Sonderzeichen interpretiert, kann man sie schützen, indem man ihnen einen backslash (\) voranstellt. echo $TERM gibt aus, auf was auch immer Ihr Terminal gesetzt ist. echo \$TERM gibt $TERM genauso aus, wie es hier steht. Ändern der Shell Der einfachste Weg Ihre Shell zu ändern, ist das Kommando chsh zu benutzen. chsh platziert Sie im Editor, welcher durch Ihre Umgebungsvariable EDITOR gesetzt ist, im vi wenn die Variable nicht gesetzt ist. Ändern Sie die Zeile mit Shell: entsprechend Ihren Wünschen. Sie können auch chsh mit der Option aufrufen, dann wird Ihre Shell gesetzt, ohne dasß Sie in einen Editor gelangen. Um Ihre Shell zum Beispiel auf die bash zu ändern, geben Sie das folgende Kommando ein: &prompt.user; chsh -s /usr/local/bin/bash Einfach chsh ohne Optionen und mit Editieren der entsprechenden Zeile würde auch funktionieren. Die von Ihnen gewünschte Shell muß in /etc/shells aufgeführt sein. Haben Sie eine Shell aus der Ports Sammlung installiert, sollte das schon automatisch erledigt werden. Installierten Sie die Shell von Hand, so müssen Sie sie dort eintragen. Haben Sie beispielsweise die bash nach /usr/local/bin installiert, wollen Sie dies tun: &prompt.root; echo "/usr/local/bin/bash" >> /etc/shells Danach chsh aufrufen. Text Editoren Eine Menge der Konfiguration bei FreeBSD wird durch das Editieren von Textdateien erledigt. Deshalb ist es eine gute Idee, mit einem Texteditor vertraut zu werden. FreeBSD hat ein paar davon im Basissystem und sehr viel mehr in der Ports Sammlung. Der am leichtesten und einfachsten zu erlernende Editor nennt sich ee, was für easy editor steht. Um ee zu starten, gibt man in der Kommandozeile ee filename ein, worin filename der Name der zu editierenden Datei ist. Um zum Beispiel /etc/rc.conf zu editieren, tippen Sie ee /etc/rc.conf. Einmal im Editor, finden Sie alle Editor-Funktionen oben im Display aufgelistet. Das Einschaltungszeichen ^ meint die Control (oft Steuerung) Taste, also ^e heißt, daß die Controltaste und dann der Buchstabe e gedrückt werden. Um ee zu verlassen, einfach die Escapetaste drücken und leave editor wählen. Der Editor fragt Sie nach, ob Sie speichern möchten, wenn die Datei verändert wurde. FreeBSD verfügt über leistungfähigere Editoren wie vi als Teil des Basissystems und emacs oder vim als Teil der Ports Sammlung. Diese Editoren bieten höhere Funktionalität und Leistungsfähigkeit jedoch auf Kosten einer etwas schwierigeren Erlernbarkeit. Dennoch, wenn Sie viel Textdateien editieren werden, sparen Sie auf lange Sicht mehr Zeit ein durch das Erlernen solcher Editoren wie vim oder emacs. Weitere Informationen... Man pages Die umfassendste Dokumentation rund um FreeBSD gibt es in Form von Man-Pages. Annährernd jedes Programm im System bringt eine kurze Referenzdokumentation mit, die die grundsätzliche Funktion und verschiedene Parameter erklärt. Diese Dokumentationen kann man mit dem man Kommando benutzen. Die Benutzung des man Kommandos ist einfach: &prompt.user; man Kommando Kommando ist der Name des Kommandos, über das Sie etwas erfahren wollen. Um beispielsweise mehr über das Kommando ls zu lernen, geben Sie ein: &prompt.user; man ls Die Online-Dokumentation ist in numerierte Sektionen unterteilt: Benutzerkommandos. Systemaufrufe und Fehlernummern. Funktionen der C Bibliothkene. Gerätetreiber. Dateiformate. Spiele und andere Unterhaltung. Verschiedene Informationen. Systemverwaltung und -Kommandos. Kernel Entwickler. In einigen Fällen kann dasselbe Thema in mehreren Sektionen auftauchen. Es gibt zum Beispiel ein chmod Benutzerkommando und ein chmod() Systemaufruf. In diesem Fall können Sie dem man Kommando sagen, aus welcher Sektion Sie die Information erhalten möchten, indem Sie die Sektion mit angeben: &prompt.user; man 1 chmod Dies wird Ihnen die Man-Page für das Benutzerkommando chmod zeigen. Verweise auf eine Sektion der Man-Pages werden traditionsgemäß in Klammern gesetzt. So nezieht sich &man.chmod.1; auf das Benutzerkommando chmod und mit &man.chmod.2; ist der Systemaufruf gemeint. Das ist nett, wenn Sie den Namen eines Kommandos wissen, und lediglich wissen wollen, wie es zu benutzen ist. Aber was tun Sie, wenn Sie Sich nicht an den Namen des Kommandos erinnern können? Sie können man benutzen, um nach Schlüsselbegriffen in den Kommandobeschreibungen zu suchen, indem Sie den Parameter benutzen: &prompt.user; man -k mail Mit diesem Kommando bekommen Sie eine Liste der Kommandos, deren Beschreibung das Schlüsselwort mail enthält. Diese Funktionalität erhalten Sie auch, wenn Sie das Kommando apropos benutzen. Nun, Sie schauen Sich alle die geheimnisvollen Kommandos in /usr/bin an, haben aber nicht den blassesten Schimmer, wozu die meisten davon gut sind? Dann geben Sie doch einfach &prompt.user; cd /usr/bin; man -f * oder &prompt.user; cd /usr/bin; whatis * ein, beides tut dasselbe. GNU Info Dateien FreeBSD enthält viele Applikationen und Utilities der Free Software Foundation (FSF). Zusätzlich zu den Man-Pages bringen diese Programme ausführlichere Hypertext-Dokumente (info genannt) mit, welche man sich mit dem Kommando info ansehen kann. Wenn Sie emacs installiert haben, können Sie auch dessen info-Modus benutzen. Um das Kommando &man.info.1; zu benutzen, geben Sie einfach ein: &prompt.user; info Eine kurze Einfürung gibt es mit h; eine Befehlsreferenz erhalten Sie durch Eingabe von: ?.