|
Ole Vanhoefer
Linux.Fibel.org
Einführung in Linux / LPI I
von Ole Vanhoefer
Copyright © 2001-2004 Ole Vanhoefer
Gesetzt mit LATEX unter Linux
| Version 0.3 | : | 18. November 2001 |
| Version 0.4 | : | 14. April 2002 |
| Version 0.5 | : | 19. Januar 2003 |
| Version 0.6.0 | : | 1. September 2004 |
Das Kleingedruckte
Dieses Skript ist wie alle Werke urheberrechtlich geschützt. Er ist jedoch unter den Bedingungen der Open Publication License, Version 0.4 oder höher verfügbar. Die genaue Lizenz findet sich in Open Publication License (siehe Anhang D, Seite
).
Wenn dieses Skript reproduziert oder verwendet wird, bittet der Autor um Meldung eines solchen Angebotes per eMail an linux
vanhoefer.de unter Angabe einer Kontaktadresse.
Die in diesem Skript dargestellten Programme und Verfahren werden ohne Berücksichtigung der Patentlage mitgeteilt. Sie sind nur für Amateur- und Lehrzwecke bestimmt.
Alle Informationen in diesem Skript sind frei erfunden. Ähnlichkeiten mit existierenden Betriebssystemen, Soft- und Hardware sind rein zufällig. Daher übernimmt der Autor keine Garantie, juristische Verantwortung oder irgendeine Haftung für Folgen, die auf Inhalte dieses Skriptes zurückgehen.
Ich weise darauf hin, daß die im Skript verwendeten Soft- und Hardwarebezeichnungen und Markennamen der jeweiligen Firmen i. A. warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Die Nutzungsrechte der in diesem Skript wiedergegebene Codezeilen von Programmen, die unter der GNU General Public License verbreitet werden, richtet sich einzig und allein nach den Bedingungen der GNU General Public License.
| In a world without walls and fences, |
| who needs windows and gates? |
| Anonymous |
Dieses Skript ist als Begleitmaterial zu meinem Unterricht ``Einführung in Linux'' und den Vorbereitungskursen zu den LPI-Prüfungen 101 und 102 entstanden. Schwerpunkt des Unterrichts ist eine Einführung in die Grundbedienung von Linux, wie sie dem Stoffplan der ersten LPI-Prüfung entspricht. Der Stoff der Prüfung 101 wird fast vollständig abgedeckt. Viele Themen der Prüfung 102 sind auch bereits vorhanden
Das Skript ist einmal als Begleitmaterial zum Unterricht entstanden, da es noch kein passendes Buch zur LPI-Prüfung in Deutsch gibt, zum anderen als meine Vorbereitung für die Prüfungen 101 und 102, die ich auch erfolgreich abgelegt habe.
Dieses Skript befindet sich wie immer in der Entwicklung und wird in Zukunft um einige Themen erweitert werden.
Im Vergleich zur Version 0.5 hat sich der Umfang der Fibel von ca. 350 Seiten auf ca. 500 Seiten erhöht. Viele Themen sind dazu gekommen. Einige sind noch recht frisch, so daß sicherlich noch ein paar Fehler drin versteckt sind und ein paar Brüche im Kontext. Trotzdem möchte ich diese Version nun veröffentlichen, da sich vieles getan hat. Für Anregungen und Fehlerkorrekturen bin ich sehr dankbar. Die Aufgaben sollten zum größten Teil mit den Grundvoraussetzungen einer SuSE-Linux-Distribution ab Version 8.0 gelöst werden können.
Besonders möchte ich bei meinen bisherigen Teilnehmern danken, die mich auf Fehler und Unstimmigkeiten aufmerksam gemacht haben und sich als Beta-Tester für die Aufgaben geopfert haben.
Bei Interesse an Linux-Seminare und LPI-Vorbereitungskursen können Sie mich gerne kontaktieren. Nun möchte ich Sie nicht weiter aufhalten und hoffe Sie haben viel Spaß beim Lesen.
Ein Betriebssystem ist eine Sammlung von Programmen, mit denen die grundlegendsten Funktionen eines Rechners realisiert werden. Dies reicht von der Schnittstelle Mensch-Maschine über die Verwaltung der Daten bis zur Kontrolle und Steuerung der Systemressourcen. Ohne ein Betriebssystem können Sie mit Ihrem Rechner nicht arbeiten, da so wichtige Dinge wie das Starten von Programmen und die Verwaltung Ihrer Dateien davon abhängen.
Diese Funktionen stellen eigentlich alle Betriebssystem zur Verfügung. Somit werden Sie bei jeder Arbeit mit einem Betriebssystem konfrontiert, wie z. B. CP/M, DOS, Windows 9x, Windows NT, Windows 2000, Windows ME, Windows XP, OS/2, Mac-OS, Unix usw.
Linux basiert auf dem Betriebssystem UNIX, das 1969 von den Bell Laboratories entwickelt wurde. Der finnische Student Linus Benedict Thorvald entwickelte den ersten Linux Betriebssystemkern (Kernel) auf seinem 386er Rechner. Dabei nutzte er nicht den bestehenden Quellcode, sondern programmierte das Betriebssystem vollständig neu. Nach außen präsentiert sich Linux als UNIX-System, während es innen aus einem völlig eigenständigem Code besteht.
Thorvald stellte im September 1991 der Gemeinde der MINIX-Anhänger sein neues Betriebssystem in der Version 0.01 vor. Er entschloß sich dabei das Programm und den Quellcode frei weiterzugeben und anderen Programmierern die Arbeit an seinem System zu gestatten. Viele Programmierer begeisterten sich für Linux und schon im Januar 1992 wurde der erste stabile Kernel 0.12 ins Internet gestellt.
Eigentlich kann man nur den Kernel mit seinen Modulen und direkt dazugehörenden Daten als Linux bezeichnen. Daneben gibt es aber eine Vielzahl von Hilfsprogrammen und Applikationen, die zusammen mit dem Kernel in den sogenannten Distributionen vertrieben werden. Für diese Zusammenstellung hat sich der Name Linux nun eingebürgert.
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups: comp.os.minix Subject: Gcc-1.40 and a posix-question Message-ID: <1991Jul3.100050.9886@klaava.Helsinki.FI> Date: 3 Jul 91 10:00:50 GMT Hello netlanders, Due to a project I'm working on (in minix), I'm interested in the posix standard definition. Could somebody please point me to a (preferably) machine-readable format of the latest posix rules? Ftp-sites would be nice.
Sicher ist, daß die erste Version des Linux Kernels am 25. August 1991 im Usenet angekündigt wurde. Schon kurze Zeit später fanden sich interessierte Programmierer, die an dem Projekt mitgearbeitet haben.
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups: comp.os.minix Subject: What would you like to see most in minix? Summary: small poll for my new operating system Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI> Date: 25 Aug 91 20:57:08 GMT Organization: University of Helsinki Hello everybody out there using minix - I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things). I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them :-) Linus (torvalds@kruuna.helsinki.fi) PS. Yes - it's free of any minix code, and it has a multi-threaded fs. It is NOT protable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have :-(.
Linus veröffentlicht am 17. September 1991 die Version 0.01 des Kernels für einige Interessenten aus dem Usenet. Das Archiv mit der historischen Version ist auch heute noch verfügbar:
http://www.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz.
Die erste ``offizielle'' Version des Linux Kernels (0.02) erscheint am 05. Oktober 1991. Mit dieser Version laufen bereits die bash, gcc, gnu-make, gnu-sed und compress.
Am 19. Dezember 1991 läuft die erste Version (0.11), die ohne die Hilfe eines anderen Betriebsystems lauffähig ist. Es gab keinen SCSI Support, so daß eine AT-Bus Festplatte Voraussetzung war. Es gab weder init noch login, nach den Systemstart landete man direkt in einer bash. Es gab Ansätze für die Implementierung von Virtual Memory, es waren aber mindestens 4 MB RAM notwendig um GNU Programme, insbesondere den gcc benutzen zu können. Ein einfacher Systemstart war aber auch schon mit 2 MB möglich.
Deshalb folgte für einige Personen eine Version mit virtueller Speicherverwaltung zu Weihnachten um den Kernel auch mit 2 MB RAM übersetzen lassen zu können.
Linus verteilte diese per Anonymous-FTP im Internet, was zu einem sprunghaften Anstieg der Testerzahl führte. Da dieser Anstieg so groß wurde, daß die nötige Kommunikation nicht mehr per eMail zu bewältigen war, wurde im Usenet die Gruppe alt.os.linux geschaffen. Das Interesse an Linux wuchs stetig und wurde von Linus koordiniert.
Um die Entwicklung voranzutreiben erhöhte Linus die Entwicklungsnummer im März auf Version 0.95.
Die im April folgende Version 0.96 war die erste Version mit der es möglich war das X-Window System zu betreiben.
Man schätzt die Zahl der Anwender auf circa 1000.
Oktober: Version 0.98.2
Durch Anpassung des Linuxkernels an die GNU Umgebung der Free Software Foundation (FSF) wuchsen die Möglichkeiten von Linux erneut stark an, da man nun auf eine große Sammlung an vorhandener Software und Tools zurückgreifen konnte.
Dezember: Version 0.99.14
Ein weiterer wichtiger Schritt war die Adaption eines Graphical User Interfaces (GUI), des X-Window-Systems. Dieses wurde von dem Xfree86 Projekt beigesteuert.
April: Version 1.10
März: Version 1.20
Juni: Version 1.30
Die Anwenderzahl hat sich auf rund 1,5 Millionen Benutzern erhöht.
Juni: Version 2.00
September: Version 2.10
Verschiedene namhafte Firmen beginnen ihre Software auf Linux zu portieren. Netscape ihren Webbrowser, Applixware ihre Office Anwendung und die Software AG Ihre Datenbank Adabas D. Damit gibt es auch professionelle Software für Linux.
April: Version 2.1.35
Man schätzt die Anzahl der Programmierer von Linux auf 10.000, und die Anzahl der Anwender auf 7,5 Millionen.
März: Version 2.1.90
Januar: Version 2.20
Mai: Version 2.30
Für ein System ohne graphische Oberfläche können Sie sich an folgenden Werten orientieren.
| Theoretisches Minimum | 386 SX | 1 MB | RAM | 5MB | Festplatte | ||
| Brauchbares Minimum | 386 DX/40 mit Coprozessor | 8 MB | RAM | 150 MB | Festplatte | ||
| Brauchbares System | 486 DX/66 | 16 MB | RAM | 600MB | Festplatte | ||
| Gutes System | Pentium90 | 32 MB | RAM | 1GB | Festplatte |
Graphische Systeme machen erst ab einem 486 Prozessor Spaß und für ein KDE-System sollten es minimal 64 MB Arbeitsspeicher sein.
Vor der Installation sollten wir uns den Aufbau einer Festplatte bzw. Harddisk einmal anschauen. Eine Festplatte besteht meistens aus einer, zwei oder mehreren Metallplatten, die beidseitig mit hochfein polierten Metalloxiden beschichtet sind. Ein Kamm von beweglichen Schreib-Lese-Köpfen greift seitlich in den rotierenden Stapel von Platten hinein und kann so die in konzentrischen Kreisen angelegten Datenmuster lesen oder schreiben. Durch die hohen Drehzahlen der Festplatte entstehen gezielt Luftbewegungen. Der Schreib-Lese-Kopf wird in Richtung der Oberfläche gesaugt und in einem vordefinierten Abstand gehalten. Bei einem Strömungsabriss durch Änderung der Drehzahl entfernt sich der Schreib-Lese-Kopf wieder von der Oberfläche.
Diese System ist relativ stabil. Sollte es aber aus irgendwelchen Gründen zum direkten Kontakt des Kopfes mit den schnell drehenden Magnetplatten kommen, so ist das Ergebnis verheerend. Diesen Vorgang bezeichnet man auch als Headcrash. Die magnetisierte Oberfläche, welche die Daten trägt, wird unwiderruflich beschädigt. Das gleiche gilt für den Schreib-Lese-Kopf der Festplatte. Dieser Vorgang wird in Umgangssprache auch als Spanabhebende Datenverarbeitung bezeichnet. Das ist dann für die Daten der GAU, der wahrhaft größte anzunehmendste Unfall. Auch wenn es heute Möglichkeiten gibt, mit welcher man gelöschte Dateien wiederherstellen kann, sind mechanisch zerstörte Daten unwiederuflich verloren.
Die Festplatte beherbergt die magnetisierbaren Metallplatten, den Spindelmotor, den Schreib-Lese-Köpfen sowie den Positionierungsmechanismus der Köpfe in einem versiegelten Gehäuse, das vor äußeren Einflüssen schützt. Dieser Aufbau legt das Koordinatensystem der Festplatte fest, das die Lokalisierung der Daten auf der Platte ermöglicht. Der Kamm aus Schreib-Lese-Köpfen erzeugt konzentrische Kreise auf der Oberfläche der Magnetplatten. Einen solchen Kreis bezeichnet man als Spur. Die Spur 0 ist per Definition der äußerste Kreis einer Platte. Eine solche kreisförmige Spur wird dann in Kreissegmente unterteilt, die als Sektoren bezeichnet werden. Der Sektor ist die kleinste adressierbare Einheit einer Platte. Er ist 512 Bytes groß. Die übereinander liegenden Spuren eines Plattenstapels werden als Zylinder bezeichnet. Eine Festplatte mit drei Scheiben hat Zylinder, die aus sechs Spuren bestehen (Obere und untere Seite pro Scheibe). Eine Platte kann auf alle Spuren eines Zylinders zugreifen, ohne die Schreib-Lese-Köpfe neu zu positionieren.
Durch die Angabe von Zylinder, Kopf und Sektor kann man so genau einen Abschnitt einer Festplatte, den Block, adressieren. Diese Form der Adressierung wird als CHS (Cylinder-Head-Sector) bezeichnet. Der Block stellt die kleinste adressierbare Einheit einer Festplatte dar, d.h. zur Änderung eines einzelnen Bits muss immer ein ganzer Block gelesen und wieder geschrieben werden. CHS unterliegt mehreren Einschränkungen: Die Schnittstelle zwischen IDE und BIOS reserviert nur 16 Bits für die Zylinder (maximal sind 65.536 möglich), 4 Bits für die Köpfe (maximal 16) und 8 Bits für die Sektoren pro Spur (maximal 256). Das BIOS hat 10 Bits für die Zylinder zur Verfügung (1024), 8 Bits für die Köpfe (256) und 6 Bits für die Sektoren (63, da ab 1 gezählt wird). Bei diesen Grenzen ist jeweils der niedrigere Wert entscheidend, so daß alte BIOS-Versionen nur 1024 x 16 x 63 x 512 Bytes = 504 MB adressieren können. Neuere BIOS-Versionen stocken per Mapping die Anzahl der Schreib-/Leseköpfe auf 255 auf und kommen damit auf 7.844 GB.
Ende 1995 löste LBA (Logical Block Addressing) die Adressierung nach CHS ab. Hier werden der Zylinder, Head und Sektor in logischen Blöcken zusammengefaßt. Bei LBA sind alle Sektoren der Festplatte - von null beginnend - durchnumeriert. Das auf 28 Bit basierende LBA verwaltet maximal 128 GB. Aktuell ist die auf 64 Bit basierende Variante, die bis zu 8.589.934.592 Terrabytes adressiert.
Neben der oben beschriebenen physikalischen Aufteilung einer Festplatte gibt es eine logische Aufteilung der Platte, die für die Installation sehr wichtig ist. Partitionen werden dazu benutzt um eine Festplatte in einzelne Teile zu zerlegen. Eine Festplatte besteht aus mindestens einer Partition und kann bis zu vier Partitionen enthalten. Um mit den Partitionen arbeiten zu können, müssen sie mit dem gewünschten Dateisystem formatiert werden. Bei den Partitionen werden zwei Typen unterschieden: Die primäre und die erweiterte Partition.
Die Vorteile einer Aufteilung auf mehrere Partitionen sind klar.
Der Nachteil allerdings liegt in der uneffektiven Nutzung des vorhandenen Festplattenplatzes, da ohne weiteres auf einer Partition noch Platz sein kann, während die Partition eines anderen Verzeichnisses schon voll ist. Planen Sie daher vorher mit Bleistift und Papier ihre Partitionen, denn eine nachträgliche Größenänderung ist immer mit Problemen und großem Zeitaufwand verbunden.
Im Gegensatz zu DOS/Windows merkt der Benutzer nichts von der Aufteilung, da es bei Linux keine Laufwerksbuchstaben gibt, sondern die Laufwerke bzw. Partitionen in den Dateibaum eingebunden werden.
Sollte sich die ganze Platte unter Zylinder 1024 befinden, dann kann für das Verzeichnis /boot auf eine eigene Partition verzichtet werden.
Auf älteren Systemen kann es auch vorkommen, daß mehrere kleinere Platten vorhanden sind. In diesem Fall kann der Verzeichnisbaum auf diese Platten aufgeteilt werden. So kann z. B. für das Verzeichnis /home eine eigene Platte verwendet werden. Die Verwendung der Platten ist genau so wie die Verwendung von mehreren Partitionen auf einer Platte.
Verzeichnisse sind nicht auf lokale Partitionen beschränkt. NFS-Netzwerkverzeichnisse können die gleichen Aufgaben übernehmen. Früher, als Plattenplatz noch richtig teuer war, wurde oft das Verzeichnis /usr auf den Server ausgelagert. Heute ist dies nicht mehr so wichtig. Allerdings erleichert ein gemeinsames /usr-Verzeichnis für alle Arbeitsrechner die Wartung (Update) des Systems.
Neben diesen Argumenten kann auch die Datensicherung über die Größe der Partitionen entscheiden. So beschränkt z. B. die Größe der Sicherungsmedien unter Umständen die maximale Größe einer Partition ein.
Mehr Informationen zu Partitionen und ihre manuelle Einrichtung finden Sie im Abschnitt 10.1.
Für die Größe der Swap-Partition gibt es eine Faustregel. Der Auslagerungsspeicher sollte immer doppelt so groß sein, wie der eingebaute Arbeitsspeicher. Dabei sollte eine Größe von 16 MB für die Swap-Partitione nicht unterschritten werden um eine gute Funktion des Betriebssystems zu gewährleisten.
Seit Kernel 2.1.117 darf die Swap-Partition bis zu 2 GB groß werden. Die Anzahl der Swap-Partitionen kann bei der Kompilierung des Kernels festgelegt werden. Im Normalfall ist dieser Wert auf 32 eingestellt.
Kopieren Sie die Dateien fips.exe und restorbb.exe auf eine Diskette. Eine Kopie Ihres alten MBR (Master Boot Record) wird während der Installation auf die Diskette kopiert. Dieses Backup können Sie dazu nutzen die Veränderung wieder rückgängig zu machen. Daher Diskette beschriften und gut verwahren!!!
Gleichzeitig wird der alte MBR auf dem Linux-System als /boot/boot.0300 für IDE-Platten und als /boot/boot.0800 für SCSI-Platten abgelegt.
Da sich die Installationsprozeduren von Distribution zu Distribution und sogar von Version zu Version unterscheiden möchte ich an dieser Stelle nicht darauf eingehen. In den bei der SuSE-Distribution mitgelieferten Handbüchern wird die Installation beschrieben. Sollten Sie dieses Skript nicht als Begleitmaterial zum Unterricht benutzen, sondern selber lernen, dann suchen Sie sich für die Installation einen erfahrenen Linux-User. In den meisten Fällen kann SuSE-Linux mit wenigen Mausklicks installiert werden, aber je nach der verwendeten Hardware kann es zu kleineren oder größeren Problemen kommen. Dies gilt übrigens auch für Windows.
Für den Unterricht ist es effektiver die Distribution auf einem Server im Netz zur Verfügung zu stellen. Erstens müssen nicht Unmengen von CDs gebrannt werden und zweitens erleichtert diese Vorgehensweise auch die nachträgliche Installation von Software im weiteren Verlauf des Unterrichts.
Deshalb nun die Beschreibung der Schritte, die vor einer Netzwerkinstallation am Client durchgeführt werden müssen.
Die erste CD der SuSE Distribution ist bootfähig und in der Regel kann die Installation dann ohne Probleme durchgeführt werden. Manchmal unterstützen ältere Rechner oder SCSI-Systeme das Booten von CD nicht. Dort und um eine Netzwerkinstallation durchführen zu können, werden Bootdisketten benötigt, die ein Grundbetriebssystem starten. Diese Bootdisketten können von Diskettenimages erstellt werden. Für SuSE 8.1 gibt es eine Bootdiskette (bootdisk) und vier Moduldisketten mit Treibern (modulesX). Die beigefügten Textdateien enthalten die Liste der Treiber.
Unter DOS bzw. Windows können Sie das Programm rawrite benutzen. Sie finden das Programm auf der SuSE-Distribution auf der CD 1 im Verzeichnis /dosutils/rawrite. Die Bootimages befinden sich im Verzeichnis /disks auf der gleichen CD. Sie können also die Bootdisketten durch die Befehle
R:> dosutils\rawrite\rawrite disks\bootdisk R:> dosutils\rawrite\rawrite disks\modules1 R:> dosutils\rawrite\rawrite disks\modules2 R:> dosutils\rawrite\rawrite disks\modules3 R:> dosutils\rawrite\rawrite disks\modules4auf fünf 3,5''-Disketten installieren, wenn die CD im Laufwerk R: liegt. Die Disketten müssen vorher formatiert werden1.3.
SuSE hat für die Administration das Tool YaST2 für die graphische Oberfläche entwickelt. Es erlaubt eine wesentlich komfortablere aber nicht unbedingt schnellere Administration des Systems. Auch normale Benutzer können die YaST2 Kontrollzentrum oder die einzelnen Module aufrufen. Vor der Ausführung wird aber nach dem Passwort für root gefragt. Es ist also nicht nötig sich extra als root anzumelden um das System administrieren zu können.
Im YaST-Kontrollzentrum finden Sie die Module in verschiedenen Gruppen zusammengefaßt. Ich gehe im folgenden Abschnitt nur vereinzelt auf die einzelnen Module ein, weil die Funktionsweise vieler Module zum jetzigen Zeitpunkt zu viel weiteres Wissen erforden würde und damit den Umfang dieses Kapitels sprengen würde.
Der folgende Abschnitt zeigt Ihnen die Administration einiger Funktionen. Diese ist im Prinzip über YaST sehr einfach. In den meisten Fällen muß man nur wissen was man will1.6 und man muß lesen können.1.7
Nach dem Starten des Moduls sucht YaST nach der Paketliste. Dies kann einen Moment dauern. Findet YaST kein Installationsmedium, so behilft er sich mit der letzten gespeicherten Liste.
Achtung! Installation über NFS: Sollte sich YaST bei dieser Phase aufhängen und nicht weitermachen, dann liegt es in den meisten Fällen daran, daß der NFS-Server nicht erreichbar ist. Da es sich um eine harte Verbindung handelt, dauert es sehr lange bis es zu einem Timeout kommt und YaST den Fehler bemerkt. Um diesen Fehler zu umgehen, wählen Sie vorher ein anderes Installationsmedium aus.
Nach dem Laden der Paketlisten erscheint das Auswahlfenster für die Pakete. Sie sehen dort drei Tabellen. Links oben zeigt Ihnen die Themengruppen oder Paketserien an, in die die Pakete einsortiert worden sind. Unten links sehen Sie, wieviel Platz noch auf der Festplatte vorhanden ist. Die rechte Tabelle zeigt die Pakete in der Gruppe an. Durch Doppelklicken oder Betätigen des Buttons Aus-/Abwählen können Sie den Zustand des Pakets ändern. Dieser Zustand wird durch ein Zeichen vor dem Paketnamen angezeigt. Dabei steht ein X für ein Paket, das zur Installation vorgesehen ist. Das kleine i steht für ein bereits installiertes Paket und das kleine d für ein installiertes Paket, daß deinstalliert werden soll. Auch ein kleines a kann als Markierung vorkommen. Diese Pakete wurden automatisch ausgewählt zur Installation, da diese von anderen Paketen benötigt werden. Keine Markierung bedeutet natürlich, daß dieses Paket nicht installiert und auch nichts für dieses Paket geplant ist.
Zu den meisten Paketen existiert neben der Kurzbeschreibung in der Tabelle noch eine etwas ausführlichere Beschreibung des Pakets. Diese erreichen Sie über den Button Beschreibung, was Sie natürlich nie erraten hätten. ;-)
In vielen Fällen kennt man den Namen des Programms, aber nicht in welchem Paket oder in welcher Themengruppe/Paketserie das Paket liegt. In den meisten Fällen heißt das Programmpaket genau wie das Programm. Über eine Suchfunktion (Button Suchen) können die Paketnamen und sogar die Beschreibungen nach einem Stichwort durchsucht werden.
Unter Extras finden Sie weitere Funktionen um Pakete auszuwählen oder abzuwählen. Besonders interessant ist die Möglichkeit, die aktuelle Paketauswahl abzuspeichern oder eine gespeicherte Paketauswahl einzuladen. Dadurch ist es relativ schnell möglich Rechner mit der gleichen Softwareausstattung zu installieren.
Nach der Paketauswahl, die Sie mit dem Button OK abschließen, werden die Pakete installiert. Bei der CD-Version werden Sie dann und wann aufgefordert die entsprechenden CDs einzulegen. Mit einem Fortschrittsbalken werden Sie darüber informiert, wie weit Ihre Installation ist. Nach Abschluß der Installation startet YaST das Programm SuSEConfig, daß die Konfigurationsdateien des Systems für die neuen Programmen konfiguriert.
Und schon sind die Programme installiert.
Zum Glück gibt es so Leute, die sich nicht damit abfinden und die Fehler in Programmen bereinigen. Bei OpenSource-Software kann dies theoretisch jeder. Wohlgemerkt: theoretisch. Um sich in einem großen Programm zurechtzufinden braucht es schon etwas längere Einarbeitungszeit und gute Kenntnisse in den Programmiersprachen und natürlich der Programmierung selber.
Jedenfalls werden viele Fehler bzw. Sicherheitslücken im Laufe der Zeit in Programmen entdeckt und oft auch behoben. Um nicht das ganze Programm neu einspielen zu müssen, benutzt man sogenannte Patches (Flicken), die den Binärcode des ``alten'' Programms auf den neuesten Stand bringen. Die Fehlerkorrekturen - manche Leute reden auch von Fehlerveränderungen - können Sie manuell einspielen. SuSE bietet Ihnen den Service eines Online-Updates. Das YOU (YaST Online Update) stellt Ihnen die neuesten Patches zu den SuSE-Paketen zur Verfügung. Es stellt fest, was an neuen Patches vorhanden ist. Dann lädt es die Patches für die installierten Programme runter und installiert Sie.
Das YOU finden Sie auch im Kontrollzentrum unter Software. Nach dem Starten des Moduls sucht das System nach verfügbaren Update-Servern. Sie müssen natürlich auch eine Verbindung zum Internet besitzen.
Sie können nun zwischen manuellem und automatischem Update wählen. Entscheiden Sie sich für das manuelle Update, denn dort können Sie besser sehen, was installiert wird. Sie können auch den Server wählen, von dem Sie die Patches beziehen möchten. Dies sollten Sie tun, falls der erste Server überlastet ist.
Nun lädt YOU die Liste der zur Verfügung stehenen neuen Updates herunter. Nachdem die Verbindung beendet wurde, geht es mit Weiter weiter.
Sie sehen nun die Liste der zur Verfügung stehen Patches mit Erläuterungen. Die Patches, die Sie benötigen sind schon mit einem X gekennzeichnet zum Download vorgesehen. Sie können nun einfach mit Weiter zum nächsten Schritt, dem Herunterladen der Pakete, gehen.
Nachdem dieses auch abgeschlossen ist und Sie mit Weiter zum nächsten Bildschirm gewechselt sind, kann es nun endlich mit dem Einspielen der Patches losgehen. Danach wird noch einmal SuSEconfig gestartet um die Konfigurationsdateien anzupassen und schon ist Ihr System auf dem neuesten Stand.
Für die Benutzerverwaltung finden wir in der Gruppe Sicherheit & Benutzer die Module Benutzer bearbeiten und anlegen, Neuen Benutzer anlegen, Gruppen bearbeiten und anlegen und Neue Gruppen anlegen.
Diese Module sind Frontends zu der eigentlichen Benutzerverwaltung von Linux. Ein Frontend ist ein Programm, das eigentlich nichts selber macht, sondern sich als Bedienungselement zwischen den Benutzer und dem eigentlichem Programm setzt. Das Ziel eines Frontends ist es, die Bedienung von Programmen und Konfigurationsdateien zu erleichtern und damit komfortabler und fehlerfreier zu machen.
Die Konfigurationsdateien für die Benutzerverwaltung befinden sich wie die meisten Konfigurationsdateien im Verzeichnis /etc. Die Liste der Benutzer ist in der Datei /etc/passwd abgelegt. Die Passwörter befinden sich in der Datei /etc/shadow. Deren Aufbau und Arbeitsweise wird in einem späteren Kapitel behandelt.
Bei der Eingabe eines Passworts müssen Sie zwischen Groß- und Kleinschreibung unterscheiden. Ein Passwort sollte mindestens fünf Zeichen lang sein und darf keine Sonderzeichen (z. B. Akzente) enthalten.
Sie können für die Passwörter Buchstaben, Zahlen, Leerzeichen und die Zeichen #*,.;:._-+!$%&/|?{[()]}. verwenden. Es ist ausreichend, ein Passwort mit der Länge von maximal acht alphanumerischen Zeichen zu wählen. Alle darüber hinausgehenden Zeichen werden bei der normalerweise eingestellten Crypt-Verschlüsselungen ignoriert. Das Passwort müssen Sie zweimal eintragen, da es aus Sicherheitsgründen nicht angezeigt wird. So können die meisten Tippfehler verhindert werden.
Für die Benutzernamen und Passwörter gibt es Regeln. So darf der Benutzername nur aus Kleinbuchstaben, Ziffern, ``-'' und ``_'' bestehen und muß mit einem Buchstaben oder ``_'' beginnen. Dies ist aber nur eine Vorgabe von YaST. Linux selber erlaubt auch Großbuchstaben und andere Zeichen für den Benutzernamen.
Die Felder Vorname und Nachname sind eigentlich Spaß. Die entsprechenden Daten werden nur in das Kommentarfeld des Benutzers in der Datei /etc/passwd eingetragen.
Hinter dem Button Details verbergen sich weitere Einstellungsmöglichkeiten wie Home-Verzeichnis oder die Benutzerkennung (UID).
Jedem Benutzer bekommt eine eindeutige Benutzerkennung (UID) zugewiesen. Für normale Benutzer sollte eine UID größer als 499 verwendet werden, da die kürzeren UIDs vom System für spezielle Zwecke und Pseudo-Benutzernamen verwendet werden.
Benutzer können durch eine Mitgliedschaft in einer Gruppe weitere Rechte bekommen. Zu jedem Benutzer gehört eine Standardgruppe in der er Mitglied ist. In dem Feld Standardgruppe können Sie eine Gruppe aus der Liste aller in Ihrem System vorhandenen Gruppen wählen.
Zusätzliche Gruppenzugehörigkeiten können sie über das entsprechende Feld dem Benutzer zuweise. Hier wird angezeigt, zu welchen Gruppen der Benutzer noch gehört.
Der Benutzer kann auch ein Heimatverzeichnis (Home Directory) besitzen um seine Daten zu dort zu speichern. Normalerweise ist dies /home/BENUTZERNAME.
Für den Betrieb auf der Konsole (Textbetrieb) wird eine Login-Shell (der sog. Kommandozeileninterpreter) benötigt. Wählen Sie im entsprechenden Feld eine Shell aus der Liste der auf Ihrem System installierten Shells aus.
In diesem Fenster stehen Ihnen drei Funktionen zur Verfügung:
Wenn Sie den Button Hinzufügen betätigen landen Sie im gleichen Fenster wie in dem Module Neuen Benutzer anlegen.
Auch nachdem Sie den Button Bearbeiten landen Sie im gleichen Fenster wie in dem Module Neuen Benutzer anlegen. Nur daß die Felder nicht leer sondern mit den Daten des zu bearbeitenden Benutzers gefüllt sind.
Wenn Sie den markierten Benutzer löschen wollen, dann betätigen Sie einfach den Button Löschen. Sie werden dann noch gefragt, ob das Heimatverzeichnis des Benutzers auch mit gelöscht werden soll. Wenn Sie sich dann fürs Löschen entscheiden ist es vorbei mit dem Benutzer.
Vorbei? Nicht ganz. Die Änderungen werden erst dann ins System übertragen, wenn Sie mit dem Button Beenden das Modul verlassen. Das Verlassen über den Button Abbrechen läßt das System unberührt.
Die Module Gruppen bearbeiten und anlegen und Neue Gruppen anlegen sind für die Verwaltung der Gruppen zuständig.
Der Name der Gruppe sollte nicht zu lang sein. Normalerweise werden 1-10 Zeichen verwendet. Ansonsten gelten die gleichen Regeln wie für die Benutzernamen.
Wie auch die Benutzer haben die Gruppe eine interne Kennung. Diese GID liegt irgendwo zwischen 0 und 60000. Einige der IDs werden bereits während der Installation vergeben. YaST2 gibt eine Warnmeldung aus, wenn Sie aus Versehen eine bereits vergebene verwenden.
Auch Gruppen haben ein Passwort. Falls die zugehörigen Benutzer der Gruppe sich beim Wechseln in diese neue Gruppe identifizieren sollen, können Sie dieser Gruppe ein Passwort zuteilen. Aus Sicherheitsgründen wird dieses Passwort hier nicht angezeigt. Dieses Eingabefeld muss nicht ausgefüllt werden. Um Tipfehler zu vermeiden, müssen Sie das Passwort zweimal eingeben.
Das Fenster Mitglieder dieser Gruppe zeigt eine Liste aller angelegten Benutzer an. Hier können Sie einstellen, wer Mitglieder dieser Gruppe sein soll.
Beim Anlegen und Bearbeiten einer Gruppe landen Sie im gleichen Fenster wie im Modul Neue Gruppen anlegen.
Das Löschen von Gruppen gestaltet sich etwas schwieriger, da erst alle Benutzer aus der Gruppe entfernt werden müssen, bevor sich die Gruppe löschen läßt.
Auch hier gilt, alle Änderungen werden erst nach dem Verlassen des Moduls über den Button Beenden in das System übertragen.
Notizen:
Notizen:
Erste Schritte
Die Ausführung der folgenden Aufgaben ist wichtig für alle folgenden Aufgaben. Führen Sie daher bitte alles aus. Eventuell haben Sie die Aufgaben schon begleitend zum Unterricht bzw. zur Lektüre gemacht.
Für die Linux-Installation sind zusätzlich zu den Standardpartitionen noch Partitionen für das Verzeichnis /home und /var geplant. Skizzieren Sie den Aufbau des Partitionsschema unter Berücksichtigung einer sinnvollen Aufteilung und unter Verwendung der Linux-Partitionsbezeichnungen.
Notizen:
Für die Bedienung und Arbeit am X-Window-System wird ein Window-Manager benötigt. Er kümmert sich in erster Linie darum, wie die Programmfenster am Bildschirm dargestellt und bedient werden. Er stattet die Fenster mit einer Titelleiste und Schaltflächen (Buttons, Menüs etc) aus und hilft bei deren Verwaltung (Verschieben, Größe ändern, Verkleinern zu Icon, Programmwechsel). Daneben stellen die meisten Windowmanager Menüs für die gängigen Programme bereit.
Diese elementaren Funktionen werden nicht vom X-Window-System zur Verfügung gestellt. Der Vorteil dieser Methode ist die große Flexibilität bei der Gestaltung der Oberfläche und damit der Benutzerschnittstelle. Das hat aber auch den Nachteil, daß jeder Anwender einen anderen Windowmanager benutzt und damit keine einheitliche Oberfläche existiert. Ein Problem, daß vor allem die Anfänger betrifft.
Die aktuelle SuSE-Distribution startet automatisch das X-Window-System für die graphische Anmeldung. Wird das System mit der Textkonsole gestartet, kann von der Textkonsole aus das X-Window-System mit dem Befehl startx gestartet werden.
Sollte das X-Window-System sich aufhängen, kann es mit der Tastenkombination STRG + ALT + BACKSPACE beendet werden.
Noch einige Hinweise zu KDE.
Das Programm präsentiert sich nach dem Start mit einem fast leeren Feld links und vier Graphen rechts. Warten Sie einen Moment und Sie sehen langsam von rechts die aktuellen Werte des Systems in die Graphen wandern.
Über die genaue Bedeutung der einzelnen Anzeige möchte ich jetzt nicht eingehen, da dies den Umfang dieses Kapitels sprengen würde.
Sie können auch eine Auswahl der anzuzeigenden Prozesse treffen. Sie können sich entweder Alle Prozesse, die laufen, sich anzeigen lassen oder sich auf die Systemprozesse beschränken. Auch können Sie sich nur mit den Benutzer abgeben und sich die Benutzerprozesse anzeigen. Wenn Sie ganz genügsam sind, begnügen Sie sich mit Eigene Prozesse.
Wenn Sie wissen wollen, welcher Prozess durch welchen Prozess gestartet wurde, dann wählen Sie die Baum-Ansicht. Den neuesten Stand der Prozessliste können Sie mit dem Button Neu Aufbauen erzeugen. Der wichtigste Button ist wohl Beenden (kill), der durch seinen zweiten martialischen Namen schon anzeigt was er macht: Er tötet Prozesse. So können Prozesse, die sich sonst nicht mehr beenden lassen, gestoppt werden.
Wenn Sie ganz schnell an die Prozessliste herankommen wollen, dann betätigen Sie einfach die Tasten <STRG>+<ESC>. Es öffnet sich der KSysGuard mit der Ansicht der Prozeßtabelle. Nun können Sie schnell einen Prozess töten oder sich über das Verhalten der Prozesse informieren.
Wollen Sie ein Programm auf dem Desktop verewigen, was nicht im Menü erscheint, dann müssen Sie wie folgt vorgehen.
Wenn Sie nun ein Programm als root starten wollen, müssen Sie im X-Terminal oder über Befehl ausführen (<ALT>+<F2>) einfach
kdesu PROGRAMM eingeben. Also für den Editor NEdit z. B.
kdesu nedit.
Wer den Befehl häufiger braucht, kann sich einen Menüeintrag oder Icon auf dem Desktop anlegen. In den Eigenschaften des Eintrags/Icons befindet sich der Abschnitt Als anderer Benutzer ausführen. Hier einfach die Checkbox anklicken und den gewünschten Benutzernamen eintragen.
kdesu [OPTIONEN] [QT-OPTIONEN] [KDE-OPTIONEN] KOMMANDO
| Optionen | |
--help |
Grundoptionen |
--help-qt |
Spezielle Optionen zu Qt anzeigen |
--help-kde |
Spezielle Optionen zu KDE anzeigen |
--help-all |
Alle Optionen anzeigen |
-c BEFEHL |
Auszuführender Befehl |
-f DATEI |
|
-u USER |
Benutzerkennung angeben (Standard: root) |
-n |
Passwort nicht speichern |
-s |
Dämon anhalten (Alle Passwörter gehen verloren) |
-t |
Terminal-Ausgabe ermöglichen (keine Speicherung von Passwörtern) |
-p PRIO |
Priorität setzen: 0 <= prio <= 100, 0 ist die niedrigste. (Standard: 50) |
kdesu -u wwwrun -c nedit
Neben den KDE-Programmen gibt es auch weitere nützliche Applikationen, die teils auch die KDE-Bibliotheken benutzen.
Eine hilfreiche Unterstützung bei der Erstellung von HTML-Seiten bieten die Programme Bluefish und Quanta Plus. Windows Nutzern wird die Ähnlichkeit der beiden Programme zum HTML-Editor Phase V auffallen.
Ein weiterer schöner Editor ist NEdit. Er benötigt kein KDE und stellt doch wichtige Funktionen wie Syntax-Highlighting und `Suchen und Ersetzen' mit regulären Ausdrücken zur Verfügung.
Erste Schritte
Die Ausführung der folgenden Aufgaben ist wichtig für alle folgenden Aufgaben. Führen Sie daher bitte alles aus. Eventuell haben Sie die Aufgaben schon begleitend zum Unterricht bzw. zur Lektüre gemacht.
| Persönliches Verzeichnis | <Windows>+<E> |
| Konquerer (Webbrowser) | <Windows>+<K> |
| KMail | <Windows>+<M> |
| Yast2 | <Windows>+<Y> |
| KCalc | <Windows>+<T> |
Testen Sie den Erfolg.
Notizen:
| Wie kastriert man einen Windows-Benutzer? |
| Man schneidet einfach das Mauskabel durch... |
| Anonymous |
Das KDE und damit auch das X-Window-System sind nur auf Linux aufgesetzt und dienen als Benutzeroberfläche. Es gibt aber auch eine wesentlich rudimentärere Möglichkeit für den Benutzer mit Linux zu arbeiten: die Shell (engl. Muschel). Andere Begriffe für die Shell sind Kommandozeile, Textmodus oder Prompt.
Welcome to SuSE Linux 9.0 (i586) - Kernel 2.4.21-199-athlon (tty1)Mit dieser Meldung, die Ihnen die Distribution und das eingesetzte Betriebssystem mit Versionsnummer und Kernelversion anzeigt, begrüßt Sie das System. Danach steht der Login-Prompt mit Rechnername und wartet darauf, daß Sie sich an dieser Konsole anmelden.
defiant login:
Geben Sie nun Ihren Benutzernamen ein und schließen Sie die Eingabe mit der <Return>-Taste oder <Enter> ab. Sie werden nun nach Ihrem Passwort gefragt. Dies geben Sie ein und schließen die Eingabe wieder mit <Return> oder <Enter> ab. Wundern Sie sich nicht, denn Linux zeigt bei der Eingabe eines Passworts generell nichts an, noch nicht einmal die bei Windows üblichen Sternchen.
defiant login: walter Password: Have a lot of fun ... walter@defiant:~>
Ein netter Spruch wird ausgegeben und der Prompt erscheint. Der Prompt zeigt an, daß die Shell bereit ist von Ihnen ein Kommando zu bekommen.
Wenn Sie SuSE benutzen, stehen Ihnen sechs von diesen Konsolen zur Verfügung. Mit den Tasten <ALT>+<F1> bis <ALT>+<F6> können Sie zwischen den Konsolen wechseln. Sie sehen, daß die Konsolen 2 bis 6 einen schwarzen Hintergrund besitzen und die gleiche Begrüßungsmeldung enthalten. Dabei weißt das tty in der Klammer immer auf die jeweilige Konsole hin.
Wechseln Sie wieder zur ersten Konsole (<ALT>+<F1>). Geben Sie dort am Prompt tty ein und schließen Sie die Eingabe mit <Return> oder <Enter> ab. Der Befehl zeigt Ihnen nun an, auf welcher Konsole sie sich befinden.
walter@defiant:~> tty /dev/tty1
Um die Shell zu beenden, geben Sie das Kommando logout ein. Denken Sie daran, daß jedes Kommando erst dann ausgeführt wird, wenn Sie es mit <Return> oder <Enter> abschließen.
walter@defiant:~> logout Welcome to SuSE Linux 8.0 (i386) - Kernel 2.4.18-4GB (tty1) defiant login:
Nun ist die Konsole wieder zur Anmeldung bereit. Jetzt müssen Sie nur noch zum X-Window-System zurückkehren. Das X-Window-System ist praktisch die siebente Konsole. Sie können also mit <ALT>+<F7> dorthin gelangen.
Wenn Sie schon auf der Konsole sind, können Sie alle Konsolen bzw. Terminals durch die Kombination von <ALT> und den Funktionstasten <F1> bis <F6> erreichen. Da die <ALT>-Taste unter KDE bzw. X-Window eine andere Bedeutung hat, können Sie hier die Konsolen über eine Kombination von <STRG>+<ALT> und den Funktionstasten <F1> bis <F6> erreichen.
An diesem Terminal brauchen Sie sich nicht anzumelden, da Sie sich durch die graphische Oberfläche schon in einer angemeldeten Sitzung befinden. Es erscheint also sofort der Prompt. Testen Sie doch mal, was der Befehl tty hier für ein Ergebnis zeigt.
ole@defiant:~> tty /dev/pts/1
Es gibt eine ganze Reihe von X-Terminals mit z. T. sehr unterschiedlichen Fähigkeiten.
Mit dem Befehl exit können Sie das xterm dann wieder verlassen oder Sie drücken auf den X-Button oben rechts in der Titelleiste.
Im Gegensatz zu xterm kann konsole einiges mehr. So können z. B. mehrere unterschiedliche Konsolen in einem Fenster geöffnet werden. Es stehen dann auch spezielle Versionen zur Verfügung, die gleich dem Midnight-Commander, einen textbasierenden Dateimanager, starten oder als Benutzer root vorgeben.
Eine weitere Konsole öffenen Sie über den Button unten links mit der Beschriftung Neu. Sie können natürlich auch über die Menüleiste über das Menü Sitzung gehen.
Unter dem Menü Bearbeiten können Sie u. a. den Verlauf bearbeiten. Der Verlauf ist die Sammlung der Zeilen, die auf der Konsole gestanden haben. Natürlich werden nicht alle Zeilen gespeichert. Die Anzahl der zu speichernden Zeilen finden Sie unter Einstellungen/Verlaufspeicher. Voreingestellt sind 1000 Zeilen, was auch erst einmal reichen sollte. Sehr nützlich ist es, daß Sie den Verlauf auch nach einem Stichwort durchsuchen können.
Im Menü Ansicht können Sie die laufende Konsole (Sitzung) umbenennen und auf Aktivität oder Nichtaktivität überwachen lassen. Sie können Ihre Eingaben auch zu mehreren Sitzungen gleichzeitig senden und die Reihenfolge der Sitzungen in der Sitzungsleiste ändern.
Das Menü Einstellungen erlaubt individuelle Einstellungen für die konsole. Schriftgröße, Signale, Tastatur, Farben und Größe können hier eingestellt werden.
Unter Hilfe finden Sie, wie bei eigentlich jedem KDE-Programm Anleitungen und Informationen über das Programm.
Der Prompt zeigt uns schon ein paar wichtige Informationen3.1. Welcher Benutzer ist auf welchem Rechner eingeloggt und in welchem Verzeichnis befindet er sich gerade. Das Verzeichnis ~ ist natürlich kein Verzeichnis. Es ist ein Alias oder Synonym für das Heimatverzeichnis des jeweiligen Benutzers. Das können wir auch schnell mal vergleichen. Geben Sie doch einfach mal hinter dem Prompt den Befehl pwd ein.
ole@defiant:~> pwd /home/ole ole@defiant:~>
Bei dem Benutzer ole steht das ~ für sein Heimatverzeichnis /home/ole. Die Heimatverzeichnisse der Benutzer heißen normalerweise wie ihre Besitzer und liegen im Verzeichnis /home. Es ist aber auch möglich die Heimatverzeichnisse anders zu benennen.
ole@defiant:~> ls Documents public_html
Zwei Dateien liegen bei einem frisch eingerichteten Benutzer bei SuSE 8.0 im Heimatverzeichnis. Haben Sie auf der graphischen Oberfläche schon gearbeitet, so können hier noch mehr Dateien liegen.
ole@defiant:~> ls -l insgesamt 8 drwxr-xr-x 2 ole users 4096 Sep 25 12:25 Documents drwxr-xr-x 2 ole users 4096 Sep 25 12:25 public_html
Wenn Sie sich nun die Ausgabe anschauen, dann wird Ihnen sicherlich nicht die Bedeutung jeder dieser Spalten klar sein. Schauen wir uns dazu die Ausgabe noch einmal genauer an.
| Typ und Rechte | Links | Besitzer | Gruppe | Größe | Änderungsdatum | Name |
| drwxr-xr-x | 2 | ole | users | 4096 | Sep 25 12:25 | Documents |
| drwxr-xr-x | 2 | ole | users | 4096 | Sep 25 12:25 | public_html |
| Zeichen | Bedeutung |
| - | gewöhnliche Datei |
| d | Verzeichnis (directory) |
| c | zeichenorientierte Gerätedatei (character device) |
| b | blockorientierte Gerätedatei (block device) |
| p | FIFO-Pipeline(named pipe) |
| l | symbolischer Link (symbolic link) |
| s | Netzwerksocket (socket) |
Die restlichen neun Zeichen geben in Gruppen zu jeweils drei Zeichen die Rechte auf die Datei an. Dabei steht das r für ``Lesen'' (read), das w für ``Schreiben'' (write) und das x für ``Ausführen'' (execute). Die ersten drei Zeichen geben die Rechte für den Besitzer der Datei an. Die zweiten drei Zeichen geben Auskunft über die Rechte der Gruppe, die dieser Datei zugeordnet wurde und die letzten drei Zeichen geben dann an, was der Rest der Welt mit dieser Datei darf.
ole@defiant:~> ls Documents public_html ole@defiant:~> ls -a . .Xresources .emacs .profile .xim .xtalkrc .. .bash_history .exrc .urlview .xinitrc Documents .Xdefaults .bashrc .kermrc .xcoralrc .xserverrc.secure public_html .Xmodmap .dvipsrc .muttrc .xemacs .xsession
Anstatt zwei werden nun 23 Dateien angezeigt. Diese neu angezeigten Dateien bezeichnet man als Versteckte Dateien. Sie werden bei normalen Dateioperationen nicht berücksichtigt. Diese versteckten Dateien finden Sie auch in anderen Betriebssystemen. Dort wird durch ein Attribut der Datei angezeigt, ob eine Datei versteckt ist oder nicht. Wenn Sie sich die Liste der Dateien im obigen Beispiel noch einmal genau anschauen, finden Sie recht schnell die Gemeinsamkeit der versteckten Dateien heraus.
Dateien, deren Name mit einem Punkt beginnt, bezeichnet man als Versteckte Dateien. Sie werden bei normalen Dateioperationen nicht berücksichtigt.
Eine besondere Bedeutung haben die Dateien `.' und `..'. Sie sind Bestandteil des Verzeichnisses. Der Name `.' ist ein weiterer Link für das Verzeichnis in dem sich diese Datei befindet. Dagegen verweist der Name .. auf das Elternverzeichnis des aktuellen Verzeichnis. Wenn Sie das obige Beispiel als Grundlage nehmen, so ist . gleichzusetzen mit /home/ole und .. mit /home.
Zwei Optionen können auch miteinander kombiniert werden. Eine ausführliche Liste aller Dateien bekommen Sie durch die Kombination der Optionen -l und -a.
ole@defiant:~> ls -a -l insgesamt 92 drwxr-xr-x 5 ole users 4096 Sep 25 12:25 . drwxr-xr-x 9 root root 4096 Sep 25 12:25 .. -rw-r--r-- 1 ole users 5742 Sep 25 12:25 .Xdefaults -rw-r--r-- 1 ole users 1305 Sep 25 12:25 .Xmodmap lrwxrwxrwx 1 root root 10 Sep 25 12:25 .Xresources -> .Xdefaults -rw------- 1 ole users 0 Sep 25 12:25 .bash_history -rw-r--r-- 1 ole users 1691 Sep 25 12:25 .bashrc -rw-r--r-- 1 ole users 208 Sep 25 12:25 .dvipsrc -rw-r--r-- 1 ole users 1637 Sep 25 12:25 .emacs -rw-r--r-- 1 ole users 1124 Sep 25 12:25 .exrc -rw-r--r-- 1 ole users 164 Sep 25 12:25 .kermrc -rw-r--r-- 1 ole users 2286 Sep 25 12:25 .muttrc -rw-r--r-- 1 ole users 952 Sep 25 12:25 .profile -rw-r--r-- 1 ole users 311 Sep 25 12:25 .urlview -rw-r--r-- 1 ole users 7913 Sep 25 12:25 .xcoralrc drwxr-xr-x 2 ole users 4096 Sep 25 12:25 .xemacs -rw-r--r-- 1 ole users 3407 Sep 25 12:25 .xim -rwxr-xr-x 1 ole users 2324 Sep 25 12:25 .xinitrc -rw-r--r-- 1 ole users 1101 Sep 25 12:25 .xserverrc.secure -rwxr-xr-x 1 ole users 2804 Sep 25 12:25 .xsession -rw-r--r-- 1 ole users 119 Sep 25 12:25 .xtalkrc drwxr-xr-x 2 ole users 4096 Sep 25 12:25 Documents drwxr-xr-x 2 ole users 4096 Sep 25 12:25 public_html
Wer es kürzer mag, kann die Buchstaben auch zusammenziehen. Dabei ist es völlig egal, ob Sie -al oder -la schreiben.
ole@defiant:~> ls -al insgesamt 92 drwxr-xr-x 5 ole users 4096 Sep 25 12:25 . drwxr-xr-x 9 root root 4096 Sep 25 12:25 .. -rw-r--r-- 1 ole users 5742 Sep 25 12:25 .Xdefaults -rw-r--r-- 1 ole users 1305 Sep 25 12:25 .Xmodmap ...
ole@defiant:~> ls -al Documents insgesamt 12 drwxr-xr-x 2 ole users 4096 Sep 25 12:25 . drwxr-xr-x 5 ole users 4096 Sep 25 12:25 .. -rw-r--r-- 1 ole users 1106 Sep 25 12:25 .directory
Der Name des Verzeichnis Documents bezeichnet man als Parameter des Befehls ls. Die Angabe des Verzeichnisnamens erfolgte hier relativ zum Arbeitsverzeichnis. Um das Elternverzeichnis des Arbeitsverzeichnis anzuzeigen können wir den Dateinamen .. verwenden.
ole@defiant:~> ls .. conny lost+found ole perl vnc walter willi
Um zur Wurzel zu gelangen müssen Sie sogar noch ein Verzeichnis weiter im Verzeichnisbaum hochgehen.
ole@defiant:~> ls ../.. bin cdrom dvd floppy lib media opt proc sbin usr windows boot dev etc home lost+found mnt pcmcia root tmp var
Sie können die Verzeichnisse auch direkt adressieren, wenn Sie den Verzeichnisnamen mit einem Slash / beginnen lassen. Jetzt wird nämlich nicht vom aktuellen Arbeitsverzeichnis aus gesehen, sondern von der Dateiwurzel.
ole@defiant:~> ls / bin cdrom dvd floppy lib media opt proc sbin usr windows boot dev etc home lost+found mnt pcmcia root tmp var ole@defiant:~> ls /home conny lost+found ole perl vnc walter willi ole@defiant:~> ls /home/ole Documents public_html
Neben den Verzeichnissen können Sie auch eine Auswahl unter den Dateien treffen, die Sie sich anzeigen lassen wollen. Hilfreich sind dabei die sogenannten Jokerzeichen oder Wildcards.
Dazu schauen Sie sich doch mal das Verzeichnis /etc an, in dem sich die Konfigurationsdateien des Linux-Systems befinden.
ole@defiant:~> ls /etc DIR_COLORS inittab php.ini HOSTNAME inputrc pnm2ppa.conf Muttrc insserv.conf powerd.conf SuSE-release ioctl.save ppp ...
Es werden sehr viele Dateien angezeigt. Sie können die Anzahl der angezeigten Dateien verringern, wenn Sie andere Kriterien für die Auswahl stellen. So könnten Sie sich nur die Dateien anzeigen lassen, die mit dem Buchstaben ``a'' beginnen.
ole@defiant:~> ls /etc/a* /etc/a2ps-site.cfg /etc/aliases /etc/at.deny /etc/a2ps.cfg /etc/aliases.db /etc/auto.master /etc/adjtime /etc/asound.state /etc/auto.misc /etc/alsa.d: emu10k1 sbawe
Der Asterisk ``*'' steht für eine beliebige Anzahl beliebiger Zeichen und das Fragezeichen ``?'' steht für ein beliebiges Zeichen. Auffällig an dem Beispiel oben ist, daß nicht nur der Name des Verzeichnis angegeben wird, sondern auch der Inhalt. Dies ist eine der Eigenschaften von ls. Ist ein Verzeichnis ein Ziel, dann wird der Inhalt des Verzeichnis angezeigt. Mit der Option -d kann dies unterbunden werden.
ole@defiant:~> ls -d /etc/a* /etc/a2ps-site.cfg /etc/aliases /etc/asound.state /etc/auto.misc /etc/a2ps.cfg /etc/aliases.db /etc/at.deny /etc/adjtime /etc/alsa.d /etc/auto.master ole@defiant:~> ls -ld drwxr-xr-x 5 ole users 4096 Sep 25 12:25 .
Dies wirkt, wie Sie oben sehen, auch beim aktuellen Arbeitsverzeichnis. Es wird nur die Information über das aktuelle Verzeichnis angezeigt und nicht über die enthaltenen Dateien.
Die Inode-Nummer können sie sich mit ls unter Verwendung der Option -i anzeigen lassen.
ole@defiant:~> ls -i
1095 Documents 1097 public_html
ole@defiant:~> ls -i /home
1074 conny 31873 ole 112382 vnc 286867 willi
11 lost+found 223209 perl 207194 walter
--help aufrufen. Mit dem doppelten Minuszeichen wird bei der letzten Option dem Befehl signalisiert, daß es sich nicht um die einzelnen Optionen -h, -e, -l und -p handelt, sondern um eine Option mit dem langen Namen help.
ole@defiant:~> ls --help Benutzung: ls [OPTION]... [DATEI]... Auflistung von Informationen der DATEIen (Standardvorgabe ist das momentane Verzeichnis). Alphabetisches Sortieren der Einträge, falls weder -cftuSUX noch --sort angegeben. -a, --all Einträge, die mit . beginnen, nicht verstecken. -A, --almost-all Keine Anzeige implizierter . und .. -b, --escape Ausgabe octaler Repräsentation für nicht-druck- ...
Natürlich ist der Hilfetext etwas länger als die Konsolenhöhe. Auf der Konsole können Sie ohne Probleme scrollen (wenn es nicht mehr als 1000 Zeilen sind). Damit die Anzeige nicht durchscrollt, sondern seitenweise anzeigt, können Sie einen sogenannten Pager benutzen. Ein solcher Pager ist der Befehl more. Sie leiten einfach die Ausgabe des Befehls mit dem Zeichen | an den Pager weiter.
ole@defiant:~> ls --help | more ole@defiant:~> ls /etc | more ole@defiant:~> ls -l / | more ole@defiant:~> ls /dev | more
Mit der Leertaste blättern Sie die Seiten des Pagers more durch. Erreicht der Pager das Ende des Textes bzw. der Ausgabe, so beendet er sich automatisch.
Die Optionen -aldi sollten sie sich für den Befehl ls merken.
-a |
Zeigt auch die versteckten Dateien an (-all) |
-l |
Zeigt ausführliche Liste zu den Dateien an (long) |
-d |
Zeigt Verzeichnis anstatt Inhalt an (-directory ) |
-i |
Zeigt Inodes an (-inode) |
--help |
Zeigt die Hilfe für den Befehl an |
ole@defiant:~> touch testdatei ole@defiant:~> ls -l insgesamt 8 drwxr-xr-x 2 ole users 4096 Sep 25 12:25 Documents drwxr-xr-x 2 ole users 4096 Sep 25 12:25 public_html -rw-r--r-- 1 ole users 0 Sep 26 14:37 testdatei
Eigentlich soll der Befehl touch die Zeit der letzten Änderung und des letzten Zugriffs auf die aktuelle Zeit stellen. Existiert die angegebene Datei nicht, dann wird einfach eine neue Datei erstellt.
Ein neues Verzeichnis zu erstellen ist ebenso einfach. Der Befehl heißt hier mkdir.
ole@defiant:~> mkdir test ole@defiant:~> ls Documents public_html test testdatei ole@defiant:~> mkdir beruf hobby ole@defiant:~> ls Documents beruf hobby public_html test testdatei
Sie müssen sich beim Befehl mkdir, wie auch bei touch, nicht auf einen Parameter beschränken. Sie können ruhig mehrere Dateien bzw. Verzeichnisse angegeben, die erstellt werden sollen.
Auch eine Angabe des Verzeichnis mit seinen Elternverzeichnissen ist möglich. Allerdings müssen diese vorher existieren.
ole@defiant:~> cd / ole@defiant:/> mkdir /home/ole/test/neuerOrdner ole@defiant:/> ls /home/ole/test neuerOrdner
ole@defiant:~> rmdir beruf ole@defiant:~> rmdir test rmdir: »test«: Das Verzeichnis ist nicht leer
Allerdings löscht rmdir nur leere Verzeichnisse. Sobald sich nur eine Datei oder ein Verzeichnis darin befindet, wird das Löschen des Verzeichnis verweigert.
Dateien entledigt man sich dagegen durch den Befehl rm (remove).
ole@defiant:~> rm testdatei ole@defiant:~> rm test rm: »test« ist ein Verzeichnis
Mit Verzeichnissen tut sich rm dagegen schwer und verweigert das Löschen mit einem entsprechenden Hinweis.
Dies ist auch die normale Arbeitsweise der Shellkommandos. Klappt ein Befehl, so erscheint in der Regel kein Kommentar, sondern der Prompt fordert den Benutzer auf wieder tätig zu werden. Nur wenn Fehler aufgetreten sind, melden sich die Kommandos noch einmal beim Benutzer.
Sie können aber rm überreden auch Verzeichnisse zu löschen. Mit der Option -r (recursive) löscht rm Verzeichnisse mit ihrem Inhalt.
ole@defiant:~> rm -r test
Manchmal fragt rm auch nach, ob eine Datei gelöscht werden soll. Ist einem das zu lästig, gerade wenn ganze Verzeichnisstrukturen gelöscht werden sollen, dann sorgt der Schalter -f für Ruhe. Er sorgt dafür, daß die Dateien ohne Nachfrage gelöscht werden.
Sie sollten aber mit dem Befehl vorsichtig sein. Stellen Sie sich doch einfach mal vor was passiert, wenn der Administrator folgendes eingibt:
defiant:~$ rm -rf /
Eine Datei zum Bearbeiten rufen Sie ganz einfach auf, indem Sie den Namen hinter dem Befehl vi schreiben.
ole@defiant:~> vi meinedatei
Existiert die Datei nicht, so geht der vi von einer leeren neuen Datei aus, wie sie auch in der Statuszeile ganz unten sehen können.
"meinedatei" [Neue Datei] 0,0-1 Alles
Der vi besitzt verschieden Modi für die Bearbeitung von Dokumenten. Beim Start landen Sie im Bearbeitungsmodus, der spezielle Funktionen zur Bearbeitung der Dokumente zur Verfügung stellt. Diese Funktionen werden nicht wie von den meisten Editoren gewohnt über ein Menü zur Verfügung gestellt, sondern durch Tastaturkürzel.
Sie müssen, wenn Sie Text schreiben wollen, in den Eingabemodus wechseln. Dazu drücken Sie im Bearbeitungsmodus die Taste <I>. Die Statuszeile zeigt nun EINFÜGEN bzw. INSERT an.
-- EINFÜGEN -- 0,1 Alles
Hier können Sie nun Text eingeben, mit den Richtungstasten sich durch den Text bewegen und mit der Taste <ENTF> bzw. <DEL> Zeichen rechts vom Cursor löschen.
Um wieder in den Bearbeitungsmodus zu wechseln, drücken Sie einfach die Taste <ESC>. Um sicher zu gehen, können Sie die Taste auch mehrfach drücken. vi quittiert das dann mit einem Piepton.
Im Bearbeitungsmodus können Sie das Zeichen unter dem Cursor entweder wie im Eingabemodus mit der Taste <DEL> löschen oder indem Sie die Taste <X> betätigen. Es gibt aber auch weiter reichende Löschkommandos im Zusammenhang mit der Taste <D>. So löscht <D> <W> die Zeichen bis zum Wortende inklusive des folgenden Leerzeichens. Mit <D> <E> löscht er ebenfalls den Rest vom Wort, ohne aber das Leerzeichen mitzunehmen. Mit der Kombination d$ (<D> <SHIFT>+<4>) löscht er den Text vom Cursor bis zum Zeilenende. Und um die ganze Zeile, in der sich der Cursor befindet, zu löschen, betätigen Sie einfach zweimal die Taste <D> (<D> <D>). Sie können auch durch das Voranstellen einer Zahl vor das Kommando angeben, wie oft das Kommando ausgeführt werden soll. So können Sie mit <4> <D> <D> vier Zeilen löschen oder mit <3> <D> <W> die drei Worte rechts vom Cursor.
Die Mehrfachausführung klappt auch mit dem Eingabemodus. Einfach vorm Einschalten des Eingabemodus eine Zahl eintippen. Nach Beendigung des Eingabemodus wird das frisch Eingegebene mehrfach ausgegeben. So können Sie z. B. mit der Tastenkombination <7> <5> <I> <-> <ESC> 75 Minus-Zeichen in den Text einfügen.
Vom Bearbeitungsmodus können Sie auch einen Kommandomodus aufrufen. Dies erfolgt durch den Doppelpunkt (<SHIFT>+<:>). Der Doppelpunkt erscheint in der unteren Statuszeile und Sie können dann weitere Befehle eintippen, die Sie mit der <RETURN>-Taste abschließen.
:q |
Beendet den vi |
:q! |
Beendet den vi ohne Nachzufragen |
:wq |
Beendet den vi und speichert das Dokument vorher |
Bei Linux wird der vi-Klon vim mitgeliefert und durch den Befehl vi ausgeführt. Mit dem Befehl vimtutor erhalten Sie ein kleines Tutorial mit Übungen zur Bedienung des vim.
ole@defiant:~/test> vi themenvorschlag.txt ole@defiant:~/test> ls -l insgesamt 4 -rw-r--r-- 1 ole users 2123 Okt 9 10:25 themenvorschlag.txt ole@defiant:~/test> cp themenvorschlag.txt themenvorschlag.txt.alt ole@defiant:~/test> ls -l insgesamt 8 -rw-r--r-- 1 ole users 2123 Okt 9 10:25 themenvorschlag.txt -rw-r--r-- 1 ole users 2123 Okt 9 10:26 themenvorschlag.txt.alt ole@defiant:~/test>
So kann einfach eine Sicherungskopie einer Datei erstellt werden. In den meisten Fällen werden aber eine oder mehrere Dateien in ein anderes Verzeichnis kopiert, wie z. B. in /floppy für die Diskette. In diesem Fall wird anstatt der Zieldatei ein Zielverzeichnis angegeben. Erkennt der Befehl cp, daß das Ziel ein existierendes Verzeichnis ist, dann kopiert er die Datei ohne den Namen zu ändern in das Verzeichnis. Existiert kein Verzeichnis, so wird die Angabe als Dateiname verstanden und die Datei dementsprechend kopiert. Übrigens: cp überschreibt in der normalen Einstellung existierende Dateien gnadenlos.
ole@defiant:~/test> mkdir backup ole@defiant:~/test> ls -l backup/ insgesamt 0 ole@defiant:~/test> cp themenvorschlag.txt backup ole@defiant:~/test> ls -l backup/ insgesamt 4 -rw-r--r-- 1 ole users 2123 Okt 9 10:40 themenvorschlag.txt
Sie können auch mehrere Dateien zum Kopieren angegeben, wenn Ihr Ziel ein Verzeichnis ist.
ole@defiant:~/test> cp /etc/enscript.cfg /etc/esd.conf backup ole@defiant:~/test> ls -l backup insgesamt 16 -rw-r--r-- 1 ole users 5983 Okt 9 10:43 enscript.cfg -rw-r--r-- 1 ole users 77 Okt 9 10:43 esd.conf -rw-r--r-- 1 ole users 2123 Okt 9 10:40 themenvorschlag.txt
Wenn Sie das aktuelle Verzeichnis als Ziel angeben wollen, machen Sie das einfach durch den Punkt `.'. Genauso können Sie das Elternverzeichnis mit `..' als Ziel angeben. Um zu sehen, welche Dateien kopiert worden sind, benutzen Sie den Befehl cp einfach mit dem Schalter -v (verbose). Diese auch als ``Blubberschalter'' bekannte Option veranlaßt den Befehl dazu ausführlich über seine Tätigkeit zu berichten. Sie werden bei vielen Shell-Befehlen die Option -v wiederfinden. Sie können natürlich auch für die Liste der zu kopierenden Dateien die Jokerzeichen wie den Asterisk ``*'' verwenden.
ole@defiant:~/test> cp -v /etc/f* . »/etc/fam.conf« -> »./fam.conf« »/etc/fb.modes« -> »./fb.modes« »/etc/fdprm« -> »./fdprm« »/etc/filesystems« -> »./filesystems« »/etc/fstab« -> »./fstab« »/etc/ftpusers« -> »./ftpusers«
Um also eine Datei umzubennen benutze ich den Befehl mv unter Angabe von altem und neuem Namen.
ole@defiant:~/test> ls -l insgesamt 12 drwxr-xr-x 2 ole users 4096 Okt 9 10:43 backup -rw-r--r-- 1 ole users 2123 Okt 9 10:25 themenvorschlag.txt -rw-r--r-- 1 ole users 2123 Okt 9 10:26 themenvorschlag.txt.alt ole@defiant:~/test> mv themenvorschlag.txt.alt themenvorschlag.old ole@defiant:~/test> ls -l insgesamt 12 drwxr-xr-x 2 ole users 4096 Okt 9 10:43 backup -rw-r--r-- 1 ole users 2123 Okt 9 10:26 themenvorschlag.old -rw-r--r-- 1 ole users 2123 Okt 9 10:25 themenvorschlag.txt
Um die Syntax eines Shell-Kommandos kurz und knapp darzustellen, werden Syntaxregeln mit einer bestimmten Symbolik verwendet.
Der mv Befehl kann als Syntaxregel so ausgedrückt werden:
mv ALTERNAME NEUERNAME
Die groß geschriebenen Worte stehen für den Wert, der dort eingetragen werden muß.
Ähnlich wie bei cp führt die Angabe eines existierenden Verzeichnis als Ziel dazu, daß die Datei nicht umbenannt, sondern in das Verzeichnis unter Beibehaltung des Namens verschoben wird.
ole@defiant:~/test> mv themenvorschlag.old backup ole@defiant:~/test> ls -l insgesamt 8 drwxr-xr-x 2 ole users 4096 Okt 9 11:09 backup -rw-r--r-- 1 ole users 2123 Okt 9 10:25 themenvorschlag.txt oole@defiant:~/test> ls -l backup insgesamt 8 -rw-r--r-- 1 ole users 2123 Okt 9 10:26 themenvorschlag.old -rw-r--r-- 1 ole users 2123 Okt 9 10:40 themenvorschlag.txt
Wenn Sie ein Verzeichnis als Ziel angeben, können Sie nicht nur eine Datei verschieben, sondern eine ganze Liste von Dateien.
ole@defiant:~/test> touch datei1.txt datei2.txt datei3.txt ole@defiant:~/test> ls -l insgesamt 8 drwxr-xr-x 2 ole users 4096 Okt 9 11:10 backup -rw-r--r-- 1 ole users 0 Okt 9 11:12 datei1.txt -rw-r--r-- 1 ole users 0 Okt 9 11:12 datei2.txt -rw-r--r-- 1 ole users 0 Okt 9 11:12 datei3.txt -rw-r--r-- 1 ole users 2123 Okt 9 10:25 themenvorschlag.txt ole@defiant:~/test> mv d*.txt backup ole@defiant:~/test> ls -l backup insgesamt 8 -rw-r--r-- 1 ole users 0 Okt 9 11:12 datei1.txt -rw-r--r-- 1 ole users 0 Okt 9 11:12 datei2.txt -rw-r--r-- 1 ole users 0 Okt 9 11:12 datei3.txt -rw-r--r-- 1 ole users 2123 Okt 9 10:26 themenvorschlag.old -rw-r--r-- 1 ole users 2123 Okt 9 10:40 themenvorschlag.txt
Die Kommandosyntax kann durch folgende Regeln ausgedrückt werden:
mv DATEILISTE ZIELVERZEICHNIS
oder auch als
mv DATEI1 [DATEI2 [DATEI3 [...]]] ZIELVERZEICHNIS
Die eckigen Klammern zeigen an, daß der entsprechende Teil optional ist und nicht unbedingt notwendig.
Auch bei mv gibt es den ``Blubberschalter'' -v und noch weitere Optionen. Die Syntaxregel unter Berücksichtigung der Optionen lautet dann:
mv [-v] DATEILISTE ZIELVERZEICHNIS
oder auch
mv [OPTIONEN] DATEILISTE ZIELVERZEICHNIS
In der Bash gibt es eingebaute Befehle, die nicht als eigenständige Programme vorliegen. Eine Übersicht der Befehle gibt der Befehl help . Genauere Informationen zu einem Befehl bekommen Sie dann durch Eingabe des Befehls hinter help.
ole@defiant:~/test> help pwd
pwd: pwd [-PL]
Print the current working directory. With the -P option, pwd prints
the physical directory, without any symbolic links; the -L option
makes pwd follow symbolic links.
Bei den meisten anderen Befehlen kommen Sie mit dem Schalter --help oder -h weiter. Diese Option veranlaßt den Befehl dazu, eine kurze Erklärung seiner Funktion und eine Übersicht über seine Optionen zu geben.
ole@defiant:~/test> touch --help
Benutzung: touch [OPTION]... DATEI...
oder: touch [-acm] MMDDhhmm[YY] DATEI... (veraltet)
Aktualisieren der Zugriffs- und Modifikationszeiten jeder DATEI auf die
momentane Zeit.
-a Nur die Zugriffszeit ändern.
-c, --no-create Keine Dateien erzeugen.
-d, --date=ZEICHENKETTE Lesen der ZEICHENKETTE und statt der momentanen
Zeit verwenden.
-f (ignoriert)
-m Nur Modifikationszeit ändern.
-r, --reference=FILE Die Zeiten dieser Datei anstatt der momentanen Zeit
verwenden.
-t MARKE verwenden von [[HH]JJ]MMTTSSmm[.ss] statt der
momentanen Zeit.
--time=WORT Setzen der Zeit die von WORT angegeben wird:
access, atime, (wie -a), mtime, modify (wie -m).
--help Anzeigen dieser Hilfe und beenden.
--version Ausgabe der Versionsinformation und beenden.
Beachten Sie das die drei Zeitformate die von den Optionen -d, -t und dem
veraltete Argument erkannt werden alle verschieden sind.
Berichten Sie Fehler an <bug-fileutils@gnu.org>.
Andere Befehle, wie z. B. der Packer zip liefern diese Erklärungen schon, wenn Sie ohne Parameter aufgerufen werden.
ole@defiant:~/test> zip Copyright (C) 1990-1999 Info-ZIP Type 'zip "-L"' for software license. Zip 2.3 (November 29th 1999). Usage: zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list] The default action is to add or replace zipfile entries from list, which can include the special name - to compress standard input. If zipfile and list are omitted, zip compresses stdin to stdout. -f freshen: only changed files -u update: only changed or new files -d delete entries in zipfile -m move into zipfile (delete files) -r recurse into directories -j junk (don't record) directory names -0 store only -l convert LF to CR LF (-ll CR LF to LF) -1 compress faster -9 compress better -q quiet operation -v verbose operation/print version info -c add one-line comments -z add zipfile comment -@ read names from stdin -o make zipfile as old as latest entry -x exclude the following names -i include only the following names -F fix zipfile (-FF try harder) -D do not add directory entries -A adjust self-extracting exe -J junk zipfile prefix (unzipsfx) -T test zipfile integrity -X eXclude eXtra file attributes -y store symbolic links as the link instead of the referenced file -R PKZIP recursion (see manual) -e encrypt -n don't compress these suffixes
Nach einem man cp wird das Dokument entpackt und dann mit dem passenden Pager angezeigt.
Mit den Richtungstasten können Sie nun hin- und herscrollen. Die Betätigung der Taste <Q> beendet dann das Man-Programm.
Die Programme whatis und apropos basieren auf man. whatis liefert eine Kurzbeschreibung für einen Befehl, während apropos diese Kurzbeschreibungen nach einem Begriff durchsucht.
ole@defiant:~/test> apropos login
logname (1) - print user's login name
/etc/login.defs (5) [login.defs] - Login configuration
login_tty (3) - tty utility functions
getlogin (3) - get user name
sulogin (8) - Single-user login
slogin (1) - OpenSSH SSH client (remote login program)
nologin (8) - politely refuse a login
faillog (8) - examine faillog and set login failure limits
nologin (5) - prevent non-root users from logging into the system
ssh (1) - OpenSSH SSH client (remote login program)
utmp (5) - login records
wtmp (5) - login records
....
ole@defiant:~/test> whatis ssh ssh (1) - OpenSSH SSH client (remote login program)
Die Manual-Pages enthalten nicht nur Informationen zu Befehlen, sondern auch zu Konfigurationsdateien, Kernelfunktionen u.a.
Notizen:
Notizen:
Einführung in die Shell
Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.
Linux Unser, Der Du bist im Kernel,
Geöffnet sei Dein Swap-File,
Dein KDE komme,
Dein Bash-Command geschehe,
Wie in Red Hat so auch in Suse.
Unser täglich Login gib uns heute,
Und vergib uns unsere zu kleine Festplatte,
Wie auch wir vergeben Dir Deiner Installation.
Und führe uns nicht in die Kernel-Panik,
Sondern erlöse uns von Microsoft.
Denn Dein ist das Netz Und die Festplatte Und die Stabilität
In Ewigkeit
Enter!
Anonymous
Die älteste, heute noch in der Praxis benutzte Shell ist die von Stephen L. Bourne Mitte der 70er Jahre für ``Unix Version 7'' entwickelte Bourne-Shell. Heute ist sie nur noch selten in ihrer ursprünglichen Form zu finden.
Die C-Shell wurde an der University of California in Berkeley entwickelt. Sie wurde an die Programmiersprache C angelehnt. Allerdings sind die Möglichkeiten der C-Shell kaum vergleichbar mit denen von C.
Eine zur Bourne-Shell weitgehend kompatible Shell ist die von David Korn entwickelte Korn-Shell. Sie wurde aber mit einem größeren Funktionsumfang ausgestattet.
Die Linux-Standard-Shell ist die im Rahmen des GNU-Projekts entwickelte Bash, die Fähigkeiten der Korn- und C-Shell miteinander verbindet. Auf diese Shell werde ich noch genauer eingehen, da Sie auch Prüfungsstoff der ersten LPI-Prüfung ist.
Eine Übersicht über die verschiedenen Shells liefert Tabelle 4.1.
|
Im Normalfall, wenn man sich auf einem Linux-Rechner einloggt, benutzt man /bin/bash. Die Standard-Shell eines Benutzers wird durch einen Eintrag in der /etc/passwd festgelegt. Der Name der Login-Shell wird in der Umgebungsvariablen SHELL gespeichert. Die Variable enthält nicht zwingend, was viele glauben, den Namen der aktuellen Shell. Den Namen der aktuellen Shell können Sie über die Variable 0 ermitteln. Den Inhalt der Umgebungsvariablen können sie mit dem Befehl echo ausgeben lassen.
ole@enterprise:~> echo $SHELL /bin/bash ole@enterprise:~> echo $0 /bin/bash
Weitere Erläuterungen zu den Umgebungsvariablen finden Sie im Verlauf dieses Skripts im Abschnitt 5.2.
Um eine andere Shell zu starten, geben sie einfach das Shellkommando mit seinem Pfad ein. Dies startet eine Kindprozess in dem die neue Shell läuft. Um die Shell zu beenden, geben Sie exit ein.
Im folgenden Beispiel wird durch die Eingabe ksh zur Public Domain Korn Shell 4.1 gewechselt. Dies können Sie an der veränderten Prompt-Einstellung sehen, da die Korn-Shell die Abkürzung ~ fürs Heimatverzeichnis nicht kennt. Trotzdem zeigt die Variable SHELL immer noch die Bash als Shell an. Die Variable 0 hingegen zeigt die aktuelle Shell an.
ole@enterprise:~> echo $SHELL $0 /bin/bash /bin/bash ole@enterprise:~> ksh ole@enterprise:/home/ole> echo $SHELL $0 /bin/bash ksh ole@enterprise:/home/ole> exit ole@enterprise:~> echo $SHELL $0 /bin/bash /bin/bash
Es gibt drei verschiedene Situationen, in denen eine Shell arbeiten kann. Als interaktive Login-Shell, als interaktive Shell und als nichtinteraktive Shell.
Eine interaktive Login-Shell, meistens nur Login-Shell genannt, wird direkt nach dem Einloggen gestartet und Sie können direkt mit ihr Arbeiten.
Eine interaktive Shell ermöglicht ebenfalls das direkte Arbeiten. Allerdings wurde sie nicht durch einen Login-Vorgang gestartet. Dies kann z. B. durch die Eingabe des Shellprogramms in einer anderen Shell geschehen, wie Sie im obigen Beispiel sehen konnten, oder z. B. durch das Starten einer Terminalemulation auf der graphischen Oberfläche.
Mit einer nichtinteraktiven Shell können Sie nicht am Prompt arbeiten. Sie wird nur zum Ausführen eines Shell-Skripts gestartet und beendet sich nach dem Ende des Skripts automatisch. Damit dient diese Shell nur als eigenständige Umgebung für die Ausführung von vordefinierten Shell-Befehlen ohne Möglichkeiten für den Benutzer direkt einzugreifen.
chsh [-s LOGINSHELL] [USER]
Der Benutzer kann nur die Shell für sich selbst ändern, während root das für jeden Benutzer machen kann. Dabei ist aber der Benutzer auf die Shells eingeschränkt, die in der Datei /etc/shells aufgelistet werden. Wird die Option -s nicht angegeben, so erfolgt die Änderung der Daten im interaktiven Modus. Vor jeder Änderung wird das Kennwort des Benutzers zur Sicherheit abgefragt.
| Optionen | |
| -s LOGINSHELL | Die neue Login-Shell |
chsh -s /usr/bin/ksh
Im Prinzip ist die Bash nichts weiter als ein normales Programm, was die Kommandos des Benutzers an das Betriebssystem und andere Programme weiterleitet und deren Ausgaben wieder dem Benutzer zur Verfügung stellt.
Als allererstes sollten Sie bei der Bash beachten, daß zwischen Groß- und Kleinschreibung peinlich genau unterschieden wird. So sind mit den Namen ahrschlecker.txt, AHRSCHLECKER.TXT und AhrSchlecker.txt im Gegensatz zu DOS/Windows drei verschiedene Dateien gemeint. Da die meisten Befehle auch nur ausführbare Dateien sind, gilt es natürlich auch für diese. In meinen Schulungen habe ich am Anfang oft Teilnehmer über dieses Verhalten schimpfen hören. Aber dieses Verhalten hat schon seinen Sinn. Schauen Sie sich doch mal folgendes Motto einer Tierschützerin an:
Ich bin gut zu Vögeln.
Meinen Sie jetzt noch immer, daß die Verwendung von Groß- und Kleinschreibung überflüssig ist?
Der Prompt zeigt nicht nur die Bereitschaft der Shell an ein neues Kommando zu empfangen. Er kann auch mit Informationen ausgestattet werden. Bei SuSE wird voreingestellt der eingeloggte Benutzer, der Rechner und das Verzeichnis angezeigt. Verantwortlich für das Aussehen des Prompts sind die Variablen PS1 und PS2.
tapico@defiant:/etc/news >
Unvollständige Befehlszeilen quittiert die Shell (Bourne und Bash) durch Ausgabe des Hilfsprompts, der durch die Variable PS2 festgelegt wird. In der Regel handelt es sich um ein Größer-Zeichen gefolgt von einem Leerzeichen. Häufigste Ursache dafür ist ein fehlendes zweites Anführungszeichen. Durch Eingabe dieses Zeichens wird die Befehlszeile vervollständigt und der Befehl kann ausgeführt werden.
ole@enterprise:~> echo "Hallo Welt > " Hallo Welt
Häufig ist es nötig einen Befehl zu wiederholen oder einen Befehl leicht abzuwandeln. Unter Linux steht eine Eingabewiederholung ähnlich dem DOSKEY unter Windows zur Verfügung: die History. Diese wird im wesentlichen über die Cursortasten Auf und Ab gesteuert.
Sollten Sie mal mit dem Platz in einer Zeile nicht auskommen, so kann eine Eingabezeile problemlos verlängert werden, indem man anstatt <RETURN> zu drücken unmittelbar vor <RETURN> einen Backslash \ eingibt.
Gerade am Anfang können Sie ungewollt in Programme raten, mit denen Sie sich nicht auskennen. Hier ein paar Tips, wie Sie solche Programme beenden können.
<Q> oder <Q><RETURN> für ``quit'' führen oft zum Erfolg. (z. B. less (4.5.10), more (4.5.9) und top (12.8.3))
<STRG>+<D> steht für Ende-der-Datei. Damit können Sie vor allem Programme beenden, die auf eine Eingabe warten. (z. B. cat (4.5.2), wenn es von der Standardeingabe liest, und at (13.1.1)). Sollten Sie sich aber direkt in der Shell befinden, dann werden Sie damit ausgeloggt.
<STRG>+<C>. Hiermit wird das laufende Programm aufgefordert, sich sofort zu beenden.
<ESC><:><Q><!><RETURN>
<STRG>+<C> als normalen Ende-Befehl.
KOMMANDO [PARAMETER1] [PARAMETER2] ... [PARAMETERn]Dabei gehören die Leerzeichen und Tabulatoren nicht zu den Parametern, sondern werden nur als Trennzeichen gewertet. Soll der Parameter hingegen Leerzeichen oder Tabulatoren enthalten, so muß der Ausdruck in einfache (') oder doppelte ('') Anführungszeichen gesetzt werden.
echo Ich bin da! echo "Ich bin da!"
Bei den Parametern wird zwischen Argumenten und Optionen unterscheiden. Optionen werden durch ein - in der Kurzform4.2 oder -- in der langen Form eingeleitet.
Das Kommando legt fest was gemacht werden soll. Die Argumente bestimmen womit und die Optionen wie.
~. Die folgenden Arbeitsweisen des Tilde-Zeichens werden als Tilde-Ausdehnung (engl. tilde expansion) bezeichnet.
~ |
Heimatverzeichnis des aktuellen Benutzers |
~walter |
Heimatverzeichnis von dem Benutzer walter |
~+ |
Das aktuelle Arbeitsverzeichnis |
~- |
Das alte Arbeitsverzeichnis |
Ihre Funktionsweise können Sie im folgenden Beispiel verfolgen.
ole@enterprise:~/test> echo ~ /home/ole ole@enterprise:~/test> echo ~walter /home/walter ole@enterprise:~/test> echo ~+ /home/ole/test ole@enterprise:~/test> cd ../Documents/ ole@enterprise:~/Documents> echo ~- /home/ole/test
pwd
cd [DIRECTORY]
Das Zielverzeichnis kann dabei auf absolute oder relative Weise angegeben werden. Bei der absoluten Darstellung geht man immer von der Wurzel (root) aus. Diese Pfadangaben beginnen immer mit einem Slash /. Bei der relativen Pfadangabe wird dagegen von dem aktuellen Verzeichnis als Startpunkt ausgegangen. Jedes Verzeichnis enthält zwei besondere Verzeichnisse. Das Verzeichnis . steht für das Verzeichnis selber, während .. für das übergeordnete Verzeichnis (Elternverzeichnis) steht.
Um wieder zurück ins Heimatverzeichnis zu kommen gibt es mehrere Wege. Sie können zum einen den absoluten oder relativen Pfad zum Verzeichnis angeben. Kürzer geht es aber mit den Befehlen cd ~ oder ganz kurz nur mit cd.
ls [OPTIONEN] [DATEINAME]
Für DATEINAME können Namen von Dateien oder Verzeichnissen4.4 verwendet werden. Dabei kann, um eine Menge von Dateinamen zu bilden, Metazeichen (Joker) verwendet werden. Die bekanntesten Joker sind dabei das Fragezeichen ?, das für ein einzelnes beliebiges Zeichen steht, und der Asterisk *, der für eine beliebige Anzahl beliebiger Zeichen steht.
| Optionen | |
| -a | Anzeige aller Dateien, auch derjenigen, die mit . beginnen. |
| -A | Anzeige aller Dateien außer . und .. |
| -c | Sortiert zusammen mit -t Dateien nach dem Datum der letzten Änderung der Inode (Verwaltungsinformationen). Standardsortierfolge ist nach ASCII-Zeichen. Die Anzeige des entsprechenden Datums erfolgt zusammen mit -l. (ls -ctl) |
| -d | Verzeichnisse in der Liste der Argumente werden wie andere Dateien behandelt. Unterdrückung der Durchsuchung des Inhalts von Verzeichnissen. |
| -l | Anzeige ausführlicher Dateiinformationen. Viele Schalter haben nur im Zusammenhang mit -l eine Bedeutung, da sie nicht automatisch die Information anzeigen sondern nur vorbereiten (z. B. -e oder -k). |
| -r | Ausgabe in umgekehrter Sortierreihenfolge |
| -t | Sortiert Dateien nach dem Datum der letzten Änderung. Standardsortierfolge ist nach ASCII-Zeichen. Die Anzeige des Datums erfolgt zusammen mit -l. |
| -x | Spaltenweise Ausgabe der Dateinamen, im Gegensatz zu -C jedoch waagerecht geordnet. |
| -m | Ausgabe der Dateinamen als durch Komma getrennte Liste. |
| -F | Kennzeichnung diverser Dateitypen durch Anhängen von Sonderzeichen: / für Verzeichnisse, * für ausführbare Dateien, @ für Links, | für FIFOs und = für Sockets. |
| -R | Rekursive Anzeige, d. h. es werden nicht nur Verzeichnisse nach ihrem Inhalt durchsucht, sondern auch darin enthaltene (Unter-) Verzeichnisse. Nicht zusammen mit -d anwendbar. |
Eine Auflistung von weiteren Schaltern finden Sie in Tabelle 4.2.
Es gibt eine Reihe von alternativen Optionen. Z. B. ist --tabsize=zahl eine Alternative zu -T zahl. Diese Optionen sind selbsterklärend (wenn man Englisch kann und Phantasie hat) und werden stets mit doppeltem Minuszeichen eingeleitet, da sie sonst wegen ihrer Länge mit Zusammenfassungen der herkömmliche Schalter verwechselt werden können. Man kann sie sich mit ls --help anzeigen lassen.
Über die Ausgabe des ls-Befehls sollten sie noch wissen:
/etc/DIR_COLORS festgelegt. Um die Farben selbst bestimmen zu können, muß die Datei als .dir_colors in das Heimatverzeichnis kopiert werden.
tapico@defiant:~/test > ls -Fl total 4 lrwxrwxrwx 1 ole users 9 May 9 22:00 hallo -> hallowelt* -rwxr-xr-x 1 ole users 36 May 9 21:56 hallowelt* -rw-r--r-- 2 ole users 401 May 9 22:04 liste -rw-r--r-- 2 ole users 401 May 9 22:04 myliste drwxr-xr-x 2 ole users 1024 May 9 21:55 mytest/ prw-r--r-- 1 ole users 0 May 9 21:54 testpipe|
Dabei enthalten die Spalten von links nach rechts gelesen: Dateityp und Rechte, Anzahl der Hardlinks, Besitzer, Gruppe, Größe in Byte, Monat, Tag, Uhrzeit, Dateiname und Dateityp (durch -F). Den Dateityp aus der ersten Spalte können Sie aus der Tabelle 4.3 entnehmen.
|
ole@enterprise:~> type dir dir is aliased to `ls -l'
ls -l. Die meisten Schalter sind mit denen von ls identisch. Mehr Informationen entnehmen Sie bitte der Manual-Page oder der Texinfo zu vdir.
mkdir [OPTIONEN] [VERZEICHNISPFADLISTE]
Wird die Option -p nicht mit angegeben, so müssen die Elternverzeichnisse für das neue Verzeichnis existieren.
| Optionen | |
| -p | Erzeugt auch die nötigen Elternverzeichnisse, wenn diese nicht existieren. |
| -m RECHTE | Erlaubt gleich das Setzen der Rechte für das neue Verzeichnis wie durch chmod |
mkdir tex/linux
Dieser Befehl legt einen kompletten Verzeichnispfad an. Dabei werden alle Verzeichnisse erzeugt, wenn sie noch nicht existieren.
mkdir -p tex/linux/kurs/material
Auf die neuen Verzeichnisse bekommt nur der Besitzer Rechte.
mkdir -m 700 tagebuch adressen
rmdir [OPTIONEN] [VERZEICHNISPFADLISTE]
Dabei wird immer das letzte Verzeichnis in der angegebenen Verzeichnishierachie gelöscht. Der Schalter -p ermöglicht das Löschen ganzer Hierachien.
| Optionen | |
| -p | Löschen aller leeren Verzeichnisse in der Verzeichnishierachie. |
rmdir tex/linux/*
Soll die ganze Hierachie gelöscht werden, also auch die Verzeichnisse tex/linux und tex gelöscht werden, so lautet der Befehl:
rmdir -p tex/linux/*
Dabei dürfen die Verzeichnisse aber keine weiteren Verzeichnisse oder Dateien enthalten.
touch [OPTIONEN] [DATEILISTE]
cat [OPTIONEN] [DATEILISTE]
cat wird vor allem als Tool zum Anzeigen und Zusammenfügen von Dateien verwendet und als schneller Mini-Editor.
| Optionen | |
| -b | Nummeriert alle nichtleeren Zeilen durch |
| -e | Gleich mit -vE |
| -n | Nummeriert alle Zeilen durch (-b hat Vorrang) |
| -E | Fügt am Ende jeder Zeile ein $ ein |
| -s | Faßt aufeinanderfolgende Leerzeilen zu einer Leerzeile zusammen |
| -v | Zeigt alle nichtdruckbaren Zeichen durch Metazeichen an |
| -T | Zeigt Tabulatoren als Î an |
| -A | Zeigt alle nichtdruckbaren Zeichen, Tabulatoren als Î und das Zeilenende als $ an (vgl. -vET) |
cat t1 t2 > t3
Ein einfacher Editor kann mit cat realisiert werden.
cat > text.txt
Dieser Befehl liest die Daten nicht aus einer Datei sondern von der Standardeingabe und schreibt sie dann in die Datei text.txt. Die Eingabe wird mit <CTRL>+<D> (EOF-Zeichen) beendet.
cp [OPTIONEN] QUELLDATEI ZIELDATEI cp [OPTIONEN] QUELLDATEILISTE ZIELVERZEICHNISWird ein Dateiname für die Quelle angegeben, so kopiert cp die Datei in eine zweite Datei (ZIELDATEI). Ist der letzte Parameter ein Verzeichnis, dann wird die Datei in das Verzeichnis kopiert. Listen von Quelldateien können nur in ein Verzeichnis kopiert werden. Allerdings kann cp in der Normaleinstellung keine Verzeichnisse kopieren.
| Optionen | |
| -a | Kopiert die Dateien unter Beibehaltung von Struktur und Attributen |
| -b | Erzeugt von jeder überschriebenen Datei eine Sicherheitskopie |
| -f | Überschreiben von vorhandenen Zieldateien |
| -i | Nachfragen vorm Überschreiben von vorhandenen Zieldateien |
| -l | Legt Hardlinks anstatt Kopien der Dateien an |
| -s | Legt Softlinks anstatt Kopien der Dateien an |
| -p | Überträgt Besitzer, Gruppe, Rechte und Zeitmarken an die neue Datei |
| -P | Kopieren der Dateien inklusiver ihrer Verzeichnisstruktur |
| -r | Kopiert rekursiv Dateien aus Verzeichnissen |
| -R | Wie -r, aber anstatt die Inhalte der Dateien zu kopieren, werden die Datei wie sie sind kopiert |
| -u | Kopiert nur Dateien, die jünger sind als die Zieldateien |
| -v | Zeigt die Namen der kopierten Dateien an |
cp -dpRP * \backup
dd [OPTIONEN]
| Optionen | |
| if=DATEI | Die Eingabedatei |
| of=DATEI | Die Ausgabedatei |
| bs=BLOCKGRÖSSE | Anzahl der Bytes, die auf einmal gelesen bzw. geschrieben werden. |
dd if=/dev/fd0 bs=512 of=BackupDisk
Nachdem die CD auf das Verzeichnis /cdrom gemountet worden ist, können mit den Befehlen
dd if=/cdrom/disks/bootdisk of=/dev/fd0 bs=8k dd if=/cdrom/disks/modules1 of=/dev/fd0 bs=8k dd if=/cdrom/disks/modules2 of=/dev/fd0 bs=8k dd if=/cdrom/disks/modules3 of=/dev/fd0 bs=8kdie Bootdisketten erzeugt werden.
mv [OPTIONEN] ALTERDATEINAME NEUERDATEINAME mv [OPTIONEN] QUELLDATEILISTE ZIELVERZEICHNISWerden zwei Dateinamen als Parameter vergeben, dann wird die Datei umbenannt. Ist der letzte Parameter ein Verzeichnis, dann werden die angegebenen Dateien in dieses Verzeichnis verschoben.
| Optionen | |
| -b | Erzeugt von jeder überschriebene Datei eine Sicherheitskopie |
| -f | Überschreiben von vorhandenen Zieldateien |
| -i | Nachfragen vorm Überschreiben von vorhandenen Zieldateien |
| -u | Verschiebt nur Dateien, die jünger sind als die Zieldateien |
mv megabox.txt MEGABOX.txt
Mit dem folgenden Kommando werden alle Dateien aus dem aktuellen Verzeichnis in das Verzeichnis /home/harald verschoben und eventuell vorhandene Zieldateien überschrieben.
mv -f * /home/harald
rm [OPTIONEN] DATEILISTEUm eine Datei zu löschen, benötigt man das Schreibrecht (w) auf das Verzeichnis, aber nicht auf die Datei. Sollte ein Datei nicht das Schreibrecht besitzen, so erbittet rm nur eine Bestätigung des Löschbefehls, wenn kein -f oder wenn ein -i gesetzt ist.
| Optionen | |
| -d | Löscht ein Verzeichnis durch Entfernen des Hardlinks. Volle Verzeichnisse werden auch gelöscht. Da die enthaltenen Dateien nicht mehr referenziert werden, ist es ratsam ein fsck danach auszuführen. (Nur Superuser) |
| -f | Löscht alle Dateien ohne explizites Nachfragen. Überlagert die Option -i |
| -i | Fragt vor jedem Löschen einer Datei um Bestätigung |
| -r | Löscht Verzeichnisse und deren Inhalt rekursiv |
rm *.temp
Vorsicht! Dieser Befehl versucht die gesamte Dateistruktur ohne Nachfragen zu löschen. Als root ausgeführt ist das Ergebnis fatal.
rm -rf /
Wenn diese Jokerzeichen eingesetzt werden, gibt die Shell nicht einen einzelnen Dateinamen zurück, sondern eine Liste von Dateinamen, auf die das Muster zutrifft. So erhalten Sie mit dem Muster *.jpg eine Liste aller Dateinamen, die mit .jpg enden.
tapico@defiant:~> echo *.jpg helm35.jpg helm37.jpg helm38a.jpg helm59.jpg tapico@defiant:~> cp *.jpg ~/bilder
Denken Sie daran. Die Shell und nicht der Befehl interpretiert das Kommando. Deshalb müssen die Jokerzeichen in manchen Fällen maskiert werden, damit sie unbeschadet an den Befehl übergeben werden können. Probieren Sie den unteren Befehl mal ohne Backslash aus.
tapico@defiant:~> echo \* Hallo \* * Hallo *
Eine Reihe von Jokerzeichen steht Ihnen zur Verfügung.
tapico@defiant:~> ls lk* lk-aufbau-ext2.eps lk-shell.aux lk.log lk-dateibaum.eps lk-shell.tex lk.pdf.gz lk-dateisystem.aux lk-shell.tex.bck lk.ps lk-dateisystem.tex lk-vorwort.aux lk.tex lk-dateisystem.tex.bck lk-vorwort.tex lk.tex.bck lk-installation.aux lk-vorwort.tex.bck lk.toc lk-installation.tex lk.aux lktex lk-installation.tex.bck lk.dvi
tapico@defiant:~> ls lk.* lk.aux lk.idx lk.ind lk.pdf.gz lk.tex lk.toc lk.dvi lk.ilg lk.log lk.ps lk.tex.bck tapico@defiant:~> ls lk.??? lk.aux lk.dvi lk.idx lk.ilg lk.ind lk.log lk.tex lk.toc tapico@defiant:~> ls lk.?? lk.ps
[Aa] für ein Zeichen, daß entweder ein großes oder ein kleines A sein kann. Ein Ausrufezeichen in der eckigen Klammer negiert die Bedeutung der Menge. So steht [!aeiou] für ein Zeichen, daß kein Vokal ist.
Innerhalb der Klammern können nicht nur einzelne Zeichen angegeben werden, sondern auch Bereiche. So steht z. B. [a-z] für alle Kleinbuchstaben und [0-9] für alle Zahlen.
tapico@defiant:~> ls lk.??? lk.aux lk.dvi lk.idx lk.ilg lk.ind lk.log lk.tex lk.toc tapico@defiant:~> ls lk.[it]?? lk.idx lk.ilg lk.ind lk.tex lk.toc tapico@defiant:~> ls lk.[!it]?? lk.aux lk.dvi lk.log tapico@defiant:~> ls [Hh]* Home.txt Hurra.jpg hans.txt himmel.jpg tapico@defiant:~> ls [A-Z]* Amerika.jpg Home.txt Hurra.jpg Qualle.jpg tapico@defiant:~> ls *[0-9][0-9].jpg helm35.jpg helm37.jpg helm38.jpg helm59.jpg
tapico@defiant:~> echo "Ich bin "{gut,besser,super}"."
Ich bin gut. Ich bin besser. Ich bin super.
tapico@defiant:~> echo {1,2,3}{1,2,3}
11 12 13 21 22 23 31 32 33
Trotzdem können Sie die Klammerexpansion natürlich auch auf Dateioperationen anwenden.
tapico@defiant:~> ls lk-{kernel,shell}.*
lk-kernel.aux lk-kernel.tex.bck lk-shell.tex
lk-kernel.tex lk-shell.aux lk-shell.tex.bck
tapico@defiant:~> ls lk-*.{tex,eps}
lk-administration.tex lk-dateibaum.eps lk-installation.tex lk-shell.tex
lk-aufbau-ext2.eps lk-dateisystem.tex lk-kernel.tex lk-vorwort.tex
more [OPTIONEN] DATEILISTE
| Befehle | |
| <LEERTASTE> | Eine Seite nach unten scrollen |
| <f> | Eine Seite nach unten scrollen |
| <b> | Eine Seite nach oben scrollen |
| <RETURN> | Eine Zeile nach unten scrollen |
| <s> | Eine Zeile nach unten scrollen |
| </>MUSTER | Durchsuchen des Textes nach dem regulären Ausdruck MUSTER |
| <n> | Weitersuchen nach unten |
| <q> | Beenden |
less [OPTIONEN] DATEILISTENeben den Möglichkeiten von more bietet less die Möglichkeit mit den Richtungstasten zu scrollen und mit Lesezeichen, Zeilennummern und prozentualen Textpositionen zu arbeiten. Auch wird less nicht am Ende der Datei beendet.
| Zusätzliche Befehle | |
| <j> | Eine Zeile nach unten scrollen |
| <k> | Eine Zeile nach oben scrollen |
| <d> | Einen halben Bildschirm nach unten scrollen |
| <u> | Einen halben Bildschirm nach oben scrollen |
| <f> | Einen Bildschirm nach unten scrollen |
| <b> | Einen Bildschirm nach oben scrollen |
| <g> | An den Anfang der Datei scrollen |
| <G> | Ans Ende der Datei scrollen |
| </> MUSTER | Durchsuchen des Textes nach dem regulären Ausdruck <MUSTER> nach unten |
| <?> MUSTER | Durchsuchen des Textes nach dem regulären Ausdruck <MUSTER> nach oben |
| <n> | Weitersuchen nach unten |
| <N> | Weitersuchen nach oben |
| <q> | Programm beenden |
| <:><n> | Nächste Datei in der Liste anzeigen |
| <:><p> | Vorherige Datei in der Liste anzeigen |
Wichtig ist beim Befehl less die Suche innerhalb eines Textes. Dazu stehen die Kommandos </> und <?> zur Verfügung. Nach Betätigen der jeweiligen Tasten erscheint in der untersten Zeile eine Eingabeaufforderung, wo Sie Ihr Suchmuster eingeben können. Den Zugriff auf alte Suchmuster erhalten Sie durch das Betätigen der Cursortaste für ``hoch'' und ``runter''.
Das Programm less besitzt viele Schalter und Kommandos. Eine Übersicht über die Möglichkeiten von less erhalten Sie durch die Manualpage less(1).
file DATEILISTE
file prüft zunächst anhand der Inode-Informationen, um welchen Datentyp es sich handelt, prüft aber zusätzlich den Anfang der Datei anhand der Informationen, die in der Datei /etc/magic enthalten sind.
| Optionen | |
| -b | Ausgabe ohne Angabe der Dateinamen |
| -f DATEINAME | Die Dateiliste wird aus der Datei DATEINAME entnommen (Ein Dateiname pro Zeile). |
| -z | Bearbeitet auch den Inhalt von gepackten Dateien |
ole@defiant:~ > ls -Fl total 5 -rw-r--r-- 1 ole users 468 May 9 22:28 194.195.155.105 lrwxrwxrwx 1 ole users 9 May 9 22:00 hallo -> hallowelt* -rwxr-xr-x 1 ole users 36 May 9 21:56 hallowelt* -rw-r--r-- 2 ole users 401 May 9 22:04 liste -rw-r--r-- 2 ole users 401 May 9 22:04 myliste drwxr-xr-x 2 ole users 1024 May 9 21:55 mytest/ prw-r--r-- 1 ole users 0 May 9 21:54 testpipe| ole@defiant:~ > file * 194.195.155.105: ASCII text hallo: symbolic link to hallowelt hallowelt: perl commands text liste: ASCII text myliste: ASCII text mytest: directory testpipe: fifo (named pipe)
Die Datei wird von verschiedenen Programmen gebraucht, wie z. B. file (4.5.11).
Der Eintrag z. B. für eine Bilddatei im PNG-Format ist:
# PNG [Portable Network Graphics, or "PNG's Not GIF"] images # (Greg Roelofs, newt@uchicago.edu) # (Albert Cahalan, acahalan@cs.uml.edu) # # 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ... # 0 string \x89PNG PNG image data, >4 belong !0x0d0a1a0a CORRUPTED, >4 belong 0x0d0a1a0a >>16 belong x %ld x >>20 belong x %ld, >>24 byte x %d-bit >>25 byte 0 grayscale, >>25 byte 2 \b/color RGB, >>25 byte 3 colormap, >>25 byte 4 gray+alpha, >>25 byte 6 \b/color RGBA, #>>26 byte 0 deflate/32K, >>28 byte 0 non-interlaced >>28 byte 1 interlaced 1 string PNG PNG image data, CORRUPTED
Die Datei kann sich auch im Verzeichnis /usr/share/misc/magic befinden. Dann ist /etc/magic nur ein Link auf diese Datei. Weitere Informationen können Sie den Manualpages (man 4 magic) entnehmen.
clear
cal [[MONAT] JAHR]Für JAHR sind Werte zwischen 1 und 9999 erlaubt und für MONAT zwischen 1 und 12.
| Optionen | |
| -m | Zeigt Montag als ersten Tag der Woche an |
| -j | Benutzt das Julianische Datum |
| -y | Zeigt einen Kalender für das aktuelle Jahr |
date [+FORMATSTRING]
FORMATSTRING ist ein beliebiger Text, der, falls er Sonderzeichen enthält, in Anführungszeichen zu setzen ist. Sinn macht dieser Text allerdings erst, wenn er Platzhalter enthält, die Datum oder Zeit anzeigen. Eine Liste der Platzhalter finden Sie in Tabelle 4.4
|
Durch den Formatstring kann das Ausgabeformat bestimmt werden.
tapico@defiant:~> date +"Es ist der %d.%m.%y" Es ist der 19.01.03 tapico@defiant:~> date +"Es ist %T Uhr" Es ist 13:47:35 Uhr
Einige der Platzhalter orientieren sich bei der Ausgabe an den lokalen Spracheinstellungen des Systems. Diese ist für eine laufende Sitzung in der Umgebungsvariablen LANG gespeichert. Eine Veränderung dieser Variablen führt daher auch zu einer veränderten Ausgaben des Befehls date. Meist ist beim Benutzer root die Variable nicht gesetzt. Default ist dann Englisch.
ole@enterprise:~> echo $LANG de_DE@euro ole@enterprise:~> date +"%x" 14.05.2004 ole@enterprise:~> date +"%c" Fr 14 Mai 2004 10:53:42 CEST ole@enterprise:~> date +"Ein %A im %B." Ein Freitag im Mai. ole@enterprise:~> LANG=en; export LANG ole@enterprise:~> date +"%x" 05/14/04 ole@enterprise:~> date +"%c" Fri May 14 10:54:42 2004 ole@enterprise:~> date +"Ein %A im %B." Ein Friday im May.
date MMTTSSmm[[HH]JJ][.ss]
Wobei MM für Monat, TT für Tag des Monats, SS für Stunde, mm für Minute, HH fürs Jahrhundert, JJ fürs Jahr und ss für die Sekunden stehen.
Die Änderung der Systemzeit hat keine Auswirkungen auf die Hardware-Uhr. Nach dem Neustart des Systems sind die Einstellungen wieder verloren.
Um die Zeit zu setzen brauchen Sie die Berechtigung des Systemadministrators. Wenn Sie als normaler Benutzer eingeloggt sind, wechseln Sie zuerst mit dem Befehl su (8.1.2) ihre Identität zu root. Danach können Sie das Datum einstellen.
tapico@defiant:~> su Password: root@defiant:/home/tapico # date 10221735 Mon Okt 22 17:35:00 CEST 2001
Für weitere Informationen zu Schaltern und Platzhaltern geben Sie man date ein.
hwclock [OPTIONEN]
Für die Anwendung und Möglichkeiten dieses Befehls konsultieren Sie bitte die Manualpage (man 8 hwclock).
Um neben der Systemzeit auch die Hardware-Uhr zu setzen, gehen Sie bitte wie folgt vor.
Das kann dann so aussehen:
ole@defiant:~> su Password: defiant:/home/ole # date 01191418 Son Jan 19 14:18:00 CET 2003 defiant:/home/ole # hwclock --systohc
echo [OPTIONEN] [TEXT]
| Optionen | |
| -e | erlaubt die Benutzung von Sonderzeichen im Text, z. B: |
\n Zeilenumbruch |
|
\a Piepton (ASCII-Zeichen 7) |
|
\b Backspace |
|
\f Seitenvorschub |
|
\ooo beliebiges ASCII-Zeichen in oktaler Notation |
|
| -n | unterdrückt Zeilenumbruch nach Ausgabe des Textes |
Texte mit Sonderzeichen (z. B. Leerzeichen) sollten in Anführungszeichen stehen. echo ohne Angabe eines Textes bewirkt die Ausgabe einer Leerzeile.
<ESC>[{attr};{fg};{bg}m
kann nun die Farbe vorgegeben werden.
So bewirkt der Befehl
echo "^[[0;31;40mIch sehe rot"
daß der Text `Ich sehe rot' in roter Farbe ausgegeben wird. Das erste Zeichen ist das Escape-Zeichen. Es wird als ^[ dargestellt. Um es zu schreiben drücken Sie <STRG>+<V> und dann <ESC. Um wieder den Normalzustand herzustellen, müssen Sie für die Konsole den Befehl
echo "^[[0;37;40m"
eingeben.
Eine Liste der möglichen Farben und Attribute liefert Tabelle 4.5. Diese Werte werden auch in den Dateien /etc/DIR_COLORS und .dir_colors für die Farbcodierung verwendet. Eine vollständige Liste der Konsolen-Codes liefert die Manpage console_codes (4).
ole@enterprise:~> man 4 console_codes
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
logout
script [OPTIONEN] [DATEI]
Wird kein Dateiname angegeben, so wird automatisch die Datei typescript angelegt.
telnet HOST [PORT]
Achtung! Aus Sicherheitsgründen können Sie sich nicht als root über Telnet an einem Rechner anmelden. Sie müssen sich erst als normaler Benutzer einloggen und können dann einen Identitätswechsel zum Superuser vollziehen.
Weitere Informationen über das Programm telnet finden Sie in den Manual-Pages über den Befehl man telnet und im Abschnitt 18.3.4.
tty
tapico@defiant:~ > tty /dev/pts/0
Shell 1
Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.
rm -rf * aus. Was bewirkt der Befehl?
echo text > datei) eine Datei namens keks in ihrem Heimatverzeichnis (Inhalt beliebig)!
Eine Übersicht über die Steuerungsbefehle finden Sie in Tabelle 5.1.
|
Anstatt der Readline Library kann man auch einen anderen Editor für die Eingabezeile benutzen. Um z. B. den vi zu benutzen, geben Sie ein:
set -o vi
Zurück kommen Sie mit
set -o emacs
So kann z. B. die Tastaturbelegung selbst definiert werden. Die Codesequenzen, die der Shell für die Tasten übermittelt werden, können von der Eingabeoberfläche abhängen. So steht die Sequenz \e[11~ für die Taste <F1> bei einem X-Window-Terminal (xterm, kvt) oder einem Telnet-Terminal. Dagegen übermittelt die normale Linuxkonsole (linux) die Codesequenz \e[[A für das Drücken der Taste <F1>.
Um die Taste <F1> mit dem Befehl ls -l zu belegen, muß folgender Eintrag in die .inputrc gemacht werden.
"\e[11~": "ls -l"
oder
"\e[[A": "ls -l"
Jedesmal, wenn die Taste <F1> gedrückt wird, erscheint nun ls -l am Prompt. Soll der Befehl dann auch noch sofort ausgeführt werden, dann muß nur noch ein \n hinten angehängt werden.
"\e[11~": "ls -l\n"
Soll eine andere Datei für die Konfiguration verwendet werden, so muß diese mit ihrem Pfad in der Umgebungsvariablen INPUTRC angegeben werden. Bei der SuSE-Distribution ist existiert schon eine fertige Datei /etc/inputrc. Wenn Sie für Benutzer eine individuelle Konfigurationsdatei anlegen wollen, dann kopieren Sie einfach die Datei aus dem Verzeichnis /etc als .inputrc in das jeweilige Heimatverzeichnis und führen dann die Änderungen dort aus.
stty [-F GERÄT] [OPTIONEN] stty [-F GERÄT] [EINSTELLUNGEN]
| Optionen | |
| -a | Zeigt alle Einstellungen in für Menschen lesbarer Form an |
| -g | Zeigt alle Einstellungen in für stty lesbarer Form an |
| -F | Das Terminal (Standard stdin) |
Die Grunddaten des aktuellen Terminals, das als Standardeingabe fungiert, bekommen Sie, wenn Sie den Befehl ohne Parameter aufrufen. Mit der Option -a wird es wesentlich ausführlicher. Der Aufruf mit -g ist zwar wesentlicher kompakter, aber irgendwie unverständlich für Normalsterbliche.
dozent@linux37:~> stty speed 38400 baud; line = 0; -brkint -imaxbel dozent@linux37:~> stty -a speed 38400 baud; rows 24; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke dozent@linux37:~> stty -g 100:5:bf:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
Sie können sich aber auch die Daten anderer Terminals anzeigen lassen. Allerdings müssen Sie auch Rechte für dieses Terminals besitzen, was automatisch passiert, wenn Sie sich auf dem Terminal einloggen.
dozent@linux37:~> ls -l /dev/tty[12] crw--w---- 1 dozent tty 4, 1 2004-07-01 14:25 /dev/tty1 crw-rw---- 1 root tty 4, 2 2004-07-01 08:06 /dev/tty2 dozent@linux37:~> stty -F /dev/tty1 speed 38400 baud; line = 0; lnext = <undef>; min = 1; time = 0; -icrnl -icanon -echo dozent@linux37:~> stty -F /dev/tty2 stty: /dev/tty2: Keine Berechtigung
Sie können auch über eine Umleitung ein Terminal ansprechen.
linux37:/home/dozent # stty -F /dev/ttyS0 speed 9600 baud; line = 0; -brkint -imaxbel linux37:/home/dozent # stty < /dev/ttyS0 speed 9600 baud; line = 0; -brkint -imaxbelÜbrigens ist auch eine serielle Schnittstelle ein Terminal.
Interessant wird es, wenn stty zum Setzen von Eigenschaften verwendet wird. Für ein Terminal kann eine Vielzahl von Werten gesetzt werden. Diese setzen Zeichen für verschiedene Aktionen fest, verändern die Kontrollfunktionen und die Ein- und Ausgabeeigenschaften. Eine Übersicht aller Einstellungen finden Sie in der Manualpage stty(1). Hier nur ein paar Beispiele:
Sie können z. B. die Geschwindigkeit der ersten seriellen Schnittstelle auf 38400 bit/s festlegen.
stty -F /dev/ttyS0 38400
Wenn der letzte Prozess das Terminal schließt, wird mit der folgenden Anweisung das Terminal angewiesen ein SIGHUB-Signal an alle angeschlossene Prozesse zu senden. Damit sollten sich die Prozesse eigentlich beenden.
stty hupcl
Ein Minuszeichen vor der Einstellung kehrt die Bedeutung um.
stty -hupcl
Sie können sich auch die Größe des Terminals in Zeilen und Zeichen ausgeben lassen.
linux37:/home/dozent # stty size 24 80
Nach einer neuen Zeile soll möglichst auch ein Wagenrücklauf erfolgen, sprich der Cursor sollte am Anfang der Zeile stehen. Der folgende Befehl führt zu etwas Chaos auf dem Bildschirm. Können Sie ihn auch wieder rückgängig machen?
stty -onlcr
Alle Zeichen können für die Ausgabe in Großbuchstaben umgewandelt werden.
linux37:/home/dozent # stty olcuc LINUX37:/HOME/DOZENT # STTY -OLCUC linux37:/home/dozent #
Und es gibt noch viele Einstellungen mehr. Es ist sehr unwahrscheinlich, daß Sie etwas mit diesen Einstellungen zu tun haben sollten. Aber Sie sollten wissen, daß man mit stty die Einstellungen von Terminals abrufen und ändern kann.
So erweitert die Shell nach Betätigung der Tabulator-Taste die Buchstaben ec zu dem Befehl echo.
Ist der Befehl der Dateiname nicht eindeutig über die ersten Zeichen definiert, so gibt die Shell ein Signalton zurück. Wird die Tabulator-Taste noch einmal betätigt, zeigt die Shell eine Liste von Kommandos, die mit den entsprechenden Zeichen beginnen.
So erhalten Sie beispielsweise nach Eingabe von mk und zweimaligem Betätigen der Tabulator-Taste folgende Liste5.1.
mkdir mkfontdesc mkmanifest mktemp mktexpk mkdirhier mkfontdir mknod mktexlsr mktexftm mkfifo mkindex mksusewmrc mktexmfAuf diese Art und Weise können Sie sich auch eine Liste aller zur Verfügung stehenden Befehle ausgeben lassen. Drücken Sie einfach am leeren Prompt zweimal die Tabulator-Taste. Da es nicht gerade wenig Befehle sind, werden Sie dann erst einmal von der Bash gefragt, ob Sie auch wirklich alle Treffer anzeigen lassen möchten.
tapico@defiant:~><TAB><TAB> Display all 2192 possibilities? (y or n)
Genauso kann man sich auch schnell durch das Dateisystem bewegen.
Durch die Eingabe von
cd /h<TAB>t<TAB>mo<TAB>l<TAB>
erhält man z. B. die Kommandosequenz cd /home/tapico/moebius/linux.
Auch wenn Sie den Pfad nicht kennen, hilft die Tabulatortaste weiter. Einfach zweimal die Tabulatortaste drücken und alle in Frage kommenden Verzeichnisse werden angezeigt.
tapico@defiant:~> cd /var/<TAB><TAB> X11R6 games log opt squid yp adm lib mail run tmp cache lock named spool ucd-snmp tapico@defiant:~> cd /var/Und was für Verzeichnisse gilt, gilt auch für alle anderen Dateien. Dann natürlich nicht mit cd, sondern einem dateibezogenen Befehl wie z. B. less.
tapico@defiant:~> less /etc/cron<TAB><TAB> cron.d cron.hourly cron.weekly crontab.old cron.daily cron.monthly crontab tapico@defiant:~> less /etc/cron
tapico@defiant:~/test/ > date; echo "Homeverzeichnis"; ls ~ Die Sep 19 23:55:00 MEST 2000 Homeverzeichnis Desktop datum public_html test.pl who Mail datum.old public_html_old test1.pl whoami cgi-bin manpages test test2.pl zulu.txtDamit die Ausgabe aller Befehle in eine Datei umgeleitet werden kann, müssen die Befehle gruppiert werden. Denn die Befehlssequenz
date; echo "Homeverzeichnis"; ls ~ > dir.txtwürde nur die Ausgabe des ls-Befehls in die Datei umlenken. Richtig muß die Kommandosequenz lauten:
(date; echo "Homeverzeichnis"; ls ~) > dir.txtDie Klammern gruppieren die Kommandos zu einem Befehl. Deshalb wird dies als Kommandogruppierung bezeichnet.
&& und || verknüpfen zwei Befehle miteinander, wobei der zweite Befehl in Abhängigkeit vom Erfolg des ersten Befehls ausgeführt wird.
less index.htm || less index.htmlbewirkt, daß nur wenn der erste Befehl keinen Erfolg hat, weil z. B. die Datei nicht existiert, der zweite Befehl ausgeführt wird.
cat index.html && cp index.html /backupbewirkt, daß nur wenn der erste Befehle erfolgreich war, der zweite Befehl ausgeführt wird.
$(...) oder in `...` bewirkt, daß die Ausgabe des Kommandos verwendet wird.
tapico@defiant:~ > echo $(pwd) /home/tapico tapico@defiant:~ > echo `pwd` /home/tapicoDie obere Methode ist die neue Syntax der bash. Die zweite zeigt die Syntax der Bourne Shell. Mindestens eine der beiden Methode wird in der bash funktionieren.
tapico@enterprise:~/cal> cal -m > kalender-$(date +"%Y-%m").txt tapico@enterprise:~/cal> ls -l kalender-* -rw-r--r-- 1 tapico users 129 Apr 14 12:57 kalender-2002-04.txt
Den Variablen wird ein Wert durch folgende Sequenz zugewiesen.
VARIABLENNAME=WERT
Um eine Variable zu löschen, reicht es ihr einen Null-Wert zu geben.
VARIABLENNAME=
Die Variablen können nur von dem erzeugenden Prozess und seinen Kinderprozessen verwendet werden. Es sind lokale Variablen.
export [OPTIONEN] [NAME[=WERT]]export ohne die Angabe von Optionen zeigt eine Liste aller exportierten Variablen.
| Optionen | |
| -f | Die Variable wird als Funktion interpretiert |
| -n | Löschen einer Variablen aus der Liste |
| -p | Liste aller exportierten Variablen (standard) |
ILove=Linux; export ILove
|
~ liegen. So findet man z. B. die Umgebungsvariablen der bash in der Datei /etc/profile wieder.
Einen Auszug von Umgebungsvariablen gibt Tabelle 5.2 wieder. Ausführlichere Informationen über die Umgebungsvariablen liefert das Kommando man bash.
tapico@defiant:~/test > echo $PWD /home/tapico/test
Der Variablen PWD kann ein neuer Wert zugewiesen werden.
tapico@defiant:~/test > PWD=/home/tapico tapico@defiant:~/ > echo $PWD /home/tapico tapico@defiant:~/ > pwd /home/tapico/test tapico@defiant:~/ > echo $PS1 \u@\h:\w >Nach der Änderung der Umgebungsvariable PWD ändert sich auch das Aussehen des Prompts, da dieser die Umgebungsvariable nutzt. Wie aber der Befehl pwd zeigt, hat sich das aktuelle Verzeichnis nicht geändert.
printenv [VARIABLE]Wird keine spezielle Variable angegeben, so zeigt printenv eine Liste aller Variablen an.
env [OPTIONEN] [VARIABLE=WERT] [BEFEHL [ARG1] ...]Wird kein BEFEHL angegeben, so listet env die resultierende Umgebung auf. Es arbeitet dann wie printenv (5.2.4).
tapico@defiant:~/ > echo $PATH /bin:/usr/bin:/usr/local/bin:.Im Normalfall ist das aktuelle Verzeichnis sogar das letzte in der Suchreihenfolge. Das kann zu Problemen führen. So wird beim Ausprobieren von Skripten z. B. sehr gerne der Name test als Dateiname verwendet. test ist aber ein Programm im Verzeichnis /usr/bin. Daher wird beim Aufruf von test nicht das Skript im aktuellen Verzeichnis, sondern das Programm in /usr/bin gestartet, weil es dort zuerst gefunden wurde.
Die Variable PATH wird in der Datei /etc/profile definiert. Um die Datei für sich selber zu ändern, sollte die Änderung in den Datei ~/.bash_profile , ~/.profile oder ~/.bashrc erfolgen. Welche Datei als Beste dafür geeignet ist, ist von Distribution zu Distribution unterschiedlich.
Bsp.: PATH=$PATH:$HOME/bin
tapico@defiant:~ > echo $PS1 \u@\h:\w >
\u, \h und \w sind besondere Zeichen, die ausführliche Informationen enthalten. Für eine Liste der speziellen Zeichen siehe Tabelle 5.3.
Wie der Name PS1 schon vermuten läßt, existiert noch eine Umgebungsvariable PS2. Diese steuert das Aussehen des zweiten Prompts. Dieser Prompt taucht immer dann auf, wenn Sie einen Befehl noch nicht vollständig eingegeben und doch die Eingabetaste gedrückt haben. Er zeigt an, daß noch etwas fehlt.
Im folgenden Beispiel fehlt das schließende Anführungszeichen.
ole@enterprise:~> echo $PS2 > ole@enterprise:~> PS2="ergänzen >" ole@enterprise:~> echo $PS2 ergänzen > ole@enterprise:~> echo "Hallo ergänzen >Welt " Hallo Welt ole@enterprise:~> echo $PS2 ergänzen >
|
cd .. den Alias .. zu setzen, wird folgendes Kommando eingegeben.
alias ..="cd .."
Die allgemeine Syntax für den Befehl alias lautet:
alias [NAME[=KOMMANDO]]
Dabei gibt das Kommando alias unter Angabe des Aliasnamen das dazugehörige Kommando aus. Der Aufruf ohne Parameter gibt eine Liste aller definierten Aliase mit ihren Kommandosequenzen aus.
Der Befehl alias sowie der Gegenbefehl unalias sind fester Bestandteil der Bash und direkt eingebaut.
unalias [-a] [NAMENSLISTE]
Wenn Sie den Schalter -a verwenden, arbeitet unalias sehr gründlich: Alle Alias-Definitionen werden gelöscht.
Beim Starten der Shell wird die History-Liste aus der Datei .bash_history im Heimatverzeichnis erstellt. Die Umgebungsvariable HISTFILE enthält den Namen dieser Datei. Die Größe der Datei in Zeilen wird durch HISTFILESIZE bestimmt.
Beim Ausloggen wird eine Anzahl von Zeilen, die in der Variablen HISTSIZE definiert worden ist, an die Datei .bash_history angehängt oder die komplette Datei wird durch diese ersetzt, je nachdem ob das histappend-Attribut der Shell gesetzt ist oder nicht. Mit den Shellvariablen HISTCONTROL und HISTIGNORE kann in Abhängigkeit von im Befehl enthaltenen Zeichen bestimmt werden, welcher Befehl in der History gespeichert wird und welcher nicht.
history [OPTIONEN] [ZAHL]Ohne Angabe von Parametern wird die gesamte History-Liste angezeigt. Durch Angabe einer Zahl werden die letzten ZAHL Zeilen der History-Liste angezeigt.
| Optionen | |
| -c | Löschen der History-Liste |
fc -l [ANFANG] [ENDE] fc -s [NUMMER]Der Schalter -f in Kombination mit zwei Zahlen zeigt die Zeilen von ANFANG bis ENDE an. ANFANG und ENDE können auch Zeichenketten sein. Dann werden alle Zeichen vom ersten Auftauchen von ANFANG bis zum ersten Auftauchen von ENDE angezeigt.
| Optionen | |
| -l | Zeigt ohne Parameter die letzten 16 Kommandos an. |
| -s | Führt ohne Parameter das letzte Kommando aus. Ansonsten das Kommando mit der angegebenen Nummer. |
| -e | Ermöglicht das Bearbeiten der History-Liste |
Standardmäßig verwendet fc den Editor vi zum Bearbeiten. Durch setzen der Umgebungsvariablen FCEDIT kann auch ein anderer Editor dafür eingesetzt werden. So setzt
tapico@defiant:~> FCEDIT=/usr/bin/joe tapico@defiant:~> export FCEDITden Editor joe als Standardeditor ein.
> oder 1> wird die Ausgabe des Programm in die angegebene Datei umgelenkt. Ob das Eingabeziel vor dem Befehl oder nach dem Befehl steht ist relativ egal. Als Konvention hat sich der Platz hinter dem Befehl eingebürgert.
ole@enterprise:~/test> cat *.txt > alle.txt ole@enterprise:~/test> > nochmal.txt cat *.txt
Dabei wird jedesmal eine neue Datei erstellt und der Inhalt der alten Datei gelöscht.
>>.
ole@enterprise:~/test> date >> blubb.log ole@enterprise:~/test> >> blubb.log echo $USER $SHELL $0In diesem Fall wird die blubb.log nicht durch den zweiten Befehl überschrieben sondern ergänzt.
2> wird die Standardfehlerausgabe umgeleitet. Oft stören die Fehlermeldungen, wenn sie z. B. nur melden, daß keine Zugriffsrechte auf ein Verzeichnis bestehen.
ole@enterprise:~/test> ls -Rl 2> /dev/null ole@enterprise:~/test> 2> fehler.log ls -Rl
Die Gerätedatei ist praktisch das Nichts von Linux. Alle Daten, die in diese Datei geleitet werden, gehen verloren und werden nie wieder gesehen. Also der ideale Ort für unsinnige Warnungen, überflüssige Fehlermeldungen oder einfach zum Testen. Schade, daß ich die Ausgabe mancher Menschen nicht in ein solches Gerät umleiten kann.
ole@enterprise:~/test> grep -r enterprise /etc/ &> blubb.txt ole@enterprise:~/test> grep -r enterprise /etc/ >& blubb.txt ole@enterprise:~/test> grep -r enterprise /etc/ > blubb.txt 2>&1 ole@enterprise:~/test> grep -r enterprise /etc/ 2> blubb.txt 1>&2
Bei den letzten Kommandos kommt es auf die Reihenfolge an. Denn die folgenden Kombinationen führen nicht zum gewünschten Erfolg.
ole@enterprise:~/test> grep -r enterprise /etc/ 2>&1 > blubb.txt ole@enterprise:~/test> grep -r enterprise /etc/ 1>&2 2> blubb.txt
< liest das Programm nicht von der Standardeingabe sondern holt seine Daten aus der angegeben Datei.
Es ist dabei völlig egal, ob die als Eingabe dienende Datei vor oder hinter dem befehl definiert wird.
ole@enterprise:~/test> cat < input.txt In a world without walls and fences, who needs windows and gates? ole@enterprise:~/test> < input.txt cat In a world without walls and fences, who needs windows and gates?
<< und einem Endemarkierung können Sie auf der Tastatur so viele Zeilen eingeben, wie sie wollen. Abgeschlossen wird der Vorgang, wenn Sie in eine Zeile nur die Endemarkierung hineinschreiben.
ole@enterprise:~/test> sort <<ENDE > Leif Neid > Thore Wart > Axel Schweiß > Erk Lasse > Walter Meingott > ENDE Axel Schweiß Erk Lasse Leif Neid Thore Wart Walter Meingott
Die Ein- und Ausgabeumleitungen können natürlich wild miteinander kombiniert werden. Das kann zu manchmal merkwürdigen Befehlen führen, die aber völlig in Ordnung sind.
|.
ole@enterprise:~/test> ls -l /dev | less
Eine Philosophie von Linux/Unix ist die Verwendung kleiner spezialisierter Programme anstatt großer universeller ``Eierlengender Wollmilchsäue''. Die einzelnen Kommandos werden dann mit Pipelins miteinder verbunden. Beispiele für die Anwendung der Pipelines finden Sie ausführlich in Kapitel 7 Textfilter.
tee [OPTIONEN] DATEILISTE
| Optionen | |
| -a | Die Daten werden an eine vorhandene Datei angehängt |
| -i | Ignoriert Interrupt-Signale |
ls -al | tee schmeckt
Sie können auch mehrere Dateien gleichzeitig mit dem Inhalt des Verzeichnis füllen. In diesem Falls sind es die Dateien schmeckt und gut.
ls -al | tee schmeckt gut
Hier wird der Inhalt der Datei amAngelhaken an die Datei angeln.txt angefügt und gleichzeitig mit less angezeigt.
cat amAngelhaken | tee -a angeln.txt | less
xargs KOMMANDODabei ordnet xargs die übergebenen Daten als durch Leerzeichen getrennte Reihe von Worten an.
ls -l | xargs echo
Dieses Beispiel faßt die in der Datei liste aufgeführten Dateien zu einer Datei myFiles zusammen und gibt sie gleichzeit mit less auf dem Bildschirm aus.
cat liste | xargs cat | tee myFiles | less
Oder wollten Sie nicht schon mal wissen, was eigentlich die Programme im Verzeichnis /bin so machen. Der Befehl whatis (6.3.3) gibt eine Kurzbeschreibung aus.
ls /bin | xargs whatis | less
Notizen:
Notizen:
Shell 2
Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.
Vergewissern Sie sich vor der Bearbeitung der Aufgaben, daß die Korn-Shell installiert wurde.
rm -rf * aus.
<F1> mit dem Befehl für den aktuellen Jahreskalender
<F2> mit dem Befehl für die Uhrzeit und
<F3> mit dem Befehl für den Editor vi.
@ HOSTNAME SHELL SHELLVERSION+PATCHLEVEL am DATUM : VERZEICHNIS >''
tapico@defiant bash 2.03.0 am Fri Dec 29: ~ >
_.
echo -e "Hurra\n"
chmod 755 hurra ein. Die Datei wird damit ausführbar.
ls -al | less an.
Notizen:
Notizen:
| Ein Mathematiker, ein Physiker und ein Computeruser werden getrennt von einander eingeschlossen. Jeder erhält zwei Glaskugeln. Nach einer Stunde schaut man was diese Leute damit machen. Der Mathematiker sitzt dort und berechnet das Volumen und die Oberfläche der Kugeln. Der Physiker hält die Kugeln gegen das Licht und berechnet Brechzahl und Absorptionskoeffizient. Als letztes schaut man beim Computerbenutzer herein und stellt fest, daß eine Kugel weg ist und das Fenster zerbrochen. Auf die Frage, was denn passiert sei, zuckt der User nur mit den Achseln und sagt: ``Ich hab' nix gemacht!...'' |
| Anonymous |
Ein nicht unerheblicher Nachteil der Shell gegenüber der graphischen Benutzeroberfläche ist eindeutig der Umstand, daß man die Befehle des Systems kennen muß. Bei der graphischen Oberfläche sind die meisten Einstellmöglichkeiten und Aktionen gut beschriftet. Sie müssen als nur Lesen können und es natürlich auch tun. Zum Glück gibt es im Linux-System und auch im Internet umfangreiche Hilfen und Anleitungen, damit Sie nicht alle Befehle auswendig lernen müssen. Dieses Kapitel stellt Ihnen die wichtigsten Hilfe-Quellen vor.
Für die Verwendung der Manual-Pages wird das Tool man (6.1.2) verwendet. Dieses Tool sucht den passenden Hilfetext heraus und stellte ihn durch einen Textbetrachter dar. In den meisten Fällen ist less der Pager.
Die Hilfetexte sind in mehrere Texte aufgeteilt, wie in Tabelle 6.2 zu sehen. Es muß aber nicht unbedingt jeder Abschnitt in dem Text vorkommen.
|
Die Handbuchseiten liegen als gezippte ASCII-Code vor, die in einem speziellen Format geschrieben wurden. Das Programm groff kann diese Seiten für die Ausgabe aufbereiten. Die Dateien für die Manual-Pages können in verschiedenen Pfaden liegen. Generell ist dies der Pfad /usr/share/man. Bei älteren Distribution liegen die Hilfetexte im Verzeichnis /usr/man. Die Umgebungsvariable MANPATH enthält die Pfade zu den Hilfetexten. Für die Ermittlung der Verzeichnisse kann auch der Befehl manpath verwendet werden.
tapico@defiant:~ > echo $MANPATH /usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/man
In diesen Verzeichnissen existieren mehrere Unterverzeichnisse für die neun ``Kapitel'' der Manual-Pages. Am wichtigsten für Administratoren sind die Kapitel 1, 5 und 8. Eine Übersicht über die Kapitel liefert die Tabelle 6.3. Da einige Themen in mehreren Kapiteln vorkommen können, wird die Kapitelnummer bei Verweisen aufs Handbuch in Klammern hinter das Thema geschrieben. Sie finden also die Informationen zu dem Befehl passwd in der Manual-Page passwd(1) und zu der Datei /etc/passwd in der Manual-Page unter passwd(5). Es können durch Programme aber noch weitere Kapitel hinzugefügt werden, wie Sie es im folgenden Beispiel sehen. Für die SSL-Verschlüsselung gibt es auch ein Passwort-Tool.
enterprise:~ # whatis passwd passwd (1ssl) - compute password hashes passwd (1) - change user password passwd (5) - The password file
|
Neben den normalen Benutzerbefehlen (man1), den Systemverwalterbefehlen (man8) und den Dateiformaten (man5), gibt es noch weitere wichtige Kapitel. So enthält Kapitel 7 auch Informationen über die Implementierung der Netzwerkprotokolle.
enterprise:~ # whatis tcp udp ip arp tcp (7) - TCP protocol. udp (7) - User Datagram Protocol for IPv4 ip (7) - Linux IPv4 protocol implementation ip (8) - show / manipulate routing, devices, policy routing and tunnels arp (7) - Linux ARP kernel module. arp (8) - manipulate the system ARP cache
Wenn nun über den Befehl man eine Seite zu einem Thema angefordert wird, wird die erste Seite angezeigt, die gefunden wird. Dabei werden die Kapitel in der Reihenfolge
1, 8, 2, 3, 4, 5, 6, 7, 9
durchsucht. Deshalb findet man z. B. bei dem Aufruf von passwd immer das gleichnamige Tool. Um die Beschreibung der Benutzerliste /etc/passwd zu bekommen, muß explizit die Kapitelnummer angegeben werden.
man [OPTIONEN] [SEKTION] [THEMA]
Dabei wird die erste passende Seite zu dem Thema angezeigt.
| Optionen | |
| -a | Zeigt alle passenden Seiten hintereinander an |
| -f | Zeigt eine Kurzbeschreibung zu den passenden Seiten an. |
| -k | Stichwortsuche in der Hilfe nach den Kurzbeschreibungen |
| -K | Volltextsuche in der Hilfe (Achtung: Nicht in jeder Version von man implantiert) |
| -t | Gibt die angeforderte Man-Page als Postscript-Datei aus. |
| -L SPRACHE | Gibt die Sprache für die Manual-Page an. |
Die Konfigurationsdatei für man ist /etc/man.config bzw. /etc/manpath.config. Die Umgebungsvariable PAGER enthält den Namen des Textbetrachters, den man verwendet. Dies ist im Normalfall das Programm less (Abschnitt 4.5.10).
ole@enterprise:~> echo $PAGER less
Die meisten Manual-Pages liegen in Englisch vor. Manche Seiten sind auch in Deutsch und anderen Sprachen erhältlich. Verantwortlich für die Auswahl der Sprache durch man ist u.a. die Variable LANG.
ole@enterprise:~> echo $LANG de_DE@euro
Um Themen aus verschiedenen Kapiteln anzeigen zu lassen, muß die Kapitelnummer vor dem Thema angegeben werden.
ole@enterprise:~> man -f groff groff (1) - front end for the groff document formatting system groff (7) - a short reference for the GNU roff language ole@enterprise:~> man 1 groff Formatiere groff(1) neu, bitte warten... ole@enterprise:~> man 7 groff Formatiere groff(7) neu, bitte warten...
Die Manual-Page für man wird bei SuSE in einer deutschen Übersetzung angezeigt. Will man die englische Version der Seite bekommen, so muß die Sprache explizit angegeben werden.
ole@enterprise:~> man -L en man
Größere Man-Pages sind oft schlecht am Bildschirm zu lesen. Manchmal möchte man die Dateien auch ausgedruckt haben. Die folgende Befehlsfolge gibt die Manual-Page als Postscript-Datei aus, die an die Druckerwarteschlange lp weitergeleitet und ausgedruckt wird.
ole@enterprise:~> man -t cat | lpr -Plp
manpath [OPTIONEN]
Wenn ein Verzeichnis nicht in der Konfigurationsdatei /etc/manpath.config aufgelistet ist, sucht manpath nach den Unterverzeichnissen man und MAN. Wenn diese existieren, werden sie dem Suchpfad hinzugefügt.
Der Befehl manpath wird von man benutzt um den Suchpfad zu bestimmen. Daher ist es für einen Benutzer im Normalfall nicht notwendig, die Umgebungsvariable MANPATH direkt zu setzen.
Weitere Informationen über Anwendung und Optionen lesen Sie bitte in den Manual-Pages manpath(1) nach.
info [KOMMANDO]
Wenn Sie nur den Befehl info eingeben, landen Sie auf einem Inhaltsverzeichnis, das die wichtigsten Themen der TexInfo auflistet. Sie können mit den Cursortasten durch das Menü scrollen. Um in einem Menüpunkt zu wechseln, die sind durch einen vorangestellten Asterisk gekennzeichnet, müssen Sie nur mit dem Cursor auf die Zeile wechseln und <Return> drücken. Alternativ können Sie auch die Taste <m> drücken. In diesem Fall erscheint in der untersten Zeile der Text ``Menu item:''. Hier können Sie den Menüpunkt direkt eintippen. Dabei sind nur so viele Zeichen nötig, wie zum einwandfreien Erkennen des Menüpunkt notwendig sind. Auch diese Aktion beenden Sie mit der Taste <Return>.
Schauen wir uns das ganze an einem Beispiel an. Geben Sie auf der Konsole den Befehl info ein. Sie landen nun im Hauptmenü der TexInfo. Sie können nun mit den Cursortasten den Cursor auf den Eintrag dd bewegen und dort <Return> drücken. Oder Sie geben die Tastenfolge <m><d><d><Return> ein.
Nun befinden Sie sich im Eintrag für den Befehl dd, der schon in Abschnitt 4.5.4 behandelt wurde. In der obersten Zeile finden Sie nun mehrere Informationen. Da diese oft ausführlicher sind, setzen sie sich meistens in der zweiten Zeile fort.
Wechseln Sie nun mit der Taste <u> einen Abschnitt höher. Sie befinden sich nun im Abschnitt Basic Operations, der die Befehle cp, dd, install, mv, rm und shred behandelt.
Um wieder in den Abschnitt dd invocation zu wechseln können Sie die Taste l betätigen. Sie entspricht in ihrer Funktion des Zurück-Buttons im Webbrowser. Sie können natürlich auch die Menüfunktionen nutzen um in den gewünschten Abschnitt zu wechseln. Weil hier nur ein Menüeintrag mit dem Buchstaben d beginnt, brauchen Sie nur die Tastenfolge <m><d><Return> einzugeben.
Eine Übersicht über die Steuerkommandos von info liefert die Tabelle 6.4.
Bei Linux befinden sich die TexInfo-Dateien in den Verzeichnissen /usr/local/info, /usr/share/info und /usr/info.
help [KOMMANDO]
Der Befehl ohne Parameter zeigt eine Liste der Bash-internen Befehle an.
dozent@linux37:~> help
GNU bash, version 2.05b.0(1)-release (i586-suse-linux)
These shell commands are defined internally. Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.
A star (*) next to a name means that the command is disabled.
%[DIGITS | WORD] [&] (( expression ))
. filename :
[ arg... ] [[ expression ]]
alias [-p] [name[=value] ... ] bg [job_spec]
bind [-lpvsPVS] [-m keymap] [-f fi break [n]
builtin [shell-builtin [arg ...]] case WORD in [PATTERN [| PATTERN].
cd [-L|-P] [dir] command [-pVv] command [arg ...]
compgen [-abcdefgjksuv] [-o option complete [-abcdefgjksuv] [-pr] [-o
continue [n] declare [-afFirtx] [-p] name[=valu
dirs [-clpv] [+N] [-N] disown [-h] [-ar] [jobspec ...]
echo [-neE] [arg ...] enable [-pnds] [-a] [-f filename]
eval [arg ...] exec [-cl] [-a name] file [redirec
exit [n] export [-nf] [name[=value] ...] or
false fc [-e ename] [-nlr] [first] [last
fg [job_spec] for NAME [in WORDS ... ;] do COMMA
for (( exp1; exp2; exp3 )); do COM function NAME { COMMANDS ; } or NA
getopts optstring name [arg] hash [-lr] [-p pathname] [-dt] [na
help [-s] [pattern ...] history [-c] [-d offset] [n] or hi
if COMMANDS; then COMMANDS; [ elif jobs [-lnprs] [jobspec ...] or job
kill [-s sigspec | -n signum | -si let arg [arg ...]
local name[=value] ... logout
popd [+N | -N] [-n] printf format [arguments]
pushd [dir | +N | -N] [-n] pwd [-PL]
read [-ers] [-u fd] [-t timeout] [ readonly [-anf] [name[=value] ...]
return [n] select NAME [in WORDS ... ;] do CO
set [--abefhkmnptuvxBCHP] [-o opti shift [n]
shopt [-pqsu] [-o long-option] opt source filename
suspend [-f] test [expr]
time [-p] PIPELINE times
trap [arg] [signal_spec ...] or tr true
type [-afptP] name [name ...] typeset [-afFirtx] [-p] name[=valu
ulimit [-SHacdflmnpstuv] [limit] umask [-p] [-S] [mode]
unalias [-a] [name ...] unset [-f] [-v] [name ...]
until COMMANDS; do COMMANDS; done variables - Some variable names an
wait [n] while COMMANDS; do COMMANDS; done
{ COMMANDS ; }
Die HOWTO-Texte befinden sich meistens in komprimierter Form im Verzeichnis /usr/doc/HOWTO, /usr/doc/howto bzw. /usr/share/doc/howto. Bezugsquelle für die HOWTOs sind
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
http://sunsite.unc.edu/LDP/HOWTO/
http://www.linuxdoc.org/HOWTO/
bzw. einer Ihrer Spiegelserver.
Die FAQs sind im HTML-, PostScript- und Text-Format vorhanden und befinden sich im Verzeichnis /usr/doc/FAQ. Die Online-Quelle für die neuesten FAQs ist
http://www.linuxdoc.org/FAQ/.
Seit SuSE 8.0 sind die FAQs kein Bestandteil mehr der Distribution. Das ist aber zu verschmerzen, da ihr Informationswert nicht sehr groß ist.
Auch gibt es durch dieses Projekt einige Bücher, die spezielle Themen abdecken. Diese können von http://www.tldp.org/guides.html heruntergeladen werden. U. a. sind dies
Ein weiteres Projekt für eine mehr benutzerfreundliche Dokumentation ist Linuxnewbie.org (http://www.linuxnewbie.org/).
Die Linuxgazette (http://www.linuxgazette.com/) ist ein monatlich erscheinendes Online-Magazin zum Thema Linux. Es ist Mitglied des Linux Documentation Projects. Es gibt auch eine deutsche Ausgabe (http://www.linuxgazette.de/) in der einige Artikel der englischen Ausgabe ins Deutsche übersetzt wurden.
Besonders für SuSE-Nutzer ist die SuSE-Seite (http://www.suse.de) mit ihrer Supportdatenbank (http://sdb.suse.de/sdb/de/html/)zu empfehlen, da dort die gängigsten Probleme und ihre Lösungen beschrieben werden.
Ein allgemeines Portal über Linux finden Sie unter http://www.linux.org/ wie auch unter http://www.linux.de/.
Auch ein Wiki gibt es für Linux. Unter der URL http://www.linuxwiki.de/ ist eine freie Textdatenbank zu finden, die sich mit dem Themen Linux und GNU beschäftigt.
Ein teilweise kostenpflichtiger Dienst ist http://www.lwn.net/. Hier erhalten Sie eine tägliche Übersicht über die neuesten Entwicklungen, Sicherheitslücken, Produkte usw.
Eine Zusammenfassung der wichtigsten Nachrichten und Schlagzeilen zu Linux aus verschiedenen Quellen finden Sie auf http://www.linuxkp.org/, dem Linux Knowledge Portal.
Natürlich soll auch die Seite http://www.fibel.org/ nicht vergessen werden, wo Sie dieses Skript herunterladen können. ;-)
Für das Lesen der Newsgroups benötigen Sie einen Newsreader wie er in Netscape oder Mozilla integriert ist oder ein separates Programm wie z. B. KNode (2.4.6). Die Suchmaschine Google (http://www.google.de) hat das Newsgrouparchiv von http://www.deja.com übernommen. Sie ist eine gute Alternative um die Newsgroups mit dem Browser durchsuchen und lesen zu können.
Wenn Sie KNode zum ersten Mal starten, erscheint gleich das Einstellungsfenster. Sie können es aber auch nachträglich unter Einstellungen/KNode einrichten... wieder aufrufen.
Als erstes tragen Sie unter Identität die persönlichen Angaben ein, wie Sie es auch für die eMail machen.
Unter Zugang/News tragen Sie die zu verwendenden Newsserver ein. Diese halten die Artikel der einzelnen Newsgroups vor und sorgen auch für den Abgleich der Server untereinander. Entweder haben Sie von Ihrem Provider einen Newsserver benannt bekommen oder Sie müssen sich einen freien Newsserver suchen. Für freie Newsserver gibt es im Netz mehrere Suchmaschinen. Eine Liste dieser Suchmaschinen finden Sie unter
http://directory.google.com/Top/Computers/Usenet/Public_News_Servers/
Eine dieser Suchmaschinen ist Newzbot (http://www.newzbot.com/). Geben Sie einfach den Namen der Newsgroup oder einen Teil des Namens an und Newzbot ermittelt die passenden Newsserver dafür.
Über den Button Neu im Server-Dialog von KNode bekommen Sie jetzt ein Dialogfenster für den neuen Newsserver. Tragen Sie einen Namen für die Anzeige und den Namen des Newsservers ein. Unter dem Reiter Identität können Sie individuell für jeden Newsserver sich eine Identität zulegen.
Weitere Einträge brauchen Sie zuerst nicht. Im linken Rahmen von Knode ist nun der eingetragene Newsserver aufgetaucht. Sie müssen nun eine Newsgroup von dem Server abonnieren. Dazu klicken Sie mit der rechten Maustaste auf den Servernamen und wählen den Punkt Newsgruppen abonnieren... aus. Nun holt KNode vom Server die vorhandenen Gruppen. Das kann bei manchen Servern sehr lange dauern. Die Gruppen werden Ihrer Hierachie gemäß in Baumform angezeigt.
Wählen Sie nun die gewünschten Gruppen (z. B. alle Linuxgruppen) aus, indem Sie auf die schwarz umrandeten Kästchen klicken. Bestätigen Sie die Auswahl mit OK. Die Gruppen sind nun unter dem Newsserversymbol erschienen. Wenn Sie nun auf eine der Gruppen klicken, dann zeigt das linke Fenster die Zahl der vorhandenen Artikel an, während eine Liste der Artikel im rechten oberen Rahmen erscheint. Klicken Sie dort auf einen Eintrag, so erscheint der gewählte Artikel im rechten unteren Rahmen.
whereis [OPTIONEN] KOMMANDO
Die Suche ist dabei auf eine limitierte Anzahl von bekannten Verzeichnissen beschränkt. Wenn die gesuchte Datei nicht gefunden wurde, wird nur der gesuchte Name zurückgegeben.
| Optionen | |
| -b | Suche nach Programmdatei (binary) |
| -s | Suche nach Quellcodedatei (source file) |
| -m | Suche nach Online-Hilfe (manpages) |
| -u | Suche nach anderen Dateien (unusal entries) |
Voreinstellung ist -bmsu zur Suche nach allen möglichen Dateien.
which KOMMANDOwhich durchsucht die Verzeichnisse, die in der Umgebungsvariablen PATH angegeben sind, und gibt den Pfad des ersten Fundorts des gesuchten Programms an.
whatis [OPTIONEN] THEMA
Innerhalb jeder Manualseite ist eine Kurzbeschreibung vorhanden. whatis sucht Schlüsselwort in den Kurzbeschreibungen der Indexdatenbank. Falls es eine solche nicht im Manualpfad gibt, durchsucht es die whatis-Datenbank, die sich in /usr/man/man1 befindet, nach dem Schlüsselwort.
whatis verhält sich wie man -f.
mandb [OPTIONEN] [PFAD]
In der Regel ist diese Datenbank die Datei /var/cache/man/index.db.
apropos [OPTIONEN] STICHWORTDie Suche mit apropos ist identisch zu man -k.
type [OPTIONEN] BEGRIFFE
| Optionen | |
| -t | Ausgabe eines einzelnen Wortes (`alias', `keyword', `function', `builtin', `file' oder ` ') |
| -p | Gibt die Datei aus, die ausgeführt wird. (Wird nur ausgegeben, wenn -t `file' liefert.) |
| -a | Gibt die Datei aus, die ausgeführt wird. (Wird nur ausgegeben, wenn -t `file', `alias' oder `function' liefert.) |
Jetzt kommt es noch darauf an, welche Art der Dokumentation man wählen soll. Es gibt zwei Arten: die elektronische Dokumentation und die Dokumentation auf Papier.
Obwohl der Benutzer-Support sehr aufwendig ist, sollten Sie dem Benutzer nie das Gefühl geben seine Anfrage wäre Zeitverschwendung. Diese Anfragen können auf viele Arten und Weisen erfolgen. Ihr Ziel sollte es aber immer sein den Benutzer produktiver werden zu lassen.
Notizen:
Dokumentation und Hilfe
Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.
Teil 1
rm -rf * aus.
Notizen:
Teil 2
Für das Archivieren und platzsparende Packen von Dateien werden Packprogramme verwendet. Verwenden Sie die Hilfen des Linux-Betriebssystems um die folgenden Fragen zu beantworten.
rm -rf * aus.
tac [OPTIONEN] [DATEILISTE]
Werden keine speziellen Datensatztrenner (Seperatoren) angegeben, wird die Zeile als Datensatz interpretiert.
| Optionen | |
| -r | Seperator wird als regulärer Ausdruck interpretiert |
| -s SEP | Neuen Separator eingeben (Voreinstellung: NeueZeile) |
Es werden zwar die Datensätze in einer Datei umgekehrt ausgegeben, aber die Reihenfolge der angegebenen Dateien wird nicht geändert.
ole@enterprise:~/test> cat mann Axel Schweiß Bert Rahm Carlos Calvados ole@enterprise:~/test> cat frau Ada Bsurdum Betti Marsch Claire Grube ole@enterprise:~/test> tac mann frau Carlos Calvados Bert Rahm Axel Schweiß Claire Grube Betti Marsch Ada Bsurdum
nl [OPTIONEN] [DATEILISTE]
nl fügt für jede Zeile einer Textdatei eine Zeilennummer hinzu. Die Nummerierung beginnt bei jeder neuen Seite wieder neu.
Eine Seite gliedert sich in drei Abschnitte: header, body und footer (Kopf, Rumpf und Fuß). Die Abschnitte werden durch Zeilen eingeleitet die nur folgende Zeichenfolgen enthalten:
| für den Kopf | |
| für den Rumpf | |
| für den Fuß |
| Optionen | |
| -b STYLE | Wählt die Nummeriungsart für den Rumpf aus. Wird eine Zeile nicht nummeriert, so wird der Zeilenzähler nicht erhöht. Das Trennzeichen wird aber eingefügt. Als Stilarten stehen zu Verfügung
-a alle Zeilen nummerieren -n keine Zeilen nummerieren (header, footer) -t alle Zeilen mit Inhalt nummerieren (body) -pREGEXP nur Zeilen, die den Ausdruck REGEXP enthalten, nummerieren |
| -h | Wie -b, aber für den Kopf. |
| -f | Wie -b, aber für den Fuß. |
| -d CD | Setzt die Abschnittsmarkierung neu (Voreinstellung |
| -i N | Schrittweite der Nummerierung. Für jede Zeile wird N hinzuaddiert. (Voreinstellung: 1) |
| -l N | Zählt N aufeinanderfolgende leere Zeilen als eine (Voreinstellung: 1) |
| -n FORMAT | Setzt das Format für die Zeilenummeriung fest
ln links ausgerichtet ohne führende Nullen rn rechts ausgerichtet ohne führende Nullen rz rechts ausgerichtet mit führenden Nullen |
| -p | Startet die Nummeriung am Anfang einer logischen Seite nicht neu |
| -s STRING | STRING ist die Trennzeichenkette zwischen Nummerierung und Zeile (Voreinstellung: TAB-Zeichen) |
| -v N | Startet die Nummeriung mit N (Voreinstellung: 1) |
| -w N | Anzahl der Zeichen für die Nummerierung (Voreinstellung: 6) |
od [OPTIONEN] [DATEILISTE]
Dieser Befehl wird meistens zur Ausgabe von Binärdateien eingesetzt.
| Optionen | |
| -b | Byteweise Ausgabe in oktaler Form |
| -c | Byteweise Ausgabe in ASCII-Format |
| -d | Dezimale Ausgabe von je zwei Byte |
| -x | Hexadezimale Ausgabe von je zwei Byte |
fmt [OPTIONEN] [DATEILISTE]
| Optionen | |
| -s | Erlaubt nur das Zerlegen von Zeilen und nicht das Zusammenfügen von zu kurzen Zeilen |
| -u | Reduziert die Anzahl der Leerzeichen zwischen Wörtern auf ein und zwischen Sätzen auf zwei Leerzeichen |
|
-WIDTH
-w WIDTH |
Gibt Zeilen mit einer Breite von WIDTH Zeichen aus. (Voreinstellung: 75) |
| -p PREFIX | Es werden nur Zeilen verarbeitet, die mit der Zeichenfolge PREFIX beginnen. Führende Leerzeichen werden ignoriert. Führende Leerzeichen und PREFIX werden entfernt, die Zeilen werden umgebrochen und dann werden vor jeder Zeile die Leerzeichen und der PREFIX wieder angefügt. Einsatzgebiet: Umbrechen von Kommentaren in Programmen, ohne daß der Programmcode verändert wird. |
fmt -u index.html > index.neu.html
Hier werden die Kommentare in einem Perl-Skript auf eine Zeilenlänge von 70 Zeichen umgebrochen.
fmt -p \# -w 70 sort.pl > sort.new.pl
pr [OPTIONEN] [DATEILISTE]
Wenn keine Optionen ausgewählt werden, werden die Dateien seitenweise formatiert. Jede Seite besteht aus 66 Textzeilen: einem fünfzeiligen Kopf, einem Textbereich und einem fünfzeiligen Fuß. Die Kopfzeile enthält Seitenzahl, Dateiname, Datum und Uhrzeit. Alternativ kann der Text auch in Spalten ausgegeben werden.
| Optionen | |
| +ANFANG[:ENDE] | Ausgabe von Seite ANFANG bis Seite ENDE |
| -SP | Gibt den Text in SP Spalten aus (Voreinstellung: 1) |
| -c | Ausgabe von nichtdruckbaren Zeichen (show-control-char) |
| -d | Fügt Leerzeilen ein (double-space) |
|
-f
-F |
Verwendet Zeilenvorschub anstatt NeueZeile
Kopf- und Fußbereich werden auf drei Zeilen reduziert (form-feed) |
| -h HEADER | Ersetzt den Dateinamen im Kopf durch die Zeichenkette HEADER |
| -l LENGTH | Setzt die Seitenlänge (Voreinstellung: 66 Zeilen) (page-length) |
| -m | Fügt Dateien spaltenweise zusammen (merge) |
| -n[SEP[ZAHL]] | Nummeriert die Zeilen durch
SEP Trennungszeichen ZAHL Anzahl der Ziffern |
| -N ANFANG | Beginnt Nummeriung der Zeilen mit ANFANG (nur im Zusammenhang mit -n verwendet) |
| -s SEP | Trennzeichen für Spalten |
| -S SEP | Trennzeichenkette für Spalten |
| -t | Führt keine Seitenformatierung durch |
| -w WIDTH | Einstellung Textbreite auf WIDTH Zeichen |
pr -2 +4:10 linux.tex
Gibt die Datei mit Zeilennummerierung (Trennzeichen `:', 4 Ziffern) auf dem Drucker aus.
pr -n:4 hallo.pl > lpr
fold [OPTIONEN] [DATEILISTE]
Im Normalfall ermittelt fold die Bildschirmspalten und bricht die Zeilen auf diese Länge um. Ein Tabulatorzeichen kann mehrere Spalten umfassen.
| Optionen | |
| -b | Zählung nach Bytes und nicht nach Spalten (bytes) |
| -s | Umbruch erfolgt wenn möglich nur an Leerzeichen (spaces) |
| -w WIDTH | Stellt Textbreite auf WIDTH Spalten/Bytes ein (width) |
fold -s -w 70 kn20000904.txt | less
head [OPTIONEN] [DATEILISTE]
Werden mehrere Dateien angegeben, so fügt head den Dateinamen in der Form
==> DATEINAME <==
als Kopf vor dem Ausgabetext ein. Der Befehl tail (siehe 7.3.2) arbeitet ähnlich.
| Optionen | |
| -c B | Gibt anstatt der ersten 10 Zeilen, die ersten B Zeichen aus. |
|
-n N
-N |
Gibt anstatt der ersten 10 Zeilen, die ersten N Zeilen aus. |
| -q | Unterdrückt die Ausgabe der Dateinamen als Kopfzeile |
| -v | Schreibt immer den Dateinamen als Kopfzeile vor der Ausgabe |
head -n 5 -v links.html
tail [OPTIONEN] [DATEILISTE]
Werden mehrere Dateien angegeben, so fügt tail den Dateinamen in der Form
==> DATEINAME <==
als Kopf vor dem Ausgabetext ein. Der Befehl head (siehe 7.3.1) arbeitet ähnlich.
| Optionen | |
| -c B | Gibt anstatt der letzten 10 Zeilen, die letzten B Zeichen aus. |
|
-n N
-N |
Gibt anstatt der letzten 10 Zeilen, die letzten N Zeilen aus. |
| -q | Unterdrückt die Ausgabe der Dateinamen als Kopfzeile |
| -v | Schreibt immer den Dateinamen als Kopfzeile vor der Ausgabe |
| -f | Mit dieser Option überwacht tail kontinuierlich das Ende einer oder mehrerer Dateien. Wird an die Datei etwas angehängt, so werden die Änderungen ausgegeben. Die Überwachung wird mit STRG+C abgebrochen. |
tail -n 5 -q seite1.html seite2.html seite3.html
Mit der folgenden Sequenz werden mehrere Dateien auf Veränderung überwacht.
tail -fn 15 /etc/passwd /etc/group /tmp/mylogfile
split [OPTIONEN] [DATEI [PREFIX]]
Wird keine Datei angegeben bzw. ``-'' als Dateiname, dann wird von der Standardeingabe gelesen.
split zerlegt eine große Datei in kleinere Dateien vordefinierter Größe (Voreinstellung: 1000 Zeilen). Die dabei entstehenden Dateien beginnen mit einem Prefix (Voreinstellung: x) und werden zweistellig mit Buchstaben durchnummeriert. (xaa, xab, xac, ...).
| Optionen | |
| -LINES
-l LINES |
Größe der Ergebnisdateien in Zeilen |
| -b BYTES | Größe der Ergebnisdateien in Bytes
b angehängt bedeutet BYTES x 512 k angehängt bedeutet BYTES x 1024 m angehängt bedeutet BYTES x 1048576 |
wc [OPTIONEN] [DATEILISTE]
wc gibt pro Datei die Anzahl der Zeilen, die Anzahl der Worte, die Anzahl der Zeichen und den Namen der Datei. Werden mehrere Dateien angegeben, so wird am Schluß eine Zusammenfassung aller Dateien angezeigt.
| Optionen | |
| -c | Anzahl der Zeichen ausgeben |
| -w | Anzahl der Worte ausgeben |
| -l | Anzahl der Zeilen ausgeben |
wc -lw artikel1.txt artikel2.txt artikel3.txt
Bestimmt die Anzahl der Dateien im Verzeichnis /etc.
ls /etc | wc -l
sum [OPTIONEN] [DATEILISTE]
cksum [OPTIONEN] [DATEILISTE]
Diese Funktion benutzt einen stabileren Algorithmus (CRC: cyclic redundancy check) als sum (siehe 7.4.2).
sort [OPTIONEN] [DATEILISTE]
sort kennt drei Arten der Funktion. Sortieren, Verbinden und Prüfen auf Sortierung.
| Optionen | |
| -c | Prüft, ob die Datei sortiert ist (check sort) |
| -m | Verbindet mehrere Dateien (die nicht sortiert werden, sondern als Gruppe behandelt werden) miteinander |
| -b | Führende Leerzeichen eines Schlüsselfeldes werden ignoriert |
| -d | Sortieren als Telefonverzeichnis: Nur Buchstaben, Ziffern und Leerzeichen werden berücksichtigt |
| -f | Unterscheidet nicht zwischen Groß- und Kleinbuchstaben |
|
-g -n |
Sortiert nach Zahlen anstatt lexikalisch
Die Optionen unterscheiden sich in der Konvertierung der Zahlen zum Vergleich |
| -o DATEI | Ausgabe in die Datei DATEI umlenken |
| -r | Umkehrung der Sortierung |
| -t SEP | Trennzeichen für die Felder definieren |
| -u | Unterdrückung von gleichen Zeilen |
| +POS1[-POS2] | Als Schlüsselfelder werden die Felder ab POS1 bis POS2 (oder bis zum Zeilenende) verwendet. |
sort +5 -t " " mai.log > hits.log
Dieser Kommandosequenz sortiert eine Datei nach Telefonbuchmethode und unter Vernachlässigung der Groß- und Kleinschreibung.
sort -fd telefon.buch | less
comm [OPTIONEN] DATEI1 DATEI2
comm gibt drei Spalten aus. In den ersten beiden Spalten stehen die Zeilen aus DATEI1 und DATEI2, die nicht in der jeweiligen anderen Datei vorkommen. In der dritten Zeile werden die gleichen Zeilen ausgegeben.
uniq [OPTIONEN] [INPUT [OUTPUT]]
| Optionen | |
| -c | Gibt an, wie oft die Zeile vorkommt |
| -i | Ignoriert Groß- und Kleinschreibung |
| -d | Gibt nur die doppelten Zeilen aus |
| -u | Gibt nur die nicht doppelten Zeilen aus |
cut -f 7 -d " " mai.log | sort | uniq -c | less
cut [OPTIONEN] [DATEILISTE]}
| Optionen | |
| -b BYTES | Zeige die angegebenen BYTES an. |
| -f NR | Zeige das Feld (die Spalte) Nummer NR (field) |
| -d ZEICHEN | ZEICHEN ist der Spaltentrenner (delimiter) |
| -s | Zeilen ohne Trennzeichen (delimiter) werden nicht ausgegeben |
Das Tabulatorzeichen ist als Trennzeichen voreingestellt. Das Trennzeichen kann ein Leerzeichen oder ein anderes Sonderzeichen sein. Dann sollte es in Anführungsstriche gesetzt (oder allgemeiner maskiert) werden.
cut -f 1 -d : /etc/passwd
Gibt die ersten 10 Zeichen jeder Zeile aus.
ls -l | cut -b -10
join [OPTIONEN] DATEI1 DATEI2
| Optionen | |
| -j FIELD | Vergleichsfeld aus DATEI1 und DATEI2 angeben |
| -j1 FIELD | Vergleichsfeld aus DATEI1 angeben |
| -j2 FIELD | Vergleichsfeld aus DATEI2 angeben |
| -t CHAR | Das Zeichen CHAR ist Feldtrennzeichen |
| -i | Ignoriert Groß- und Kleinschreibung |
join -j1 2 -j2 3 t1.txt t2.txt
paste [OPTIONEN] [DATEILISTE]
paste ohne Angabe von Dateien funktioniert wie cat (siehe 4.5.2). Ein - in der Dateiliste führt zu einem Lesen von der Standardeingabe.
paste eignet sich zum Zusammenführen von Daten aus mehreren Dateien.
| Optionen | |
| -d ZEICHEN | ZEICHEN ist das Spaltentrennzeichen |
| -s | Verknüpt die Zeilen einer Datei zu einer einzigen langen Zeile |
paste -d ; sonnenwind.dat magnetfeld.dat teilchen.dat > new.dat
Diese Kommandosequenz liest von der Standardeingabe und schreibt die Eingaben mit einem + getrennt in eine Zeile in die Datei punkte.dat.
paste -d + -s > punkte.dat
grep [OPTIONS] MUSTER [DATEILISTE]
| Optionen | |
| -G | Interpretiert das MUSTER als regulären Ausdruck; Standarteinstellung. Nicht zusammen mit -F und -E verwenden |
| -E | Interpretiert das MUSTER als erweiterten regulären Ausdruck. Nicht zusammen mit -F und -G verwenden |
| -F | Interpretiert das MUSTER als einfache Zeichenkette. Nicht zusammen mit -F und -E verwenden |
| -c | Zeigt nur die Zeilennummern der gefundenen Zeilen an |
| -n | Zeigt zusätzlich zur Zeile auch die Zeilennummer an |
| -v | Zeigt die Zeilen an, die nicht dem MUSTER entsprechen |
| -f DATEINAME | Die Liste der zu bearbeitenden Dateien |
| -h | Unterdrückt die Ausgabe des Dateinamens bei Verwendung einer Dateiliste. |
| -i | Unterscheidet bei der Suche nicht nach Groß- und Kleinschreibung |
| -w | MUSTER wird als ganzes Wort und nicht als Teil des Wortes betrachtet |
| -l | Zeigt den Namen der Datei an, wenn die Zeile darin gefunden wurde |
| -s | Fehlermeldungen unterdrücken |
| -r | Durchsucht auch die Unterverzeichnisse |
grep Bruno kuno.txt
Durchsucht alle Dateien im Verzeichnis nach der Zeichenkette `midnight' ohne Berücksichtigung der Groß- und Kleinschreibung und gibt die Namen der Dateien aus, die die Zeichenkette enthalten.
grep -il midnight *
tr [OPTIONEN] ZEICHENKETTE1 [ZEICHENKETTE2]
| Optionen | |
| -d | Löscht die angegebenen Zeichen |
| -s | Löscht doppelt vorkommende Zeichen |
cat stundenplan.txt | tr m M > stundenplan.neu
Das folgende Kommando löscht die Zeichen `m' und `y'.
cat etwas.txt | tr -d my
Doppelt vorkommende Zeichen werden mit dem Schalter -s gelöscht.
tr -s le < harry.txt
Dabei wird dann aus der `Allee' ganz schnell `Ale'.
Um den einfachen ROT13 Verschlüsselungsalgorithmus zu verwenden, reicht die folgende Sequenz.
cat harry.txt | tr '[A-M][N-Z][a-m][n-z]' '[N-Z][A-M][n-z][a-m]'
oder
cat harry.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
Dabei wird der erste Buchstabe mit dem 13. Buchstaben, der zweite mit dem 14. Buchstaben, u. s. w. getauscht. Wendet man ROT13 wieder auf verschlüsselten Text an, so erhält man den Originaltext.
Das Kommando expand liest aus Dateien oder von der Standardeingabe, wandelt die Tabzeichen in Leerzeichen und gibt das Ergebnis auf der Standardausgabe aus. Wird nichts anderes angegeben, dann wird ein Tabulator durch acht Leerzeichen ersetzt.
expand [OPTIONEN] [DATEILISTE]
| Optionen | |
| -TAB1[,TAB2[,...]]
-t TAB1[,TAB2[,...]] |
TABx ist die Anzahl der Leerzeichen, durch die das jeweilige Tabulatorzeichen ersetzt werden soll. |
| -i | Tabulatoren ohne vorhergehende Leerzeichen werden nicht konvertiert. |
Wird nur für das erste Tabulatorzeichen ein Wert angegeben, so gilt dieser Wert für alle Tabulatoren. Werden zwei oder mehr Werte eingegeben, so gelten Sie für die jeweiligen Tabulatoren. Tabulatoren, für die kein Wert angegeben wurde, werden durch einfache Leerzeichen ersetzt.
Die Gegenoperation können Sie mit dem Befehl unexpand durchführen, der Leerzeichen wieder versucht in Tabulatoren umzuwandeln.
expand -6,8 helloworld.java > helloworld.txt
sed [OPTIONEN] [KOMMANDO] [DATEILISTE] sed [OPTIONEN] [-f SCRIPTFILE] [DATEILISTE]
Es werden grundsätzlich zwei Möglichkeiten genutzt um sed aufzurufen. Im ersten Fall wird das KOMMANDO auf der Befehlszeile eingegeben und auf die angegebenen Dateien angewendet. Im zweiten Fall stehen die Anweisungen in einer externen Skriptdatei. Diese wird abgearbeitet und die darin enthaltenen Kommandos auf den Inhalt der Dateien angewendetet. Sollte keine Datei angegeben sein, so liest sed von der Standardeingabe. Dabei wird jede gelesene Zeile mit den sed-Kommandos bearbeitet und in einen Puffer geschrieben. Dessen Inhalt wird dann zum Schluß auf der Standardausgabe ausgegeben.
| Optionen | |
| -V | Versionsnummer |
| -h | Hife |
| -e SCRIPT | Zusätzliche Skriptanweisung zur Bearbeitung |
| -f SCRIPTFILE | Datei, die die Skriptbefehle enthält |
| -n | Ausgabe erfolgt nur bei Benutzung des `p' Kommandos |
Jeder Befehl kann durch einen Bereich, für den er gültig ist, eingeschränkt werden. Die Bereichsangabe erfolgt im Format
VON
oder
VON, BIS.
Dabei können die Werte für VON und BIS
sed s/SUCHEN/ERSETZEN/ sed s/SUCHEN/ERSETZEN/g sed s/SUCHEN/ERSETZEN/p sed -n s/SUCHEN/ERSETZEN/gp sed s3/SUCHEN/ERSETZEN/Die Zeichenkette zwischen dem ersten und dem zweiten Schrägstrich gibt das Suchmuster an, während die Zeichenkette zwischen dem zweiten und dem dritten Schrägstrich den Ersetzungstext enthält.
Um das Suchmuster effektiver zu gestalten, können reguläre Ausdrücke7.1 verwendet werden. Diese bestehen normalerweise aus zwei Komponenten: Die Angabe, nach welchem Zeichen gesucht wird, und die Angabe, wie oft das Zeichen auftreten darf.
Die hinten angestellten Optionen verändern die Arbeitsweise von sed. Dabei bewirkt g, daß alle Zeichenketten in der Zeile durch die neue Zeichenkette ersetzt werden (Sonst nur die erste Zeichenkette). Das p führt dazu, daß die Zeilen ausgegeben werden, in denen eine Ersetzung erfolgte. Sind beide Optionen gesetzt, so wird bei einer mehrfachen Ersetzung in einer Zeile die Zeile auch mehrfach angezeigt. Verhindert wird dies durch den Schalter -n. Das s3 sorgt dafür, daß das dritte Vorkommen von SUCHEN in der Zeile ersetzt wird.
/SUCHEN/p
/SUCHEN/d
/SUCHEN/r DATEINAME
/SUCHEN/w DATEINAME
sed 's/UNIX/Linux/g' einleitung.tex
Ersetzt jedes Wort ``paragraph'' durch das Wort ``subsubsection'' in der Datei linux.tex und schreibt das Ergebnis in die Datei linuxneu.tex.
sed 's/paragraph/subsubsection/g' linux.tex > linuxneu.tex
Einen interessanten Effekt hat das Zeichen '&' in der Ersetzungszeichenkette. Die gesuchte Zeichenkette wird nicht ersetzt, sondern die Ersetzungszeichenkette wird hinten angefügt.
sed 's/</</g' index.html
Damit die schließende spitze Klammer ersetzt wird, muß das kaufmännische Und auskommentiert werden.
sed 's/</\</g' index.html
Ersetzt alle Zeichenfolgen ``man'' durch ``frau'' in den Zeilen 1 bis 3 in der Datei einleitung.tex. Dabei werden nur die Zeilen ausgegeben, in denen die Änderung erfolgte.
sed -n '1,3s/man/frau/p' einleitung.tex
Gibt alle Zeilen aus, die entweder ``man'' oder ``frau'' enthalten.
sed -n -e '/man/p' -e '/frau/p' einleitung.tex
Das folgende Kommando löscht alle Zeilen, die die Zahl `0' enthalten.
sed '/0/d' einleitung.tex
Alle Zeilen, die die Zeichenkette ``include'' enthalten, werden durch den Inhalt der Datei include.txt ersetzt.
sed '/include/r include.txt' einleitung.txt
Alle Zeilen, die die Zeichenkette ``section'' enthalten, werden in die Datei inhalt.txt geschrieben.
sed '/section/w inhalt.txt' einleitung.tex
diff [OPTIONEN] DATEI1 DATEI2
| Optionen | |
| -b | Betrachtet mehrfache Leerzeichen und Leerzeilen als einfache Leerzeichen bzw. Leerzeilen |
| -c | Ausgabe als 'Context Diffs' |
| -e | Ausgabe als Skript für den Befehl ed |
| -r | Vergleicht den Inhalt zweier Verzeichnisbäume |
| -u | Ausgabe als 'Unified Diffs' |
| -w | Ignoriert Leerzeichen und Leerzeilen ganz |
Die Ausgabe von diff besteht aus sogenannten 'hunks', was man frei als 'Stücke' übersetzen kann. Ein Hunk besteht aus bis zu vier Teilen: einer Informationszeile, dem alten Text, einer Trennzeile und dem neuen Text. Beim Einfügen und Löschen von Zeilen fehlt die alte oder neue Textinformation und die dann überflüssige Trennzeile fällt auch weg.
In der Informationszeile steht, an welcher Stelle in der jeweiligen Datei die Änderung stattgefunden hat und welche Operationen nötig sind um die erste Eingabedatei DATEI1 in die zweite Eingabedatei DATEI2 zu verwandeln. Dabei stehen die Buchstaben 'a', 'c' und 'd' für 'add' (Zeilen hinzufügen), 'change' (Zeilen verändern) und 'delete' (Zeilen löschen). Die Zahlen bzw. Zahlenbereiche links und rechts von den Buchstaben geben die betroffenen Zeilen an.
Alle Hunks zusammengenommen bilden den Patch, der die erste Datei in die zweite Datei verwandelt. Es geht auch umgekehrt, da Patches dieser Art symmetrisch sind und rückwärts angewendet werden können (`reverse patching´);
diff -b div.pl.old div.pl
Soll die Ausgabe für den Editor ed verarbeitbar sein, dann muß das Kommando lauten:
diff -be div.pl.old div.pl
Die Anwendung von diff fürs Patchen von Programmen beschreibt der Abschnitt 7.7.9.
patch [OPTIONEN] [ORIGINALDATEI [PATCHDATEI]]
| Optionen | |
| -c | Interpretiere den Patch als Context Diff |
| -e | Interpretiere den Patch als ed-Skript |
| -u | Interpretiere den Patch als Unified Diff |
Als Beispiel schauen wird uns zwei Versionen eines Perl-Skripts an.
1: #!/usr/bin/perl 2: 3: # Dieses Programm teilt zwei Zahlen durcheinander 4: 5: # Eingabe 6: print "Zähler: "; 7: $z = <STDIN>; 8: chomp($z); 9: print "Nenner: "; 10: $n = <STDIN>; 11: chomp($n); 12: 13: # Verarbeitung 14: $erg = int($z / $n); 15: $rest = "Rest ". ($z % $n); 16: 17: # Ausgabe 18: print "$z / $n = $erg $rest\n"; 19: 20: exit(0);
1: #!/usr/bin/perl
2:
3: # Dieses Programm teilt zwei Zahlen durcheinander
4: # Version 2
5:
6: # Eingabe
7: print "Zähler: ";
8: $z = <STDIN>;
9: chomp($z);
10: print "Nenner: ";
11: $n = <STDIN>;
12: chomp($n);
13:
14: # Verarbeitung
15: # Verarbeitung nur, wenn der Nenner ungleich Null ist
16: if ($n != 0) {
17: $erg = int($z / $n);
18: $rest = "Rest ". ($z % $n);
19: } else {
20: $erg = "unendlich";
21: $rest = "";
22: }
23:
24: # Ausgabe
25: print "$z / $n = $erg $rest\n";
26:
27: exit(0);
diff liefert uns nun die Unterschiede der beiden Skripte.
tapico@defiant:~/perl > diff div.pl div2.pl
3a4
> # Version 2
14,15c15,22
< $erg = int($z / $n);
< $rest = "Rest ". ($z % $n);
---
> # Verarbeitung nur, wenn der Nenner ungleich Null ist
> if ($n != 0) {
> $erg = int($z / $n);
> $rest = "Rest ". ($z % $n);
> } else {
> $erg = "unendlich";
> $rest = "";
> }
Manuell können mit diesen Informationen nun die Änderungen an der Datei div.pl durchgeführt werden.
Da dies bei größeren Projekten doch problematisch ist, kann auch ein Skript für den Editor ed erstellt werden.
tapico@defiant:~/perl > diff -e div.pl div2.pl
14,15c
# Verarbeitung nur, wenn der Nenner ungleich Null ist
if ($n != 0) {
$erg = int($z / $n);
$rest = "Rest ". ($z % $n);
} else {
$erg = "unendlich";
$rest = "";
}
.
3a
# Version 2
.
Wenn Sie die Ausgabe als Datei gespeichert haben, kann nun jemand anders mit dem Editor ed die alte Datei (div.pl) mit dem Patch (hier die Datei div.patch) bearbeiten und daraus die neue Datei (div2.pl) erstellen.
barclay@enterprise:~/projekt > (cat div.patch; echo w div2.pl) | ed - div.pl
Dies setzt aber voraus, daß an der alten Datei nichts geändert worden ist. Daher gibt es zwei andere Formate, die mehr Sicherheit beim Patchen versprechen.
tapico@defiant:~/perl > diff -c div.pl div2.pl
*** div.pl Sun Sep 23 14:36:48 2001
--- div2.pl Sun Sep 23 14:36:12 2001
***************
*** 1,6 ****
--- 1,7 ----
#!/usr/bin/perl
# Dieses Programm teilt zwei Zahlen durcheinander
+ # Version 2
# Eingabe
print "Zähler: ";
***************
*** 11,18 ****
chomp($n);
# Verarbeitung
! $erg = int($z / $n);
! $rest = "Rest ". ($z % $n);
# Ausgabe
print "$z / $n = $erg $rest\n";
--- 12,25 ----
chomp($n);
# Verarbeitung
! # Verarbeitung nur, wenn der Nenner ungleich Null ist
! if ($n != 0) {
! $erg = int($z / $n);
! $rest = "Rest ". ($z % $n);
! } else {
! $erg = "unendlich";
! $rest = "";
! }
# Ausgabe
print "$z / $n = $erg $rest\n";
tapico@defiant:~/perl > diff -u div.pl div2.pl
--- div.pl Sun Sep 23 14:36:48 2001
+++ div2.pl Sun Sep 23 14:36:12 2001
@@ -1,6 +1,7 @@
#!/usr/bin/perl
# Dieses Programm teilt zwei Zahlen durcheinander
+# Version 2
# Eingabe
print "Zähler: ";
@@ -11,8 +12,14 @@
chomp($n);
# Verarbeitung
-$erg = int($z / $n);
-$rest = "Rest ". ($z % $n);
+# Verarbeitung nur, wenn der Nenner ungleich Null ist
+if ($n != 0) {
+ $erg = int($z / $n);
+ $rest = "Rest ". ($z % $n);
+} else {
+ $erg = "unendlich";
+ $rest = "";
+}
# Ausgabe
print "$z / $n = $erg $rest\n";
Diese beiden Formate, wie auch die anderen, können mit dem Befehl patch die Veränderung durchführen.
barclay@enterprise:~/projekt > patch < div.c.patchDie im Patch angegebene Datei (div.pl) ist nun verändert worden.
Notizen:
Notizen:
Textverarbeitung und Textfilter
Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.
rm -rf * aus.
~/passwd.sort.
~/passwd.reverse.
~/passwd.sort und ~/passwd.reverse.
Notizen:
Der Superuser root besitzt die UID 0 (User IDentification) und wird wie alle anderen Benutzer in der Datei /etc/passwd definiert. Da das System die Benutzer nicht nach ihrem Namen identifiziert, sondern nach ihrer UID, kann der Superuser auch einen anderen Lognamen bekommen. Da Linux wie das Christentum nur einen Gott kennt, nämlich den Benutzer mit der UID 0, ist es ratsam für diesen Benutzer weitere Namen anzulegen. Wenn Sie nämlich das Paßwort für root vergessen, wünsche ich Ihnen viel Spaß ;-).
Um die Sicherheit ihres Systems zu erhöhen, sollten Sie mehrere Benutzer anlegen, die spezielle Aufgaben erledigen können. Diese Benutzer erhalten spezielle eingeschränkte Rechte für die verschiedenen administrativen Aufgaben. Wie das geht, wird in Abschnitt 8.3.6 beschrieben.
Für die alltäglichen Aufgaben sollten Sie sich nicht als root einloggen, da dies ein nicht zu unterschätzendes Risiko darstellt. Im normalen Betrieb sollten Sie als einfacher Benutzer arbeiten. Nur für administrative Aufgaben loggen Sie sich als root ein und erledigen die Aufgaben, um danach als einfacher Benutzer weiterzuarbeiten. Um diesen zeitaufwendigen Prozeß des Aus- und Einloggens abzukürzen, wurde der Befehl su entwickelt.
su [OPTIONEN] [BENUTZER]
Die einfache Eingabe von su ohne einen Benutzernamen bewirkt einen Wechsel zur Superuseridentität nach der Eingabe des Superuserkennworts.
Der Wechsel der Identität wird durch das Starten einer neuen Shell realisiert. Im Gegensatz zum Einloggen, bei dem auch eine Shell gestartet wird, bleibt beim Wechsel der Identität mit su die Umgebung des alten Benutzers erhalten. Nur die Umgebungsvariablen HOME und SHELL werden auf die entsprechenden Werte des neuen Benutzers geändert.
Jeder Benutzer kann seine Identität wechseln, solange er das Kennwort des neuen Benutzers kennt. Nur der Superuser kann seine Identität wechseln ohne ein Kennwort eingeben zu müssen.
Mit dem Befehl exit oder drücken der Tastenkombination <STRG>+<D> kehren Sie zur alten Identität zurück.
| Optionen | |
| -, -l | Die Konfigurationsdateien des Benutzers werden ausgeführt |
| -c KOMMANDO | Führt das angegebene Kommando unter dem neuen Benutzer aus |
su
su tapico
mit anschließender Kennworteingabe läßt den Benutzer nun unter der UID des Benutzers tapico arbeiten. Der Superuser benötigt keine Kennworteingabe um die Identität zu wechseln.
su - tapico
führt im Gegensatz zum obigen Beispiel dazu, daß die Konfigurationsdateien von tapico mit ausgeführt werden. Daher ist z. B. das Heimatverzeichnis von tapico jetzt das aktuelle Arbeitsverzeichnis.
Alle Informationen über das Benutzerkonto werden in der Datei /etc/passwd gespeichert. Es enthält u. a. den Loginnamen, die UID, das verschlüsselte Kennwort8.1 und den vollen Namen. Ein Übersicht über den Inhalt gibt Tabelle 8.1.
|
Die Datei /etc/passwd gehört root mit dem Recht rw-. Alle anderen eingeschlossen die Gruppe haben nur das Lese-Recht.
Die Datei könnte z. B. folgende Einträge enthalten:
root:x:0:0:Herr und Meister:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/bash daemon:x:2:2:daemon:/sbin:/bin/bash lp:x:4:7:lp daemon:/var/spool/lpd:/bin/bash news:x:9:13:News system:/etc/news:/bin/bash uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash at:x:25:25::/var/spool/atjobs:/bin/bash wwwrun:x:30:65534:Daemon user for apache:/tmp:/bin/bash squid:x:31:65534:WWW proxy squid:/var/squid:/bin/bash ftp:x:40:2:ftp account:/usr/local/ftp:/bin/bash firewall:x:41:31:firewall account:/tmp:/bin/false named:x:44:44:Nameserver Daemon:/var/named:/bin/bash tapico:x:501:100:Thomas Prizzi:/home/tapico:/bin/bash luke:x:502:100:Lukas Himmelsgeher:/home/luke:/bin/bash lori:x:503:100:Lori Kalmar:/home/lori:/bin/bash grayson:*:504:100:Grayson Death Carlyle:/home/grayson:/bin/bash nobody:x:65534:65534:nobody:/tmp:/bin/bash
Die Felder werden durch Doppelpunkte (:) voneinander getrennt. Daher kann auch ein Feld, wie bei dem Benutzer at zu sehen, leer bleiben. Dieses Format wird bei fast allen UNIX-Systemen verwendet.
Wenn Sie viele Benutzer in ihrem System einrichten wollen, ist es wichtig sich eine Strategie zur Namensvergabe zu überlegen. In den meisten Fällen wird es eine Kombination aus Vorname und Nachname sein. So kann der Loginname der Benutzerin Angela Mahnke z. B. lauten: mahnke, amahnke, aMahnke, A_Mahnke oder angelam. Beim Benutzer Ole Vanhoefer wären es z. B.: vanhoefe, ovanhoef, oVanhoef, o_Vanhoe oder olevan.
Um einen Benutzer am Einloggen zu hindern, kann der Superuser hier ein Asterisk (*) einsetzen. Um einen Benutzer nur vorübergehend auszusperren, weil er im Urlaub ist oder den Superuser geärgert hat, ist es üblich an den Anfang des verschlüsselten Kennworts ein Asterisk zu setzen. Dabei ist darauf zu achten, daß die restlichen Zeichen des verschlüsselten Kennworts nicht verändert werden.
Ein leeres Feld an dieser Stelle bewirkt, daß Sie sich unter dem Benutzernamen ohne Eingabe eines Kennworts einloggen können. Solche Benutzerkonten sollten aber stark in ihren Rechten eingeschränkt werden, um nicht hier eine gewaltige Sicherheitslücke zu öffnen. Die Kennwortlänge beträgt bei den heutigen Distributionen zwischen fünf und acht Zeichen. Dies kann aber individuell konfiguriert werden.
Der Zahlenbereich kann den Typ eines Kontos schon einer bestimmten Gruppe zuordnen. UIDs unter 100 sind Systemkonten zugeordnet. Die UID 0 ist dem Superuser root vorbehalten. Normale Benutzer bekommen eine UID größer als 100 zugewiesen. Dabei ist die Grenze von Distribution zu Distribution unterschiedlich. Bei S.u.S.E. liegt die Grenze bei 500. In der Datei /etc/login.defs (Abschnitt 8.2.6) kann der Wertebereich der UID mit den Parametern UID_MIN und UID_MAX genau festgelegt werden.
Wie auch bei der UID gibt die GID durch ihren Zahlenbereich schon Aufschluß über die Verwendung. Der Bereich 0 bis 49 ist den Systemgruppen vorbehalten. Die Nummern ab 50 bekommen die Benutzergruppen. Auch dies ist abhängig von der Distribution und wird ebenfalls in der Datei /etc/login.defs (Abschnitt 8.2.6) festgelegt. Als Standardgruppe für Benutzer werden meistens die Gruppe group oder users angelegt. Diesen Gruppen werden die Benutzer beim Erstellen standardmäßig zugeordnet.
Der Eintrag kann über den Befehl chsh (Abschnitt 4.1.1) geändert werden.
|
Neben diesen in der Tabelle aufgeführten Systembenutzer gibt es solche wie mail, ftp, gopher, news, wwwroot u.s.w. Denken Sie daran. Ändern Sie nie die Einträge für diese Besitzer, denn das kann verheerende Folgen für ihr System haben.
Vielleicht ist Ihnen auch aufgefallen, daß die Accounts im Kennwortfeld ein Asterisk (*) stehen haben. Es ist also nicht möglich sich interaktiv als Systembenutzer einloggen.
Bei Verwendung des Befehls su können Sie die Fehlermeldung besser sehen.
ole@enterprise:~> su martin Password: This account is currently not available. ole@enterprise:~>
Es kann aber auch in Abhängikeit von der Distribution vorkommen, daß keine Fehlermeldung erscheint.
ole@enterprise:~> false; echo $? 1 ole@enterprise:~> true; echo $? 0
Obwohl es ungewöhnlich ist, können Sie auch diesen Befehl als Loginshell eintragen. Er verhindert ebenfalls erfolgreich das Einloggen.
Beim normalen Login-Prompt auf der Konsole bekommen Sie nichts davon mit, da der neue Login-Prompt vorher den Bildschirm löscht. Versuchen Sie sich dagegen mit dem Befehl su einzuloggen, können Sie die Fehlermeldung gut sehen.
ole@enterprise:~> su martin Password: Hallo Fremder, Du darfst Dich hier nicht einloggen. Gruß Root ole@enterprise:~>
Ohne die Datei /etc/nologin.txt ist die Fehlermeldung lange nicht so schön.
ole@enterprise:~> su martin Password: This account is currently not available. ole@enterprise:~>
passwd [BENUTZER]
Wenn ein Benutzer sein Kennwort ändern will, dann braucht er natürlich keinen Benutzernamen anzugeben. Er muß aber mit seinem alten Kennwort den Vorgang bestätigen und danach zweimal das neue Kennwort, was nicht auf dem Bildschirm angezeigt wird, eingeben. Dies soll eine Falscheingabe des neuen Kennworts durch Vertippen verhindern.
Die Richtlinien für die Kennwörter werden in der Datei /etc/login.defs (Abschnitt 8.2.6) festgelegt. Das kann die Mindestlänge des Kennworts, das Auslaufdatum des Kennworts und die Warnung davor sein. Außerdem finden Sie hier den Eintrag für das Verzeichnis der Mailboxen.
Bei der Kennwortvergabe ist darauf zu achten, daß gebräuchliche Worte aus Lexika (Brutal Force Attack) und Worte aus dem Umfeld der Person (scharf nachdenken) relativ leicht geknackt werden können. Die Kombination aus zwei Worten, Groß- und Kleinschreibung sowie Buchstaben und Zahlen, die mindestens eine Länge von sechs Zeichen aufweisen sollten, sind ein idealer Schutz.
chpasswd [OPTIONEN]
Dabei liest chpasswd eine Datei von der Standardeingabe. Die Datei enthält pro Zeile den Benutzernamen und das Kennwort getrennt durch einen Doppelpunkt (tapico:zorro67). Das Kennwort steht dabei im Klartext. Ist das Kennwort bereits verschlüsselt, so muß der Schalter -e mitgegeben werden.
cat newpass.txt | chpasswd
#') und leere Zeilen ignoriert.
Hier ein Beispiel für die /etc/login.defs. Wie in guten Installationen üblich ergeben sich die Bedeutungen der Einträge aus den vorangestellten Kommentaren.
# Delay in seconds before being allowed another attempt after a login failure # FAIL_DELAY 3 # Enable logging and display of /var/log/faillog login failure info. # FAILLOG_ENAB yes # Enable display of unknown usernames when login failures are recorded. # LOG_UNKFAIL_ENAB no # Enable logging and display of /var/log/lastlog login time info. # LASTLOG_ENAB yes # Enable additional checks upon password changes. # OBSCURE_CHECKS_ENAB yes # If defined, ":" delimited list of "message of the day" files to # be displayed upon login. # MOTD_FILE /etc/motd #MOTD_FILE /etc/motd:/usr/lib/news/news-motd # If defined, file which maps tty line to TERM environment parameter. # Each line of the file is in a format something like "vt100 tty01". # TTYTYPE_FILE /etc/ttytype # If defined, login failures will be logged here in a utmp format. # last, when invoked as lastb, will read /var/log/btmp, so... # #FTMP_FILE /var/log/btmp # If defined, file which inhibits all the usual chatter during the login # sequence. If a full pathname, then hushed mode will be enabled if the # user's name or shell are found in the file. If not a full pathname, then # hushed mode will be enabled if the file exists in the user's home directory. # #HUSHLOGIN_FILE .hushlogin HUSHLOGIN_FILE /etc/hushlogins # The default PATH settings. # ENV_PATH /usr/local/bin:/usr/bin:/bin # The default PATH settings for root: # ENV_ROOTPATH /sbin:/bin:/usr/sbin:/usr/bin # Terminal permissions # # TTYGROUP Login tty will be assigned this group ownership. # TTYPERM Login tty will be set to this permission. # # If you have a "write" program which is "setgid" to a special group # which owns the terminals, define TTYGROUP to the group number and # TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign # TTYPERM to either 622 or 600. # TTYGROUP tty TTYPERM 0620 # Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # If compiled with cracklib support, where are the dictionaries # CRACKLIB_DICTPATH /usr/lib/cracklib_dict # Min/max values for automatic uid selection in useradd # UID_MIN 100 UID_MAX 60000 # Min/max values for automatic gid selection in groupadd # GID_MIN 100 GID_MAX 60000 # Max number of login retries if password is bad # LOGIN_RETRIES 3 # Max time in seconds for login # LOGIN_TIMEOUT 60 # Maximum number of attempts to change password if rejected (too easy) # PASS_CHANGE_TRIES 3 # Warn about weak passwords (but still allow them) if you are root. # PASS_ALWAYS_WARN yes # Number of significant characters in the password for crypt(). # Default is 8, don't change unless your crypt() is better. # Ignored if the "md5" option is given to the pam_pwcheck module. # PASS_MAX_LEN 8 # Require password before chfn/chsh can make any changes. # CHFN_AUTH yes # Which fields may be changed by regular users using chfn - use # any combination of letters "frwh" (full name, room number, work # phone, home phone). If not defined, no changes are allowed. # For backward compatibility, "yes" = "rwh" and "no" = "frwh". # CHFN_RESTRICT rwh # Should login be allowed if we can't cd to the home directory? # Default is yes. # DEFAULT_HOME yes
Es gibt mehrere Möglichkeiten einen Benutzer anzulegen. Sie werden hier die direkte Methode und den Befehl useradd kennenlernen. Viele Distributionen bieten weitere, meist komfortablere Tools an.
Um jetzt einen neuen Benutzer anzulegen, müssen Sie nur eine neue Zeile mit den entsprechenden Informationen hinzufügen. Denken Sie bitte daran, daß der Editor die Datei in reinem ASCII-Code (z. B. vi oder joe) abspeichert. Sie tragen ins erste Feld den Lognamen des neuen Benutzers ein. Das zweite Feld mit dem Kennwort lassen Sie leer, da es hier in verschlüsselter Form stehen muß. Für das dritte Feld müssen Sie sich erst eine Übersicht über die vorhandenen UIDs verschaffen, damit Sie dann die nächste freie UID hier eintragen können. Ein solcher Eintrag könnte dann lauten:
tapico::523:100:Thomas Prizzi:/home/tapico:/bin/bash
Nach dem Eintrag und dem Abspeichern der Datei müssen Sie den Befehl passwd verwenden um das Kennwort des Benutzers festzulegen.
Jetzt sollte das Heimatverzeichnis des Benutzers angelegt und die Konfigurationsdateien kopiert werden. Auf diesen Vorgang gehen wir später genauer ein. Denken Sie daran den Benutzer als neuen Besitzer und seine Gruppe als Gruppe für das Heimatverzeichnis einzutragen. Dazu können Sie das chown-Kommando (Abschnitt 9.2.1) benutzen.
useradd [OPTIONEN] [BENUTZER]
| Optionen | |
| -D | Zeigt die Standardeinstellung des Systems |
| -u UID | Erlaubt eine UID vorzugeben |
| -g GID | Erlaubt eine GID vorzugeben |
| -o | Erlaubt die mehrfache Verwendung von UIDs |
| -m | Das Heimatverzeichnis wird automatisch erstellt |
| -d VERZEICHNIS | Angegebenes Verzeichnis als Heimatverzeichnis verwenden |
| -k VERZEICHNIS | Angegebenes Verzeichnis als Skeleton-Verzeichnis verwenden |
| -c KOMMENTAR | Inhalt des Kommentarfeldes |
| -s SHELL | Name der LOGIN-Shell |
| -e MM/DD/YY | Verfallsdatum des Kontos |
| -f TAGE | Zeitraum zwischen Auslaufen des Paßworts und schließen des Kontos |
Im Normalfall benutzt useradd die nächste freie UID und weist dem neuen Benutzer die aktuelle Shell als Login-Kommando des Kontos zu. Ein Heimatverzeichns wird zwar in der /etc/passwd eingetragen, aber nicht erstellt. Erst der Schalter -m bewirkt das Anlegen des Heimatverzeichnis. Dies ist normalerweise /home/BENUTZERNAME. Durch den Schalter -d kann aber auch ein anderes Verzeichnis angegeben werden. Wenn das Heimatverzeichnis angelegt wird, werden automatisch die Dateien aus dem Skeleton-Verzeichnis (meistens /etc/skel) in das neue Heimatverzeichnis kopiert. Der Befehl useradd sorgt auch dafür, daß für alle angelegten Verzeichnisse und Dateien die richtigen Besitzer, Gruppen und Rechte eingetragen werden.
Mit dem Schalter -e MM/DD/YY kann ein Verfallsdatum für das Konto angegeben werden. Nach dem Auslaufen des Kennworts kann ein Konto auch gesperrt werden. Der Schalter -f TAGE gibt dabei an, wann dies erfolgen soll. Eine Null steht dabei für sofort, während -1 dafür steht, daß das Konto nicht gesperrt wird, wenn das Kennwort abgelaufen ist.
root@defiant:/home > useradd -D GROUP=100 HOME=/home INACTIVE=0 EXPIRE=10000 SHELL=/bin/bash SKEL=/etc/skel
useradd -m luke
legt den Benutzer luke zusammen mit seinem Heimatverzeichnis an.
usermod [OPTIONEN] BENUTZER
Der Benutzername kann nicht geändert werden, wenn der Benutzer gerade eingeloggt ist. Wird der Benutzername geändert, dann sollten Sie auch das Heimatverzeichnis entsprechend umbenennen. Dies ist allerdings nicht notwendig, denn solange das Heimatverzeichnis existiert, kann sich der Benutzer einloggen.
| Optionen | |
| -l BENUTZERNAME | Neuer Benutzername |
| -u UID | Neue UID |
| -g GID | Neue GID |
-c "KOMMENTAR" |
Neuer Kommentareintrag |
| -d VERZEICHNIS | Neues Heimatverzeichnis |
| -s SHELL | Neue Login-Shell |
| -o | Erlaubt mehrfache Nutzung von UIDs |
| -m | Neues Heimatverzeichnis wird angelegt und alte Dateien rüberkopiert |
Wird die UID des Benutzers geändert, dann erhalten auch alle Dateien des Benutzers in seinem Heimatverzeichnis die neue UID zugeordnet. Dateien außerhalb des Heimatverzeichnisses werden nicht geändert. Auch die crontab- und at-Jobs müssen manuell geändert werden.
Ein leichterer Weg einen Benutzer zu löschen ist der Befehl userdel.
userdel [OPTIONEN] BENUTZER
| Optionen | |
| -r | Löscht auch das Heimatverzeichnis des Benutzers |
Die Ausführung des Befehls ohne Optionen löscht den Benutzer aus der Datei /etc/passwd und aus anderen Systemdateien, enfernt aber nicht sein Heimatverzeichnis. Dies hingegen bewirkt der Schalter -r. Dateien des Benutzers, die sich außerhalb seines Heimatverzeichnis befinden, werden nicht gelöscht.
Die Lösung liegt auf der Hand. Dem zweiten Superuser wird auch die UID 0 zugewiesen. D. h. es gibt zwei Benutzer mit der gleichen UID. Eigentlich gibt es nur einen Benutzer, der sich aber unter zwei verschiedenen Namen einloggen kann. Eigentlich dürfen keine zwei Benutzer die gleiche UID verwenden. Wenn Sie mit useradd den zweiten Superuser einrichten wollen, dann wird dies mit einer Fehlermeldung quittiert. Erst die Verwendung des Schalters -o ermöglicht eine doppelte Vergabe von UIDs.
root@defiant:~> useradd -u 0 -g 0 -m -c "2. Superuser" admin useradd: uid 0 is not unique root@defiant:~> useradd -u 0 -g 0 -o -m -c "2. Superuser" admin root@defiant:~> passwd admin New password: Re-enter new password: Password changed
In Ihrer Firma sollten zumindest drei Superuserkonten vorhanden sein. root oder das umbenannte Konto für Sie, eins für Ihren Stellvertreter und eins, dessen Daten in einem versiegelten Umschlag im Tresor aufbewahrt werden. Denn wenn Ihrem Stellvertreter etwas zustößt, während Sie gerade in Ihrem Urlaub das australische Outback erforschen, ist das Firmennetz ohne zugänglichem Superuserkonto nur noch schwer administrierbar.
Wenn ein Benutzer auf eine Datei zugreifen will, dann prüft das Betriebssystem, ob er der Besitzer der Datei ist. Ist er es nicht, dann prüft es, ob er der Datei zugewiesenen Gruppe angehört. Trifft das zu, dann erhält er den hier definierten Zugang zur Datei. Gehört der Benutzer auch nicht zur Gruppe, dann werden ihm nur die Privilegien eingeräumt, die auch alle anderen bekommen.
Die Benutzer können Mitglieder vieler Gruppen sein. Es ist aber nur immer eine Gruppe mit dem Benutzer assoziiert. Diese Gruppe ist in der Datei /etc/passwd festgelegt.
Um eine Gruppe einzurichten kann entweder die Datei /etc/group (Abschnitt 8.4.1) um einen Eintrag erweitert oder der Befehl groupadd (Abschnitt 8.4.7) verwendet werden. Änderungen der Gruppeneigenschaften werden entweder in der Konfigurationsdatei selber ausgeführt oder über den Befehl groupmod (Abschnitt 8.4.9). Das Entfernen der Gruppe erfolgt entweder wieder über die Konfigurationsdatei oder über den Befehl groupdel (Abschnitt 8.4.11). Bei der Verwendung des Shadow-Paßwort-Systems (Abschnitt 8.5) sollten möglichst nur diese Tools verwendet werden.
root:*:0:root bin:*:1:root,bin,daemon daemon:*:2: sys:*:3: tty:*:5: wwwadmin:*:8: mail:*:12: news:*:13:news uucp:*:14:uucp,fax,root,ole shadow:*:15:root dialout:*:16:root,ole,tapico,grayson at:*:25:at firewall:*:31: public:*:32: named:*:44:named users:*:100: greydeath:*:101:root,grayson nogroup:*:65534:root
Die durch Doppelpunkte abgetrennten Felder sind von links nach rechts Gruppenname, Gruppenkennwort, GID und die Mitgliederliste.
*).
|
id [OPTIONEN] [BENUTZERNAME]
| Optionen | |
| -g | Gibt nur die Haupt-GID aus |
| -G | Zeigt nur die GIDs aller Gruppen |
| -n | Gibt die Namen aus (für -u, -g und -G) |
| -r | Gibt die reale ID aus anstatt der effektiven ID (für -u, -g und -G) |
| -u | Gibt nur die UID aus |
Der Befehl zeigt die UID und die mit dem Benutzer assoziierte GID an. Zusätzlich werden auch die Gruppen angezeigt, in denen der Benutzer Mitglied ist.
tapico@defiant:~ > id uid=501(tapico) gid=100(users) Gruppen=100(users),101(greydeath) tapico@defiant:~ > groups users greydeath defiant
id -Gn und zeigt die Namen der Gruppen an, in denen der Benutzer Mitglied ist.
groups [BENUTZER]
newgrp [NEUEGRUPPE]
Die Angabe des Befehls ohne einen Gruppennamen, läßt die GID zur in der /etc/passwd eingetragenen Gruppe zurückwechseln.
tapico@defiant:~ > id uid=501(tapico) gid=100(users) Gruppen=100(users),101(greydeath),102(defiant) tapico@defiant:~ > newgrp defiant tapico@defiant:~ > id uid=501(tapico) gid=102(defiant) Gruppen=100(users),101(greydeath),102(defiant)
groupadd [OPTIONEN] GRUPPENNAME
Die Gruppe wird mit einem leeren Gruppenkennwort eingerichtet und enthält noch keine Mitglieder. Die können mit dem Befehl gpasswd hinzugefügt werden.
| Optionen | |
| -g GID | GID für die neue Gruppe vorgeben |
| -o | Mehrfache Nutzung der GID zulassen |
| -r | Systemgruppen einrichten (nicht S.u.S.E) |
gpasswd [OPTIONEN] GRUPPE
| Optionen | |
| -R | Verhindert die Benutzung des Befehls newgrp für diese Gruppe |
| -a BENUTZER | Fügt neues Mitglied hinzu |
| -d BENUTZER | Entfernt eine Mitglied aus der Gruppe |
| -A BENUTZER | Legt das Mitglied als Gruppenadministrator fest |
| -r | Entfernt das Kennwort der Gruppe |
root@defiant:/ > groupadd defiant root@defiant:/ > gpasswd -a tapico defiant Adding user tapico to group defiant root@defiant:/ > id tapico uid=501(tapico) gid=100(users) Gruppen=100(users),101(greydeath),102(defiant) root@defiant:/ > grep defiant /etc/group defiant:x:102:tapico
groupmod [OPTIONEN] GRUPPE
| Optionen | |
| -n NAME | Neuer Gruppenname |
| -g GID | Neue GID |
| -o | Mehrfache Nutzung einer GID zulassen |
Bei der Änderung der GID sollte die /etc/passwd überprüft werden, ob dort nicht die alte GID einem Benutzer zugeordnet wurde. Diese muß natürlich dann auf die neue GID geändert werden.
groupdel GRUPPE
Sollten Sie diesen Befehl auf eine Gruppe anwenden, die einem Benutzer als Login-Gruppe zugewiesen ist, wird der Befehl nicht ausgeführt.
Auch wie beim manuellen Löschen müssen Sie sich selber davon überzeugen, daß keine Verzeichnisse oder Dateien noch mit der gelöschten GID assoziiert sind.
root@defiant:/home/ole > grep tapico /etc/shadow tapico:9Fd4SU/BbEP52:11317:0:10000::::
Die Felder von links nach rechts sind:
Im Gegensatz zur /etc/passwd darf das Kennwortfeld nicht leer sein. Um einen Benutzer daran zu hindern sein Kennwort zu ändern, brauchen Sie nur das minimale Kennwortalter größer zu machen als das maximale Kennwortalter.
Sie sollten auf keinen Fall die Dateien /etc/shadow oder /etc/gshadow selbst editieren. Benutzen Sie lieber dafür die vorgesehen Tools wie useradd, usermod oder gpasswd.
pwconv
Um diesen Befehl erfolgreich ausführen zu können, darf kein Paßwortfeld in der /etc/passwd leer sein.
pwunconv
Der Befehl bringt die Datei /etc/passwd auf den neuesten Stand und löscht die /etc/shadow.
grpconv
grpunconv
Wenn Sie die Dateien /etc/passwd und /etc/group per Hand editieren müssen, ist es oft notwendig, daß Sie die Shadow-Dateien updaten. Dazu können Sie die Befehle pwconv und grpconv verwenden. In der Regel ist es am besten erst mit pwunconv und grpunconv das Shadow-Paßwort-System abzuschalten, die Änderungen vorzunehmen und dann mit pwconv und grpconv wieder zu aktivieren.
# /etc/profile
PROFILEREAD=true
umask 022
# adjust some limits (see bash(1))
ulimit -Sc 0 # don't create core files
ulimit -d unlimited
fi
ulimit -m unlimited
# make path more comfortable
#
MACHINE=`test -x /bin/uname && /bin/uname --machine`
PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin
test "$UID" = 0 || PATH="$PATH:."
export PATH
# set some environment variables
#
if test -n "$TEXINPUTS" ; then
TEXINPUTS=":$TEXINPUTS:~/.TeX:/usr/doc/.TeX"
else
TEXINPUTS=":~/.TeX:/usr/doc/.TeX"
fi
export TEXINPUTS
PRINTER='lp'
export PRINTER
LESSCHARSET=latin1
export LESSCHARSET
LESS="-M -S -I"
export LESS
LESSKEY=/etc/lesskey.bin
export LESSKEY
LESSOPEN="|lesspipe.sh %s"
export LESSOPEN
MANPATH=/usr/local/man:/usr/share/man:/usr/man:/usr/X11R6/man
export MANPATH
# set INFOPATH to tell xemacs where he can find the info files
#
INFODIR=/usr/local/info:/usr/share/info:/usr/info
INFOPATH=$INFODIR
export INFODIR INFOPATH
# do not save dupes in the bash history file
HISTCONTROL=ignoredups
export HISTCONTROL
alias dir='ls -l'
alias la='ls -la'
alias l='ls -alF'
alias ls-l='ls -l'
alias o='less'
alias ..='cd ..'
alias ...='cd ../..'
alias rd=rmdir
alias md='mkdir -p'
alias beep='echo -en "\x07"'
alias unmount='echo "Error: Try the command: umount"'
function startx { /usr/X11R6/bin/startx $* 2>&1 | tee ~/.X.err ; }
PAGER=less
export PAGER
if [ "$TERM" = "" -o "$TERM" = "unknown" ]; then
TERM=linux
fi
# set prompt
#
set -p
if test "$UID" = 0 ; then
PS1="\h:\w # "
else
PS1="\u@\h:\w > "
fi
PS2='> '
ignoreeof=0
export PS1 PS2 ignoreeof
Um systemweite Änderungen in den Umgebungen der Benutzer durchzuführen, sollten Sie diese Datei editieren. S.u.S.E.-Linux erstellt die /etc/profile selber. Für die Änderungen des Administrators ist die /etc/profile.local vorgesehen, die aus der profile aufgerufen wird.
Sie können die bash auch aufrufen, ohne daß die /etc/profile abgearbeitet wird. Dies bewirkt der Schalter --noprofile.
Wenn der Benutzer sein eigenes Umfeld gestalten will, kann er das in der Datei .profile machen, die in seinem Heimatverzeichnis liegt. Wenn ein Benutzer sich einloggt, dann liest das Betriebssystem erst die /etc/profile aus. Dann sucht es nach den Dateien .bash_profile, .bash_login und .profile im Heimatverzeichnis des Benutzers.
Beim Ausloggen aus einer interaktiven Shell wird, wenn vorhanden, die Datei .bash_logout im Heimatverzeichnis ausgeführt.
Durch die Option -norc kann die Abarbeitung der Konfigurationsdatei verhindert werden. Der Schalter -rcfile DATEINAME ermöglicht sogar die Angabe einer alternativen Konfigurationsdatei.
Kommt es zum Aufruf einer nicht-interactiven Shell, z. B. wenn ein Shell-Skript ausgeführt wird, dann schaut das Betriebssystem erst einmal in der Umgebungsvariablen BASH_ENV nach, ob dort der Name einer Konfigurationsdatei steht. Ansonsten wird dann auch die /etc/bashrc ausgeführt.
Auch diese Konfigurationsdatei gibt es als individuelle Version für den Benutzer als ~/.bashrc
who [OPTIONEN]
| Optionen | |
| -H | Zeigt eine Überschriftenzeile |
| -i, -u | Zeigt an, wie lange ein Benutzer nicht mehr gearbeitet hat |
| -m | Zeigt den aktuellen Benutzer an |
| -q | Zeigt die eingeloggten Benutzer und ihre Anzahl an |
Für die Ausgabe des Befehls wertet er die Dateien /var/run/utmp und /var/log/wtmp aus.
Der Befehl kann aber auch auf eines der wichtigsten Probleme im Leben eines Administrators eine Antwort geben: ``Wer bin ich?''. Einfach who am I eingeben und die Antwort ist da. Wer es liebevoller mag, dem sei die Version who mom likes an Herz gelegt. Im Endeffekt sind aber diese Erweiterungen nur andere Namen für who -m.
tapico@defiant:~ > who tapico tty1 Feb 10 13:26 tapico tty3 Feb 10 15:28 tapico tty4 Feb 10 15:26 grayson pts/0 Feb 10 14:05 tapico@defiant:~ > who -Hi BENU LEIT LOGIN-ZEIT RUHIG VON tapico tty1 Feb 10 13:26 05:29 tapico tty3 Feb 10 15:28 00:15 tapico tty4 Feb 10 15:26 00:30 grayson pts/0 Feb 10 14:05 . root pts/1 Feb 10 18:49 00:05
whoami
logname
Frisch nach dem Einloggen zeigen die Befehle whoami und logname keine Unterschiede. Erst wenn ein Identitätswechsel vollzogen wurde, werden die Unterschiede der beiden Befehle deutlich.
ovidio@defiant:~ > whoami ovidio ovidio@defiant:~ > logname ovidio ovidio@defiant:~ > su tapico Password: tapico@defiant:/home/ovidio > whoami tapico tapico@defiant:/home/ovidio > logname ovidio
w [OPTIIONEN]
tapico@defiant:~ > w 4:23pm up 2:00, 6 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT tapico tty1 - 2:24pm 1:58m 44.56s 0.04s sh /usr/X11R6/bin/startx root tty2 - 4:22pm 22.00s 0.12s 0.06s -bash lori tty3 - 4:23pm 14.00s 0.08s 0.05s -bash tapico tty5 - 4:21pm 1:33 0.08s 0.04s -bash tapico pts/0 - 4:21pm 0.00s 0.08s 0.03s w tapico pts/1 - 3:37pm 2:05 2.32s 0.10s bash
finger [OPTIONEN] [BENUTZER]
Der Befehl finger wertet für seine Ausgabe die Datei /etc/passwd sowie die Dateien .plan und .project im Heimatverzeichnis des jeweiligen Benutzers aus. Diese beiden Dateien geben Auskunft über zukünftige Pläne und Projekte.
lori@defiant:~ > finger Login Name Tty Idle Login Time Where lori Lori Kalmar 3 5 Sun 16:23 root Herr und Meister 2 5 Sun 16:22 tapico Thomas Prizzi 1 2:04 Sun 14:24 tapico Thomas Prizzi pts/0 - Sun 16:21 tapico Thomas Prizzi pts/1 7 Sun 15:37 tapico Thomas Prizzi 5 6 Sun 16:21 lori@defiant:~ > finger tapico Login: tapico Name: Thomas Prizzi Directory: /home/tapico Shell: /bin/bash On since Sun Feb 11 16:21 (MET) on tty5, idle 0:12 No Mail. Plan: Bin vom 15. bis 17. Februar nicht in der Firma.
last [OPTIONEN] [BENUTZER]
Daneben zeigt er auch an, seit wann die Datei /var/log/wtmp Informationen enthält.
tapico@defiant:~ > last -10 lori tty3 Sun Feb 11 16:23 still logged in root tty2 Sun Feb 11 16:22 still logged in tapico tty5 Sun Feb 11 16:21 still logged in lori pts/0 Sun Feb 11 16:21 still logged in tapico pts/1 Sun Feb 11 15:37 still logged in tapico pts/0 Sun Feb 11 14:47 - 15:54 (01:07) root tty1 Sun Feb 11 14:24 still logged in reboot system boot 2.2.14 Sun Feb 11 14:23 (04:32) lori pts/2 Sat Feb 10 19:09 - 01:05 (05:55) tapico pts/1 Sat Feb 10 18:49 - 01:05 (06:15) wtmp begins Mon Feb 5 20:18:53 2001
lastlog [OPTIONEN]
| Optionen | |
| -t N | beschränkt die Ausgabe auf die letzten N Tage. (time) |
| -u NAME | erlaubt die direkte Anzeige der Daten eines Benutzers. (user) |
Für die Auswertung greift der Befehl auf die Logdatei /var/log/lastlog zurück.
tapico@defiant:~ > lastlog -u tapico Username Port From Latest tapico tty5 Son Feb 11 16:21:59 +0100 2001 tapico@defiant:~ > lastlog -t 1 Username Port From Latest root tty2 Son Feb 11 16:22:16 +0100 2001 tapico tty5 Son Feb 11 16:21:59 +0100 2001 lori tty3 Son Feb 11 16:23:18 +0100 2001
Notizen:
Benutzerverwaltung
useradd -c "Lori Kalmar" -m -p locust lori
*' (Asterisk, Stern) ein. Versuchen Sie sich wieder am Terminal 2 als grayson einzuloggen. (Eventuell vorher ausloggen.)
Notizen:
Wie vom Befehl ls -l bekannt, besteht die Rechtetabelle aus 9 Angaben, z. B. rwxr--xr--. Die ersten drei angegebenen Rechte gelten dabei für den Dateibesitzer, die folgenden drei für die Besitzergruppe und die letzten für den Rest der Welt.
r (read = lesen) Der Benutzer kann den Inhalt der Datei einsehen, d. h. unter anderem, er kann sie am Bildschirm anzeigen lassen, sie drucken oder kopieren.
w (write = schreiben) Der Benutzer kann die Datei verändert unter dem bisherigen Namen speichern.
x (execute = ausführen) Die Datei kann als Programm gestartet werden. Dies setzt natürlich voraus, daß die Datei ein Programm ist.
Angenommen also, Sie haben an der Datei uschistagebuch kein r-Recht, wollen Sie aber trotzdem auf dem Bildschirm sehen. Die Eingabe von
cat uschistagebuch
führt dann zu einer Fehlermeldung der Art:
uschistagebuch: permission denied
Viele Anwender, die aus einer Einplatzumgebung zu Linux stoßen, überschätzen allerdings die Bedeutung der Rechte, die man an einer (gewöhnlichen) Datei hat. Dies mag daran liegen, das MS-DOS und viele seiner Verwandten den Zugriff auf Dateien durch Attribute zu regeln versuchen. Die vielzitierte ``schreibgeschützte Datei'' gibt es unter Linux nicht.
Der Dateischutz wird ausschließlich über die Rechte gewährleistet. Hierbei gilt eine glasklare Logik, die sich im wesentlichen aus dem Dateisystem ergibt: Wird in einer Befehlszeile ein Pfad angegeben, auf den der Befehl zugreifen soll, werden die einzelnen Bestandteile des Pfades daraufhin überprüft, ob hinreichende Rechte bestehen. Ist dies nicht der Fall, wird der Zugriff verweigert.
Das r-Recht an einem Verzeichnis zu besitzen heißt, man kann den Inhalt des Verzeichnisses lesen, mit anderen Worten, man kann den Befehl ls für dieses Verzeichnis einsetzen.
Was aber ist nun der Inhalt eines Verzeichnisses? Ein Verzeichnis ist nichts anderes als eine kleine Tabelle. Jede Zeile dieser Tabelle hat zwei Einträge: Den Dateinamen und die zugehörige Inode-Nummer. Wie Sie bereits wissen, ist der Dateiname für Linux nicht das entscheidende Kriterium für die Bearbeitung einer Datei. Linux orientiert sich an der Inode.
Was bedeutet in diesem Zusammenhang das r-Recht für ein Verzeichnis?
Ganz einfach: Mit dem r-Recht am Verzeichnis können darin Dateien gefunden werden (der Befehl ls liefert die Namen der im Verzeichnis enthaltenen Dateien), zusätzlich kann man die Inode-Nummern dieser Dateien abfragen (ls -i).
Da in der Inode selbst die Verwaltungsinformationen (darunter die Rechtetabelle für die Datei) gespeichert sind, ist ein Zugriff auf eine Datei also erst dann möglich, wenn man ihre Inode kennt! Das heißt also, wenn Ihnen das r-Recht an einem Verzeichnis fehlt, haben Sie keinen Zugang zu den darin enthaltenen Dateien! Insbesondere sind auch Unterverzeichnisse dem Zugriff des Anwenders entzogen!
Das für das Verständnis der Linux-Rechte wichtigste Recht ist wohl das w-Recht für Verzeichnisse. Dieses Recht beinhaltet die Möglichkeit ein Verzeichnis verändert abzuspeichern. Anders ausgedrückt: Ein Benutzer, der an einem Verzeichnis das w-Recht hat, kann dieses verändern.
Nun ist wie gesagt ein Verzeichnis eine Liste von Dateinamen (plus zugehöriger Inode-Nummer). Besitzen Sie das w-Recht an einem Verzeichnis, können Sie einen Verzeichniseintrag löschen, das Verzeichnis wird verändert gespeichert, der Dateiname und die Inode-Nummer existieren nicht mehr. Einen Verzeichniseintrag löschen heißt also den Zugang (Link) zu einer Datei löschen! Dies geschieht allerdings nicht mit einem Editor sondern mit Hilfe des Befehls rm.
Verzeichnisse sind insofern ``schreibgeschützt'', als Linux aus Konsistenzgründen schreibende Zugriffe auf Verzeichnisse nur mit dafür geeigneten Befehlen erlaubt. Das Bearbeiten mit einem Editor würde viele Benutzer überfordern, denn es muß Rücksicht auf die Struktur des Verzeichnisinhalts genommen werden. Wird diese aber zerstört, sind die Daten im Verzeichnis nicht mehr verfügbar!
Nehmen wir nun einen extremen Fall an. Eine Datei, an der Sie keinerlei Rechte besitzen, befinde sich in einem Verzeichnis, in dem Sie das w-Recht haben. Diese Datei können Sie, auch ohne Rechte an ihr selbst, löschen, denn Sie können das Verzeichnis manipulieren! Sie entfernen mit dem Befehl rm den Eintrag der Datei im Verzeichnis und somit löschen Sie den Zugang zu den Daten.
Gleiches gilt für das Umbenennen (ändert den Eintrag in einem Verzeichnis), Verschieben (löscht den Eintrag in einem Verzeichnis) oder Erstellen (erzeugt einen neuen Eintrag in einem Verzeichnis) einer Datei. Auch hierzu ist das w-Recht am Verzeichnis von entscheidender Bedeutung.
Wie Sie sehen hängen sehr viele Dateioperationen von Verzeichnisrechten ab. Vereinfachend gesagt, Verwaltungsoperationen mit Dateien, wie z. B. Löschen, Verschieben oder Umbenennen sind Eingriffe in die Verzeichnisstruktur und werden deshalb über Rechte an Verzeichnissen geregelt. Die inhaltliche Manipulation von Dateien ist dagegen nur möglich, wenn Sie Rechte direkt an der Datei haben. Es kann sein, daß Sie eine Datei löschen, umbenennen oder verschieben können, ohne ihren Inhalt auch nur sehen zu können. Zur Manipulation der Dateiinhalte benötigt Sie zumindest das r-Recht an ihr, alle anderen genannten Operationen erfordern das w-Recht am Verzeichnis.
Alles in allem kann man feststellen, daß Verzeichnisse bezüglich der Rechte r und w wie gewöhnliche Dateien behandelt werden. Da man aber mit einem Verzeichnis eine Liste von Dateinamen bearbeitet, bedeutet das Ändern von Verzeichnissen sehr häufig ein Löschen, Umbenennen oder Verschieben von Dateien.
Bis jetzt haben sich Verzeichnisse wie Dateien verhalten. Beim x-Recht gibt es aber einen signifikanten Unterschied. x steht für das Recht ein Programm ausführen zu können. In diesem Sinne kann also ein Verzeichnis nicht ausführbar sein.
Das x-Recht an einem Verzeichnis bedeutet nun, daß Sie
Rechte an einem Verzeichnis betreffen die darin enthaltenen Dateien.
Wollen Sie sich den Inhalt der Datei /home/tapico/.profile mit
cat /home/tapico/.profile
ansehen, so setzt dies folgende Rechte voraus:
cat muß zunächst den Inhalt von /home/tapico lesen, um zu prüfen, ob die Datei überhaupt existiert. Dies erlaubt das r-Recht am Verzeichnis. Weiter benötigt cat die Inode-Nummer der Datei, um über diese die Inode selbst finden, Zugang dazu erhält cat über das x-Recht an /home/tapico In der Inode sind nun aber alle relevanten Informationen, die cat braucht, um den Dateiinhalt endlich lesen zu können. Hier ist die Rechtetabelle, die über das r-Recht die Erlaubnis zum Lesen gewährt und schließlich sind hier die Informationen abgelegt, mit deren Hilfe die Daten auf der Platte gefunden werden können.
In der Praxis erhält man mit dem r-Recht an einem Verzeichnis stets auch das x-Recht. Natürlich kann man das x-Recht wieder nehmen (sofern man dazu die Erlaubnis hat), dann schafft man aber eine skurile Situation: Das Leserecht am Verzeichnis erlaubt es dann zum Beispiel ls, Dateien zu finden, weitere Informationen werden aber verweigert. Man erhält in jedem Fall eine Fehlermeldung wie die folgende
/bin/ls: /home/tapico/.profile: Permission denied
ls meldet, daß man auf die Inode von .profile im Verzeichnis /home/tapico nicht zugreifen darf: Permission denied.
An den meisten Verzeichnissen im Dateisystem hat der gewöhnliche Benutzer die Rechte r und x, am Heimatverzeichnis aber alle Rechte.
Neben den Abkürzungen r, w und x gibt es auch noch eine oktale9.1 Notation der Rechte. Dies ist eine dreistellige Zahl, bei der die erste Ziffer für den Besitzer gilt, die zweite für die Gruppe, die dritte für alle anderen.
| Ziffer | Bedeutung |
| 4 | r-Recht |
| 2 | w-Recht |
| 1 | x-Recht |
| 0 | kein Recht |
Die Rechtekombinationen ergeben sich durch Addition! So bedeutet 754 dasselbe wie
rwxr-xr--!
Anstelle der Kennzeichnung x treten hin und wieder ein s oder ein t auf.
tapico@defiant:~ > ls -l /etc/passwd /etc/shadow -rw-r--r-- 1 root root 3810 Dec 26 19:56 /etc/passwd -rw-r----- 1 root shadow 2422 Dec 26 19:56 /etc/shadow tapico@defiant:~ > ls -l /usr/bin/passwd -rwsr-xr-x 1 root shadow 27920 Mar 11 2000 /usr/bin/passwd
Wie Sie sehen, hat nur der Superuser Schreibrechte auf die Dateien /etc/passwd und /etc/shadow. Das s-Recht auf den Befehl /usr/bin/passwd bewirkt, daß der Befehl immer unter der UID des Superuser ausgeführt wird. So kann auch ein normaler Benutzer sein Kennwort ändern.
Wird das SGID-Recht auf ein Verzeichnis gegeben, so hat es eine andere Funktion. In diesem Fall erhalten alle Dateien, die in diesem Verzeichnis erstellt werden, automatisch die gleiche Gruppe, die auch dem Verzeichnis zugeordnet ist.
tapico@defiant:~> touch screen tapico@defiant:~> ls -l screen -rw-r--r-- 1 tapico users 0 Nov 18 09:07 screen tapico@defiant:~> cd /home/wwwrun tapico@defiant:/home/wwwrun> ls -ld . drwxrwsr-x 2 wwwrun web 35 Nov 18 08:58 . tapico@defiant:/home/wwwrun> touch mahal.html tapico@defiant:/home/wwwrun> ls -l insgesamt 0 -rw-r--r-- 1 tapico web 0 Nov 18 09:03 mahal.html
Beispiel für das Skript:
root@defiant:/usr/bin> ls -l fd0format -rwsr-xr-x 1 root users 124 Okt 19 22:33 fd0format root@defiant:/usr/bin> cat fd0format #Formatiert eine Diskette Low-Level und erzeugt das Dateisystem ext2 #SUID für das Skript setzen, da /sbin nur für root zugänglich /usr/bin/fdformat /dev/fd0 /sbin/mkfs -t ext2 /dev/fd0
Das Sticky Bit bei ausführbaren Dateien veranlaßt Linux, den Programmcode des gestarteten Programms nicht wieder aus dem Arbeitsspeicher zu entfernen. Dies hat den Vorteil, daß bei einem weiteren Start des Programms dieses nicht erst in den RAM geladen werden muß. Dieses Merkmal ist besonders nützlich, wenn ein Programm häufig eingesetzt wird; denn der Programmcode muß nur einmal im Speicher sein, er kann aber von mehreren Benutzern gleichzeitig genutzt werden.
Bei Verzeichnissen hingegen ermöglicht das Sticky Bit das Anlegen von gemeinsam genutzten Verzeichnissen. Normalerweise muß ein solches Verzeichnis die Rechte drwxrwxrxw besitzen. Jeder kann nun in dieses Verzeichnis schreiben, allerdings auch jede Datei darin löschen. Durch das Setzen des Sticky Bits wird es nur dem Eigentümer einer Datei erlaubt, diese zu löschen.
Das t-Recht läßt sich nur vom Superuser vergeben.
Oktal werden die neuen Rechte durch eine weitere vorangestellte Ziffer ausgedrückt. So werden z. B. die Rechte rwxrwxrwt durch 1777 ausgedrückt.
| Ziffer | Bedeutung |
| 4 | SUID |
| 2 | GUID |
| 1 | Sticky Bit |
chown [OPTIONEN] [BENUTZER][:GRUPPE] DATEILISTE
Allerdings ist es nur dem Superuser gestattet, den Eigentümer einer Datei zu ändern. Die Änderung der Gruppe ist für den Besitzer und für den Superuser erlaubt. Der Besitzer darf allerdings seiner Datei nur eine Gruppe zuordnen, in der er selber Mitglied ist.
| Optionen | |
| -c | Informationen über alle geänderten Dateien werden angezeigt |
| -v | Informationen über alle Aktionen werden ausgegeben |
| -f | Fehlermeldungen werden nicht ausgegeben |
| -R | Änderungen werden rekursiv den Verzeichnisbaum herunter durchgeführt |
chown tapico pampelmuse
chown -R tapico:users /home/uschi
ändert den Besitzer auf tapico und die Gruppe auf users für das Verzeichnis /home/uschi und seinem Inhalt.
chown :xtra xtra*
ändert die Gruppe für alle Dateien, die mit ``xtra'' beginnen auf xtra.
chgrp [OPTIONEN] GRUPPE DATEILISTE
Die Änderung der Gruppe ist für den Besitzer und für den Superuser erlaubt. Der Besitzer darf allerdings seiner Datei nur eine Gruppe zuordnen, in der er selber Mitglied ist.
| Optionen | |
| -c | Informationen über alle geänderten Dateien werden angezeigt |
| -v | Informationen über alle Aktionen werden ausgegeben |
| -f | Fehlermeldungen werden nicht ausgegeben |
| -R | Änderungen werden rekursiv den Verzeichnisbaum herunter durchgeführt |
chgrp users pampelmuse
chmod [OPTIONEN] RECHTE DATEILISTE
Die Rechte können dabei in der Form WerWieWas oder Maske angegeben werden.
Wer ist dann u (user/Besitzer), g (group/Gruppe), o (others/Sonstige), eine Kombination daraus oder a (all user/alle Benutzer).
Was ist eines der Rechte r, w, x, s, t oder eine Kombination daraus. Wobei sich x, s und t sich gegenseitig ausschließen.
Wie ist = (Rechte werden exakt so gesetzt wie in Was angegeben), + (Rechte aus Was werden zusätzlich vergeben) oder - (Rechte aus was werden entzogen)
WerWieWas kann mehrfach, dann durch Komma getrennt angegeben werden. In der ganzen Liste der WerWieWas darf kein Leerzeichen sein, da alles nach diesem Leerzeichen als Dateiname interpretiert wird!
Maske ist eine dreistellige (Superuser auch vierstellige) oktale Zahl wie in Abschnitt 9.1.2 und 9.1.5 beschrieben.
| Optionen | |
| -c | Informationen über alle geänderten Dateien werden angezeigt |
| -v | Informationen über alle Aktionen werden ausgegeben |
| -f | Fehlermeldungen werden nicht ausgegeben |
| -R | Änderungen werden rekursiv den Verzeichnisbaum herunter durchgeführt |
chmod u+x memo*.txt
chmod 755 makeitso
setzt die Rechte auf rwxr-xr-x.
chmod a-rwx,u=rwx meinsein
entzieht allen alle Rechte und gibt dem Besitzer alle Rechte.
umask [MASKE]
Die Eingabe von umask ohne Parameter gibt die aktuell eingestellte Maske wieder. Die Maske selber ist eine dreistellige oktale Zahl. Die Bedeutung der Zahlen ist identisch mit derer für die Rechte aus Abschnitt 9.1.2. Allerdings gibt umask nicht an, welche Rechte gegeben werden, sondern welche Rechte entzogen werden.
Allerdings verhält sich die Rechtevergabe doch anders als erwartet. Manche Systeme liefern auch eine vierte Ziffer (an erster Stelle stehend) zurück. Diese beschreibt das besondere Verhalten der Rechtevergabe für neue Dateien, wie aus der Tabelle 9.1 zu ersehen ist. Dabei verhält sich die bash wie durch den Wert 0 gegeben. Die für die Benutzergruppen angegebenen Rechte werden von dieser Grundeinstellung abgezogen.
|
Beim Kopieren von Dateien hat umask auch seine Finger im Spiel. Als Vorgabe gelten die Rechte, die die Quelldatei besitzt. Diese werden dann mit der Einstellung von umask gefiltert.
Der durch umask eingestellte neue Wert gilt nur für die Dauer einer Sitzung. Eine permanente Änderung erreichen Sie, wenn Sie den Befehl umask in die Konfigurationsskripte .profile oder .bashrc eintragen.
umask 022
Im Prinzip können Sie Ihre Identität mit dem Befehl su wechseln. Sie können auch einen Befehl direkt mit su starten.
ole@enterprise:~> su -c "mount -t auto /dev/hda1 /mnt" Password: ole@enterprise:~>
Allerdings setzt diese Operation die Kenntnis des Paßworts desjenigen voraus, dessen Identität man annehmen will. Wenn Sie allerdings dies kennen, dann können Sie alles unter dieser Identität machen.
Um dieses Problem zu erledigen wurde der Befehl sudo entwickelt.
sudo [OPTIONEN] Kommando sudo -v
Dabei wird die reale und die effektive UID und GID so gesetzt, daß sie mit den Daten des angegebenen Benutzers übereinstimmen. Die Standardeinstellung ist, daß der Benutzer sich vor der Ausführung mit seinem eigenen Paßwort identifizieren muß. Wenn sich ein Benutzer authentifiziert hat, dann wird ein Zeitstempel aktualisiert. Der Benutzer kann nun für 5 Minuten sudo benutzen, ohne sein Paßwort neu eingeben zu müssen. Die Zeitstempel werden im Verzeichnis /var/run/sudo gespeichert.
| Optionen | |
| -V | Informationen über Version und Einstellungen (nur root (version) |
| -l | Zeigt die möglichen Befehle eines Benutzers an (list commands) |
| -L | Zeigt die möglichen Standardoptionen der Datei /etc/sudoers an (list options) |
| -h | Zeigt Hilfe zu sudo an (help) |
| -v | Aktualisiert den Zeitstempel, damit es zu keinem Timeout kommt (validate) |
| -k | Setzt den Zeitstempel auf eine ungültige Zeit, beim nächsten sudo-Befehl wird das Paßwort wieder abgefragt (kill) |
| -K | Löscht den Zeitstempel völlig, beim nächsten sudo-Befehl wird das Paßwort wieder abgefragt (sure kill) |
| -b | Startet das Kommando als Hintergrundprozeß (background) |
| -p PROMPT | Erlaubt die Definition eines eigenen Paßwortprompts (%u für Benutzername und %h für Rechnername stehen als Variablen zur Verfügung) (prompt) |
| -u BENUTZER | Das Kommando wird unter dem angegebenen Benutzer ausgeführt, Standard ist root; um eine UID anstatt einem Benutzernamen zu benutzen, wird ein Schweinegatter davorgestellt (#512) (user) |
| -s | Benutzt die in der Variablen SHELL angegebene Shell (shell) |
| -H | Setzt die ansonsten unveränderte Variable HOME auf den Wert des angegebenen Benutzers (home) |
| -P | Benutzt die Gruppen des Benutzers anstatt der Gruppen des angegebenen Benutzers (preserve) |
| -S | Das Password wird von der Standardeingabe gelesen(stdin) |
Was kann der aktuelle Benutzer ausführen?
ole@enterprise:~> sudo -l
User ole may run the following commands on this host:
(root) /usr/sbin/useradd
(root) /usr/sbin/userdel
(root) /usr/bin/passwd
Danach sollte der Benutzer einen Benutzer anlegen, sein Passwort ändern und ihn auch wieder löschen können.
ole@enterprise:~> /usr/sbin/useradd theodor useradd: unable to lock password file ole@enterprise:~> sudo /usr/sbin/useradd theodor Password: ole@enterprise:~> sudo passwd theodor Changing password for theodor. New password: Re-enter new password: Password changed ole@enterprise:~> sudo /usr/sbin/userdel theodor ole@enterprise:~>
So könnten eine ganz einfach /etc/sudoers-Datei aussehen.
1: # sudoers file. 2: # 3: # This file MUST be edited with the 'visudo' command as root. 4: # 5: # See the sudoers man page for the details on how to write a sudoers file. 6: # 7: 8: # Host alias specification 9: 10: # User alias specification 11: 12: # Cmnd alias specification 13: 14: # Defaults specification 15: 16: # User privilege specification 17: root ALL=(ALL) ALL 18: 19: ole ALL=/usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd
Ein Eintrag besteht aus mehreren Teilen. Dem Benutzer bzw. Gruppennamen, von welchem Rechner aus das Kommando ausgeführt werden soll, welche Kommandos ausgeführt werden dürfen und als welcher Benutzer etwas ausgeführt werden soll.
Die Benutzer aus der Gruppe gott dürfen alles ausführen.
%gott ALL=(ALL) ALL
Jetzt sollen Sie dies auch tun können ohne sich noch einmal extra identifizieren zu müssen.
%gott ALL=(ALL) NOPASSWD: ALL
Die Mitglieder der Gruppe users sollen den Rechner herunterfahren können. Allerdings nur, wenn sie auch direkt auf dem Rechner eingeloggt sind.
%users localhost=/sbin/shutdown -h now
Der Benutzer ole soll neue Benutzer anlegen, ihr Paßwort ändern und die Benutzer auch wieder löschen können.
ole ALL=/usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd
Weitere Informationen entnehmen Sie bitten den Manual-Pages (man 5 sudoers).
visudo [OPTIONEN]
Das Kommando verwendet als Editor den Standard-Editor des Systems. Also in den meisten Fällen den vi. Weitere Informationen entnehmen Sie bitten den Manual-Pages (man 8 visudo).
Rechte
Zu Beginn der Aufgabe sollten Sie sich im Heimatverzeichnis befinden! Wechseln Sie das Verzeichnis nur, falls Sie dazu ausdrücklich aufgefordert werden. Einige Aufgaben lassen sich nicht ausführen! Versuchen Sie in diesen Fällen die Fehlermeldung zu interpretieren.
Thomas Prizzi Wall 40 24103 Kiel 0431/978767 Martin Lecker Eggerstedtstr. 1 24103 Kiel 0431/978234 Norbert Nase Nasa-Str. 23 55111 Nasenhausen 0321/918273 Zacharias Ackermann Feldweg 33 12345 Kleindorf 06789/1011
----------
date +"Es ist %H:%M:%S"
Notizen:
Datei-Rechte
Situation: Sie sind User tapico und gehören zur Gruppe group !
ls -l uhr gibt Ihnen folgende Ausgabe:
-rwxr--r-- root other 124 Mar 4 16:14 uhr
-rwxr--r-- .
Sie können die Datei
Notizen:
Fallstudie: Rechte
Die Firma AMOV GmbH möchte ihre Daten auf einem Server speichern. Dazu soll als erstes ein Verzeichnisbaum unter dem Verzeichnis /daten aufgebaut werden. Dabei müssen die Rechte auf die einzelnen Bereiche ermittelt werden.
Stellvertretend für die Mitarbeiter mit gleichen Rechten nehmen Sie zur Durchführung der Fallstudie bitte die folgenden Mitarbeiter.
Dick Tator ist der Chef. Er hat von internen Abläufen eigentlich keine Ahnung, will aber trotzdem alles wissen. Eigentlich müßte er nur im Bereich der Auftragsbearbeitung arbeiten.
Petra Pleite-Geier arbeitet als Geschäftführerin hart und braucht überall Zugriff um im Notfall alles selbst zu machen.
Manuela Magersucht ist die Dame aus der Buchhaltung und auch für die Kundendatenbank sowie für die Auftragsbearbeitung zuständig.
Maria Krohn ist ebenfalls in der Buchhaltung tätig, daneben ist sie aber auch für die Lohnabrechnung zuständig.
Carlo Calvados ist der feurige Spanier aus der Forschungsabteilung. Außer Manuela Magersucht kennt er nur seine Arbeit, die er zusammen mit seinen Kollegen im Forschungsordner speichert.
Karl Lagerhalle, der Lagerverwalter, braucht den Zugriff auf die Lagerdatenbank.
Michael Schrauber braucht als Produktionsleiter Zugriff auf den Lagerbestand, die Produktionsdaten und die Aufträge.
Peter Proxy als Systemadministrator hat als root eigentlich überall seine Nase drin, arbeitet als normaler User aber nur in dem Dokumentationsbereich, den alle Lesen dürfen.
Alle Mitarbeiter sollen Zugriff auf den Pool haben um Daten auszutauschen.
Notizen:
| Nur eine gelöschte Datei ist eine gute Datei. Und nur eine formatierte Platte ist eine gute Platte. |
| Martin Bethke |
Partitionen ermöglichen das Aufteilen in einer Festplatte in mehrere unabhängige Einheiten. In Abschnitt 1.3.3 bin ich schon auf die Partitionen eingegangen. Der folgende Abschnitt wird sich mit der Einrichtung und Pflege von Partitionen beschäftigen.
fdisk [-l] [-u] [PLATTE] fdisk -s PARTITION
| Optionen | |
| -u | Größenangabe in Sektoren anstatt in Zylindern |
| -l | Ausgabe der Partitionstabelle |
| -s | Ausgabe der Größe der angegebenen Partition |
Ein Zylinder (cylinder) ist die Menge aller Spuren, die sich an der gleichen Stelle auf jeder Platte befinden. Als Spur (track) bezeichnet man die konzentrischen Kreise auf einer Platte der Festplatte.
Sie können Linux auf jeder Festplatte und jeder primären Partition installieren. Wenn Sie keine Festplatte angeben, wird standardmäßig das Gerät /dev/hda genommen.
Wenn Sie fdisk benutzen, können Sie mit der Taste <m> sich eine Übersicht über die Hilfe anzeigen lassen.
root@defiant:/ > fdisk /dev/hda Kommando (m für Hilfe): m Kommando Bedeutung a (De)Aktivieren des bootbar-Flags b »bsd disklabel« bearbeiten c (De)Aktivieren des DOS Kompatibilitätsflags d Eine Partition löschen l Die bekannten Dateisystemtypen anzeigen m Dieses Menü anzeigen n Eine neue Partition anlegen o Eine neue leere DOS Partitionstabelle anlegen p Die Partitionstabelle anzeigen q Ende ohne Speichern der Änderungen s Einen neuen leeren »Sun disklabel« anlegen t Den Dateisystemtyp einer Partition ändern u Die Einheit für die Anzeige/Eingabe ändern v Die Partitionstabelle überprüfen w Die Tabelle auf die Festplatte schreiben und das Programm beenden x Zusätzliche Funktionen (nur für Experten) Kommando (m für Hilfe):
Um nun eine Partition anlegen zu können, müssen Sie drei Schritte durchlaufen.
Für jede Festplatte, die partitioniert werden soll, muß fdisk einmal gestartet werden.
Wenn Sie logische Laufwerke anlegen wollen, müssen Sie nach der Einrichtung der erweiterten Partition den Rechner erst wieder neu starten. Mit fdisk wird nämlich nur die Partitionstabelle geschrieben. Das Einrichten der Partitionen erfolgt erst beim Neustarten des Rechners.
Denken Sie daran, fdisk für Linux erstellt oder löscht nur Partitionen für das Linux-Betriebssystem. Andere Betriebssysteme können diese Partitionen meistens nicht sehen oder mit Ihnen arbeiten.
Nachdem Sie die Partitionen angelegt haben, muß die Swap-Partition aktiviert werden, die für die Wurzel vorgesehene Partition ausgewählt und die Partitionen formatiert werden.
root@defiant:/ > fdisk -l
Festplatte /dev/hda: 255 Köpfe, 63 Sektoren, 592 Zylinder
Einheiten: Zylinder mit 16065 * 512 Bytes
Gerät boot. Anfang Ende Blöcke Id Dateisystemtyp
/dev/hda1 * 1 261 2096451 6 FAT16
/dev/hda2 262 392 1052257+ 5 Erweiterte
/dev/hda3 393 576 1477980 83 Linux
/dev/hda4 577 592 128520 82 Linux Swap
/dev/hda5 262 392 1052226 6 FAT16
Wenn das Program fdisk läuft, zeigt der Befehl l zeigt die Liste der Dateisystemtypen.
0 Leer 1c Verst. Win95 FA 65 Novell Netware bb Boot Wizard hid 1 FAT12 1e Verst. Win95 FA 70 DiskSecure Mult c1 DRDOS/sec (FAT- 2 XENIX root 24 NEC DOS 75 PC/IX c4 DRDOS/sec (FAT- 3 XENIX usr 39 Plan 9 80 Old Minix c6 DRDOS/sec (FAT- 4 FAT16 <32M 3c PartitionMagic 81 Minix / old Lin c7 Syrinx 5 Erweiterte 40 Venix 80286 82 Linux Swap da Non-FS data 6 FAT16 41 PPC PReP Boot 83 Linux db CP/M / CTOS / . 7 HPFS/NTFS 42 SFS 84 OS/2 verst. C:- de Dell Utility 8 AIX 4d QNX4.x 85 Linux erweitert df BootIt 9 AIX bootfähig 4e QNX4.x 2nd part 86 NTFS volume set e1 DOS access a OS/2 Bootmanage 4f QNX4.x 3rd part 87 NTFS volume set e3 DOS R/O b Win95 FAT32 50 OnTrack DM 8e Linux LVM e4 SpeedStor c Win95 FAT32 (LB 51 OnTrack DM6 Aux 93 Amoeba eb BeOS fs e Win95 FAT16 (LB 52 CP/M 94 Amoeba BBT ee EFI GPT f Win95 Erw. (LBA 53 OnTrack DM6 Aux 9f BSD/OS ef EFI (FAT-12/16/ 10 OPUS 54 OnTrackDM6 a0 IBM Thinkpad hi f0 Linux/PA-RISC b 11 Verst. FAT12 55 EZ-Drive a5 FreeBSD f1 SpeedStor 12 Compaq Diagnost 56 Golden Bow a6 OpenBSD f4 SpeedStor 14 Verst. FAT16 <3 5c Priam Edisk a7 NeXTSTEP f2 DOS secondary 16 Verst. FAT16 61 SpeedStor a9 NetBSD fd Linux raid auto 17 Verst. HPFS/NTF 63 GNU HURD / SysV b7 BSDI fs fe LANstep 18 AST SmartSleep 64 Novell Netware b8 BSDI swap ff BBT 1b Verst. Win95 FA
Mit fdisk kann der Dateisystemtyp einer Partition unter dem Menüpunkt t nachträglich geändert werden. Der Dateisystemtyp wird auch beim Formatieren in der Partitionstabelle eingetragen. Wichtig ist diese Funktion dann, wenn eine zerstörte Partitionstabelle rekonstruiert werden soll.
|
Das Bootflag kennzeichnet, ob die Partition aktiv ist und daß ihr Boot-Record einen Boatloader enthält. Normalerweise steht dort der Wert 0x00. Ist die Partition aktiv dann steht an dieser Stelle der Wert 0x80. Natürlich kann, was zwar falsch aber trotzdem möglich ist, eine Partition als aktiv gekennzeichnet sein, obwohl sie keinen funktionsfähigen Boot-Record besitzt.
In der Partitionstabelle wird auch festgehalten, für welches Dateisystem die Partition gedacht ist bzw. ob es sich um eine erweiterte Partition handelt. So steht z. B. der Wert 0x83 für eine Linuxpartition, egal ob ext2, ext3, ReiserFS oder andere. Dagegen steht 0x82 für die Swap-Partition.
Die 6 Bytes für den Partitionsanfang und das Partitionsende nach der CHS-Zählung sind heute veraltet. Mit dieser Notations sind maximal Platten von 8 GB Größe verwaltbar, wenn man davon ausgeht, daß diese 256 Leseköpfe haben. Da Partitionen heute sowieso nur nach an Zylindergrenzen festgemacht werden, haben diese Werte keine weitere Bedeutung. Am Ende des Partitionseintrags liegen 8 Byte, die Anfang und Anzahl der Sektoren der Partition anzeigen. Mit dieser Methode sind Platten bis zu 2 TB (2048 GB) verwaltbar.
Übrigens fehlt bei Disketten die Partitionstabelle im MBR. Wer würde auch schon auf die Idee kommen eine Diskette zu partitionieren?
Wir lesen also von der ersten IDE-Platte (if=/dev/hda) und schreiben die gelesenen Daten in die Datei mbr.dmp (of=mbr.dmp). Die Blockgröße beträgt 512 Bytes (bs=512) und es wird genau ein Block (count=1) gelesen.
defiant:~ # dd if=/dev/hda of=mbr.dmp bs=512 count=1 1+0 Records ein 1+0 Records aus
In der Datei mbr.dmp befindet sich nun eine direkte Kopie des MBR. Diese Datei ist eine Binärdatei. Im Gegensatz zu einer Textdatei, die hauptsächlich nur lesbare Zeichen enthält, können alle Werte eines Byte - zwischen 0 und 255 - als Zeichen vorkommen. Da dadurch auch viele Steuerzeichen vorkommen, sollten Sie solche Dateien niemals mit cat oder einem anderen Textbetrachter anzeigen lassen.
Speziell zur Betrachtung solcher Binärdateien wurde der Befehl od(7.1.3) entwickelt. Dieser stellt die Bytes der Datei in verschiedenen Formen (dezimal, octal, hexadezimal oder auch als Zeichen und Escape-Sequenzen) dar.
Für diesen Fall lassen wir uns den Dateiinhalt in hexadezimaler Notation anzeigen und zwar Byte für Byte (-t x1). Da pro Zeile 16 Byte ausgegeben werden, sollten Sie die Ausgabe an den Pager less weiterleiten um sich die Ausgabe genau anschauen zu können.
defiant:~ # od -t x1 mbr.dmp | less
Eigentlich interessieren uns erst die Bytes ab Nummer 446 (Erstes Byte ist die Nummer 0). Die Nummerierung vor jeder Zeile ist in oktaler Schreibweise verfaßt. Das gesuchte Byte hat also in oktaler Schreibweise die Nummer o676. Wir können uns daher bei der Anzeige der Partitionierungsdaten auf die letzten 6 Zeilen beschränken. Hier hilft uns der Befehl tail weiter. Dieser zeigt die letzten Zeilen (normalerweise 10) einer Datei oder eines Datenstroms an.
defiant:~ # od -t x1 mbr.dmp | tail -6 0000660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 0000700 01 00 0b ef 7f b7 3f 00 00 00 41 83 65 00 00 00 0000720 41 b9 83 ef ff 59 90 be 65 00 10 35 60 00 00 00 0000740 c1 5a 0f ef ff ff a0 f3 c5 00 90 be 65 00 00 00 0000760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa 0001000
| Partition | BF AK AS AC PT EK ES EC | Start-Sektor | Anzahl Sektoren |
| 1 | 80 01 01 00 0b ef 7f b7 | 3f 00 00 00 | 41 83 65 00 |
| 2 | 00 00 41 b9 83 ef ff 59 | 90 be 65 00 | 10 35 60 00 |
| 3 | 00 00 c1 5a 0f ef ff ff | a0 f3 c5 00 | 90 be 65 00 |
| 4 | 00 00 00 00 00 00 00 00 | 00 00 00 00 | 00 00 00 00 |
Auf der Festplatte sind drei Partitionen eingetragen. Die erste Partition ist aktiv, da der Wert 0x80 im ersten Byte steht. Im Byte für den Partitionstyp steht der Wert 0x0b. Es handelt sich daher um eine ``Win95 FAT32''-Partition.
Die Angaben für Start-Sektor und die Anzahl der Sektoren sind als 4-Byte-Wert angegeben. Dabei steht das niedrigwertigste Byte links. Also steht hinter der Bytefolge 3f 00 00 00 die hexadezimale Zahl 0x3f (dezimal 63) und hinter der Bytefolge 41 83 65 00 die Zahl 0x658341 (dezimal 6.652.737). Da jeder Sektor 512 Bytes groß ist hat die Partition eine Größe von ca. 3,2 GB.
Die zweite Partition ist nicht aktiv. Sie ist vom Typ Linux (0x83), beginnt bei Sektor 6.667.920 (0x65be90) und ist ca. 3 GB (0x603510 Sektoren) groß.
Bei der dritten Partition handelt es sich um eine erweiterte Partition (0x0f = ``Win95 Erweitert (LBA)''). Sie beginnt bei Sektor 12.972.960 (0xc5f3a0) und ist ca. 3,2 GB (0x65be90 Sektoren) groß.
mount [OPTIONEN] [GERÄT] MOUNTPOINT
| Optionen | |
| -a | Mounte alle Dateisysteme, die in /etc/fstab aufgeführt werden. |
| -f | Überprüfe ob das angegebene Dateisystem gemountet werden kann |
| -n | Schreibe die Mount-Informationen nicht in die Datei /etc/mtab |
| -o OPTION | Modifikatoren für den Mountvorgang (siehe Tabelle 10.2) |
| -r | Mounten nur mit Leseberechtigung (read only) |
| -t DSTYP | Typ für das zu mountende Dateisystems |
| -v | Angabe der Mount-Informationen |
| -w | Mounten mit Schreibberechtigung (Standard) |
|
Der Aufruf von mount ohne Parameter zeigt die Liste aller Dateisysteme an, die in diesem Moment gemountet sind.
tapico@defiant:~ > mount /dev/hda3 on / type ext2 (rw) proc on /proc type proc (rw) /dev/hda1 on /c type vfat (rw) /dev/hda5 on /d type vfat (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=0620) /dev/fd0 on /a type vfat (rw,noexec,nosuid,nodev,user=tapico)
Beim Einbinden eines Dateisystems mit mount wird die Datei /etc/fstab ausgewertet. Wenn das Gerät in der Datei angegeben ist, so reicht für das Mounten die Angabe des Mount Points aus.
mount /floppy
Außerdem werden die Angaben für dieses Gerät aus der Datei entnommen. Änderungen der gegebenen Modifikatoren kann über den Schalter -o erfolgen.
mount /a
Ist dies nicht der Fall, so kann das Gerät über
mount -t vfat /dev/fd0 /a
gemountet werden. Dies ist aber nur root erlaubt.
Um einen Datenträger, der nur lesbar (Read Only) gemountet wurde, auch schreibar zu machen, muß der Datenträger nicht extra ausgebunden werden. Er kann auch mit anderen Optionen erneut gemountet werden. Dazu wird die Option remount benutzt.
enterprise:~ # mount -o remount,rw /dev/hda6
enterprise:~ # type remount
remount is a function
remount ()
{
/bin/mount -o remount,${1+"$@"}
}
Die richtige Form des erneuten Einbinden eines Datenträgers im Schreibmodus wäre dann:
enterprise:~ # remount rw /dev/hda6
Der umount-Befehl10.1 entfernt ein Dateisystem aus dem aktuellen Verzeichnisbaum.
umount [OPTIONEN] [GERÄT] [MOUNTPOINT]
| Optionen | |
| -a | Unmounte alle Dateisysteme, die in /etc/mtab aufgeführt werden. |
| -n | Schreibe die Mount-Informationen nicht in die Datei /etc/mtab |
| -t DSTYP | Typ für das zu unmountende Dateisystems |
Durch den Befehl umount wird auch der Befehl sync aufgerufen, damit vor dem Entfernen des Dateisystems dieses mit dem Cache abgeglichen wird.
syncDer sync-Befehl ruft einfach die Kernel-Prozedur sync auf. Diese wird auch vom Befehl umount zum sauberen Aushängen von Dateisystemen benutzt
tapico@defiant:~ > cat /etc/fstab /dev/hda3 / ext2 defaults 1 1 /dev/hda1 /c vfat defaults 0 0 /dev/hda5 /d vfat defaults 0 0 /dev/hda4 swap swap defaults 0 0 /dev/hdc /cdrom iso9660 ro,noauto,user 0 0 /dev/fd0 /floppy auto noauto,user 0 0 /dev/fd0 /a vfat noauto,user 0 0 proc /proc proc defaults 0 0
Die Spalten bedeuten von links nach rechts:
tapico@defiant:~ > cat /etc/mtab /dev/hda3 / ext2 rw 0 0 proc /proc proc rw 0 0 /dev/hda1 /c vfat rw 0 0 /dev/hda5 /d vfat rw 0 0 devpts /dev/pts devpts rw,gid=5,mode=0620 0 0 /dev/fd0 /a vfat rw,noexec,nosuid,nodev,user=tapico 0 0Die Ähnlichkeit mit der Ausgabe des Befehls mount ist nicht zu übersehen.
Seit Kernel 2.1.21 sind diese Dateisysteme nicht mehr dabei.
Nachdem Sie also die Partitionen angelegt haben, muß die Partition noch formatiert werden. Dafür wird der Befehl mkfs verwendet.
mkfs [-t DSTYP] GERÄT [BLOCKS]
| Optionen | |
| -t DSTYP | Legt den Dateisystemtyp fest |
| -v | Zeigt alle Kommandos an |
| -c | Überprüft nach defekten Blöcken vorm Anlegen des Dateisystems |
| -l DATEINAME | Benutzt die angegeben Datei als Liste für bekannte defekte Blöcke |
Normalerweise ruft mkfs andere Kommandos auf, die für das jeweilige mit -t angegebene Dateisystem programmiert wurden. Z. B. sind dies mkfs.ext2, mkfs.msdos und mkfs.minix. Sie können diese Programme auch direkt nutzen. Natürlich darf für diesen Vorgang der Datenträger nicht gemountet sein. Normalerweise kann mkfs nur von dem Benutzer root ausgeführt werden. Um normalen Benutzern trotzdem das Formatieren von Disketten zu erlauben, muß root ein passendes Skript (9.1.4) zur Verfügung stellen.
mkfs -t ext2 /dev/hda3 1477980
fdformat [OPTIONEN] GERÄT
Dabei wird für das Diskettenlaufwerk A: die Bezeichnung /dev/fd0 und für Laufwerk B: die Bezeichnung /dev/fd1 verwendet. Es können über andere Gerätenamen verschiedene Formatierungen durchgeführt werden. Hier eine Liste von Gerätenamen10.2 für das Laufwerk A:.
root@defiant:/dev > ls fd0* fd0 fd0h1440 fd0h360 fd0h880 fd0u1600 fd0u1760 fd0u3200 fd0u720 fd0CompaQ fd0h1476 fd0h410 fd0u1040 fd0u1680 fd0u1840 fd0u3520 fd0u800 fd0d360 fd0h1494 fd0h420 fd0u1120 fd0u1722 fd0u1920 fd0u360 fd0u820 fd0h1200 fd0h1600 fd0h720 fd0u1440 fd0u1743 fd0u2880 fd0u3840 fd0u830
Ein normaler Benutzer kann allerdings nur das Standardformat (/dev/fd0 und /dev/fd1) für die Formatierung verwenden. Außerdem darf das Laufwerk nicht gemountet sein, was bei einer vorformatierten Diskette durchaus möglich ist.
Dieses Verfahren zur Vergrößerung des Arbeitsspeichers wird als Paging bezeichnet. Wenn der physikalischer Speicher knapp wird, werden Memory-Pages (Speicherseiten) auf die Festplatte ausgelagert. Diese Speicherseiten haben meistens eine Größe von 4096 Bytes also 4 KByte. Bei Bedarf werden dann die ausgelagerten Seiten wieder in den physikalischen Arbeitsspeicher geladen.
Natürlich kann ein solcher Swap-Speicher keinen physikalischen Speicher ersetzen. Der Zugriff auf die Festplatte ist im Schnitt um den Faktor 10.000 langsamer als der Zugriff auf RAM-Speicher. Seine gute Funktion zeigt der Auslagerungspeicher, wenn mehrere Programme gleichzeitig laufen. Im Zeitalter der GUI-Programme belegen laufende Programme oft nur Speicher, während Sie die wenig belasten. Dies liegt daran, daß sie die meiste Zeit nur darauf warten, daß der Benutzer endlich etwas tut. Beim Wechsel zwischen den Programmen merkt man deutlich die Verzögerung beim Schreibung- und Rückschreiben der Speicherseiten. Die eigentlich Programmausführung des aktiven Programms ist aber genau so schnell wie auch sonst, da sich seine Speicherseiten im physikalischen Arbeitsspeicher befinden.
Für die Größe der Swap-Partition gibt es eine Faustregel. Der Auslagerungsspeicher sollte immer doppelt so groß sein, wie der eingebaute Arbeitsspeicher. Dabei sollte eine Größe von 16 MB für die Swap-Partitione nicht unterschritten werden um eine gute Funktion des Betriebssystems zu gewährleisten.
Früher war die maximale Größe der Swap-Partition auf 128 MB beschränkt. Allerdings können bis zu 16 Swap-Partitionen eingerichtet werden, so daß eine Gesamtkapazität von 2 GB für die Auslagerungsdatei zur Verfügung stand. Seit Kernel 2.1.117 darf die Swap-Partition bis zu 2 GB groß werden. Die Anzahl der Swap-Partitionen kann bei der Kompilierung des Kernels festgelegt werden. Der entsprechende Eintrag beim Kernel 2.4.1810.3 in der Kernel-Headerdatei /usr/src/linux-2.4.18/include/linux/swap.h lautet:
#define MAX_SWAPFILES 32
Danach sollten bis zu 32 Swap Partitionen bei diesem Kernel möglich sein. Maximal unterstützt der Kernel 64 Swap-Partitionen.
Um die Zugriffsgeschwindigkeit zu erhöhen ist es sinnvoll die Swap-Partitionen auf mehrere Platten zu verteilen. Da die einzelnen Partitionen dann zu einem logischen Bereich zusammengezogen werden, bilden sie praktisch ein RAID Level 0. Bei IDE-Platten ist es dann noch von Vorteil, wenn beide Platten an einem seperaten Controller hängen.
Wenn Sie meinen, sie haben genügend Speicher, dann können Sie auch mit der Formel ``eins zu eins'' arbeiten. Dies ist vor allem bei Serversystemen sinnvoll, die mit extra viel Speicher bestückt worden sind um Festplattenzugriffe zu verringern.
Wenn Sie allerdings meinen zu wenig Platz zu haben, dann können Sie die Swap-Partition auch auf die dreifache Arbeitsspeichergröße setzen.10.4
Sollten Sie auf der Festplatte nicht genügend Speicher oder Partitionsplatz besitzen, so können Sie auch eine Swap-Datei (swap file) einrichten. Dies ist allerdings nicht so effektiv wie eine seperate Partition. Sollte ihr Rechner 4 MB oder weniger Arbeitsspeicher besitzen, so benötigen Sie auf jeden Fall eine Swap-Partition.
Sie besitzen einen Rechner mit 128 MB RAM. Nach der Formel sollten Sie einen Swap-Bereich von 256 MB einrichten. Da eine Swap-Partition aber nur 128 MB groß sein darf, legen Sie zwei Partitionen mit jeweils 128 MB an.
Ein Datei-Server wurde für den schnellen Dateizugriff mit 512 MB RAM bestückt. Da Zugriffe auf die Festplatte möglichst vermieden werden sollen, reichen vier Swap-Partitionen á 128 MB.
Ihr alter 486er Rechner soll als Router eingesetzt werden. Da er nur 4 MB RAM besitzt, müssen Sie eine Swap-Partition einrichten um Linux installieren zu können. Dabei sollte die Swap-Partition mindestens eine Größe von 16 MB aufweisen.
Um eine zusätzliche Swap-Partition einzurichten müssen Sie auf der Festplatte eine neue Partition anlegen. Dies können Sie mit dem Befehl fdisk (10.1.1) erledigen.
Nehmen wir einfach mal an, daß Sie eine zweite Festplatte (/dev/hdb) in Ihren Rechner eingebaut haben. Um die Swap-Performance zu verbessern, sollten Sie auf dieser zweiten Platte auch eine Swap-Partition einrichten. Starten Sie also das Programm fdisk.
enterprise:~ # fdisk /dev/hdb The number of cylinders for this disk is set to 5005. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Befehl (m für Hilfe):
Mit dem Befehl n legen wir nun eine neue Partition an. Und zwar eine primäre Partition mit der Größe von 256 MB.
Befehl (m für Hilfe): n Befehl Aktion l Logische Partition (5 oder größer) p Primäre Partition (1-4) p Erster Zylinder (1-5005) [Standardwert: 1]: Benutze den Standardwert 1 Letzter Zylinder oder +Größe, +GrößeK oder +GrößeM (1-5005) [Standardwert: 5005]: +256M
Mit dem Befehl p überprüfen wir den Eintrag in der Partitionstabelle und notieren uns die Werte.
Befehl (m für Hilfe): p
Festplatte /dev/hdb: 255 Köpfe, 63 Sektoren, 5005 Zylinder
Einheiten: Zylinder mit 16064 * 512 Bytes
Gerät boot. Anfang Ende Blöcke Id Dateisystemtyp
/dev/hdb1 1 34 273088 82 Linux Swap
Nun brauchen wir nur noch mit w die Partitionstabelle zu schreiben und das Programm zu verlassen. Danach muß der Rechner neu gestartet werden, damit die neue Partitionstabelle übernommen wird.
enterprise:~ # dd if=/dev/zero of=/swap bs=1024 count=16384 16384+0 Records ein 16384+0 Records aus enterprise:~ # ls -l /swap -rw-r--r-- 1 root root 16777216 Nov 17 12:15 /swap
Das Gerät /dev/zero ist praktisch das Gegenteil von /dev/null. Während /dev/null praktisch ein WOM (Write Only Memory) ist, der alle Informationen schluckt und Sie nicht wieder hergibt, ist /dev/null ein unendlich großer Datenträger, auf dem aber nur Nullen stehen. Der obige Befehl liest praktisch 16384 Blöcke mit 1024 Bytes von diesem Gerät und schreibt Sie in die Datei /swap.
Nach dem Anlegen der Datei sollten Sie sicherheitshalber mit dem Befehl sync (10.3.4) die Dateisysteme wieder synchronisieren.
Auf keinen Fall darf die Swap-Datei eine Lücke besitzen. Die Blöcke der Datei müssen sich hintereinander auf der Platte befinden.
mkswap -c GERÄTENAME
GERÄTENAME steht für den Namen der Partition bzw. der Datei. Der Schalter -c ist optional und bewirkt, daß der Swap-Bereich bei der Formatierung auf fehlerhafte Blöcke untersucht wird.
Nehmen wir als Beispiel mal die oben angelegte Swap-Partition. Mit dem folgenden Befehl wird sie als Swap-Bereich formatiert.
enterprise:~ # mkswap -c /dev/hdb1 Swapbereich Version 1 mit der Größe 279642112 Bytes wird angelegt
Die Swap-Datei wird analog angelegt. Nur daß anstatt des Gerätenamens, der Dateiname angegeben wird.
enterprise:~ # mkswap -c /swap Swapbereich Version 1 mit der Größe 16773120 Bytes wird angelegt enterprise:~ # sync
Nach dem Einrichten einer Swap-Datei sollten Sie immer das Dateisystem mit sync synchronisieren um sicherzugehen, daß die Informationen auch physikalisch auf die Platte übertragen worden sind. Dies ist bei der Swap-Partition natürlich nicht nötig.
Als Beispiel schauen wir uns doch mal die Einbindung unserer Swap-Datei ins System an.
enterprise:~ # free
total used free shared buffers cached
Mem: 513448 466992 46456 0 63500 258672
-/+ buffers/cache: 144820 368628
Swap: 1028120 0 1028120
enterprise:~ # swapon /swap
enterprise:~ # free
total used free shared buffers cached
Mem: 513448 467032 46416 0 63528 258672
-/+ buffers/cache: 144832 368616
Swap: 1044496 0 1044496
enterprise:~ # swapoff /swap
enterprise:~ # free
total used free shared buffers cached
Mem: 513448 467036 46412 0 63536 258672
-/+ buffers/cache: 144828 368620
Swap: 1028120 0 1028120
Auf jeden Fall sollten Sie eine Swap-Datei nur dann löschen, wenn Sie sie vorher mit swapoff deaktiviert haben.
Wie üblich ist dieser Befehl nicht von Dauer. Nach einem Reboot ist der Swap-Bereich wieder inaktiv. Die Swap-Bereich müssen also bei jedem Start initalisiert werden. Dies geschieht mit dem Befehl swapon -a in einer der Startdateien.
swapon -a liest die Informationen aus der Datei /etc/fstab aus. Wenn dort Informationen des Typs
/dev/hda6 swap swap sw 0 0
bzw.
/dev/hdb1 swap swap pr=42 0 0
dann werden die jeweiligen Swap-Bereiche beim Booten initialisiert. Sie sollten für jeden neu angelegten Swap-Bereich einen Eintrag zur /etc/fstab hinzufügen.
mkswap [OPTIONEN] GERÄT [GRÖSSE]
Der Parameter GERÄT kann die Bezeichnung für eine Partition (z. B. /dev/hdb3) oder der Name einer Datei sein.
Die Angabe der Größe des Swap-Bereichs ist heute nicht mehr nötig und existiert nur noch aus Kompatibilitätsgründen. Der Befehl nutzt den zur Verfügung stehenden Platz in der Partition bzw. in der angelegten Datei voll. Eine falsche Angabe der Größe kann zu Schäden auf der Festplatte führen. Also lieber Finger weg von diesem Parameter.
| Optionen | |
| -c | Testen auf fehlerhafte Blocks vorm Formatieren (check) |
| -f | Erlaubt auch die Ausführung mit unsinnigen Parametern (force) |
| -p GRÖSSE | Größe der verwendeten Speicherseiten (page) |
| -v0 | Erstellt einen Swap-Bereich im alten Format |
| -v1 | Erstellt einen Swap-Bereich im neuen Format (Standard) |
swapon [OPTIONEN] swapon [OPTIONEN] SWAPBEREICH
| Optionen | |
| -h | Hilfe (help) |
| -V | Versionsnummer (version) |
| -s | Übersicht über die Swap-Bereiche (summary) |
| -a | Alle Swap-Bereiche aus /etc/fstab mit der Option sw bzw. pri werden initialisiert. (all) |
| -p PRIORITÄT | Gibt die Priorität des Swap-Bereichs an (Wert zwischen 0 und 32767), steht seit Kernel 1.3.2 zur Verfügung (priority) |
Die Option sich eine Übersicht über die Swap-Bereiche anzeigen zu lassen steht nur dann zur Verfügung, wenn /proc/swaps existiert. Dies ist erst seit Kernel 2.1.25 der Fall.
enterprise:/home/ole # ls -l /proc/swaps -r--r--r-- 1 root root 0 Nov 17 13:38 /proc/swaps enterprise:/home/ole # cat /proc/swaps Filename Type Size Used Priority /dev/hdb6 partition 1028120 0 42 /swap file 16376 0 -2 enterprise:/home/ole # swapon -s Filename Type Size Used Priority /dev/hdb6 partition 1028120 0 42 /swap file 16376 0 -2
Um den Befehl jedesmal beim Starten ausführen zu können, wird er in einer der Startdateien des Systems eingetragen. Diese befinden sich meistens im Verzeichnis /etc/rc.d. Unter SuSE (8.0) ist /etc/rc.d ein Link auf /etc/init.d. Dort findet sich der Eintrag in den Dateien boot.localfs und boot.swap.
enterprise:/etc # ls -ld init.d rc.d drwxr-xr-x 11 root root 4096 Jul 15 21:54 init.d lrwxrwxrwx 1 root root 6 Mai 2 2002 rc.d -> init.d enterprise:/etc # cd init.d/ enterprise:/etc/init.d # grep -l swapon * 2> /dev/null boot.localfs boot.swap enterprise:/etc/init.d # grep -n swapon * 2> /dev/null boot.localfs:29: swapon -a &> /dev/null boot.swap:26: # .. this should work know with the new swapon behavio(u)r boot.swap:29: swapon -a &> /dev/null
swapoff [OPTIONEN] swapoff SWAPBEREICH
| Optionen | |
| -h | Hilfe (help) |
| -V | Versionsnummer (version) |
| -s | Übersicht über die Swap-Bereiche (summary) |
| -a | Alle Swap-Bereiche aus /etc/fstab mit der Option sw bzw. pri werden aus dem System entfernt. (all) |
Gewöhnliche Dateien sind die Dateien, die mit einer mehr oder weniger gewöhnlichen Anwendung erzeugt werden - der Text, der mit einer Textverarbeitung erstellt wird, die Daten einer Datenbank-, die Tabelle eines Kalkulationsprogramms oder auch die Zeilen eines Shell-Skripts, Tabellen, die von LINUX zu diversen Verwaltungszwecken benutzt werden, wie etwa die Paßwortdatei /etc/passwd und nicht zuletzt Programmdateien. Gewöhnliche Dateien sind solche Dateien, deren Inhalt für den einzelnen Anwender direkt oder indirekt von Interesse ist (am Text den man geschrieben hat ist man direkt interessiert, der Inhalt der Datei /etc/passwd ist für jeden Anwender deshalb von Belang, weil über ihn der Zugang zum System ermöglicht sowie ein Teil der persönlichen Arbeitsumgebung bereitgestellt wird).
Verzeichnisse ermöglichen eine strukturierte Dateiverwaltung. Die Organisation der Daten wird durch sie wesentlich vereinfacht. Verzeichnisse sind Tabellen mit den Namen von Dateien sowie einem Vermerk, über den das System den Zugriff auf die Daten in den Dateien steuert. Die Anzahl der gewöhnlichen Dateien ist schon in einem Einplatzsystem wie DOS oder Windows 95 so groß, daß ein Ordnungsprinzip erforderlich wird. So war ein wesentlicher Grund für die erste Überarbeitung des Betriebsystems DOS (Einführung der Version 2.0) die Verwendung von Festplatten für den IBM PC-XT. Diese ermöglichten die Speicherung großer Datenmengen. Die Hierarchie der DOS-Dateiverwaltung kannte bis dahin in Anlehnung an das System CP/M Laufwerke (Disketten!) und Dateien. Da nun die Anzahl der Dateien sehr hoch sein konnte, führten die Microsoft-Programmierer in DOS die Verzeichnisse als Verwaltungsinstrument hinzu. Somit kennt DOS drei Hierarchieebenen in der Dateiverwaltung: Laufwerk (aus CP/M geerbt), Verzeichnisse und - natürlich - gewöhnliche Dateien. Daß dabei die Verzeichnisse und ihr Handling im wesentlichen aus Unix übernommen wurden, erleichtert es den heutigen LINUX-Programmierern, den Zugriff auf DOS-Daten zu realisieren; denn Dateien und Verzeichnisse sind in DOS und LINUX prinzipiell sehr ähnlich.
Gerätedateien vereinfachen den Zugriff des Anwenders auf die Hardware. Sie sind im Prinzip Verweise auf die entsprechenden Treiber im LINUX-Kernel. Sollen etwa Daten auf den Bildschirm ausgegeben werden, so kann der Prozeß, der diese Aufgabe zu erledigen hat, die Daten einfach in die zugehörige Gerätedatei, dies könnte z. B. tty01 sein, kopieren. Dadurch wird der zuständige Gerätetreiber im Kernel zur Ausgabe auf dem Bildschirm veranlaßt.
Named Pipes oder FIFOs sind eines der vielen Mittel, die LINUX für die Kommunikation zwischen Prozessen (kurz IPC für Inter Process Communication) bereitstellt. Vereinfacht gesagt ist ein Prozeß ein laufendes Programm. Solch ein Prozeß kann Daten in eine FIFO schreiben, die dann von einem anderen Prozeß gelesen werden können. Eine Variante dieser Möglichkeit des Datenaustausches zwischen Programmen kennen wir schon. Eine Kommandozeile wie
ls -l | more
dürfte Ihnen in ihrer Bedeutung klar sein.10.5 Der Befehl ls leitet seine Daten statt auf den Bildschirm an den Pager more weiter, der sie so bearbeitet, daß er sie bildschirmseitenweise anzeigt. Bei Linux handelt es sich um temporäre Objekte, die von Prozessen benutzt werden können, die durch ein und dieselbe Befehlszeile gestartet wurden. Named Pipes dagegen werden als besondere Dateien angelegt und können von Prozessen benutzt werden, die unabhängig voneinander sind.
Sockets dienen, wenn man so will, ebenfalls der IPC. Dabei geht es aber nicht um Kommunikation zwischen Prozessen in einem LINUX/Unix-Rechner. Sockets ermöglichen Kommunikation über ein Netz hinweg. Dabei kann durchaus einer der beteiligten Kommunikationsteilnehmer ein Nicht-Unix -Programm sein, d.h. Sockets ermöglichen durchaus Kommunikation zwischen einem Prozeß, den ein Benutzer auf einem LINUX-Rechner startet einerseits, und einer DOS-Anwendung auf einem weit entfernten PC andererseits. Da nun DOS als Einplatzsystem keine Prozesse kennt, lassen sich Sockets nicht eindeutig der IPC zuordnen. Im wesentlichen steckt hinter den Sockets jedoch ein dem Pipelining verwandtes Prinzip des verbindungsorientierten Datenaustausches. Sie ermöglichen also die Weitergabe von Daten, in diesem Falle sogar via Netzwerk.
Links sind keine eigentlichen Dateien, sondern lediglich Verweise auf solche. Im Zusammenhang mit den Inodes werden wir Links genauer untersuchen können.
mkfifo [OPTIONEN] NAME
Die Befehlszeile
mkfifo testpipe
würde z. B. eine Named Pipe mit Namen testpipe erzeugen. Genutzt werden könnte sie dann wie folgt:
ls /dev > testpipe & less < testpipe
ls /dev zeigt die Namen aller Gerätedateien (genauer: aller Dateien des Verzeichnisses /dev). In diesem Fall werden die Daten in die Named Pipe umgeleitet statt auf dem Bildschirm ausgegeben. Der Befehl less liest die Daten aus testpipe und gibt sie bildschirmseitenweise aus. Das & zwischen den Befehlen sorgt dafür, daß beide Teilbefehle nacheinander als Prozesse gestartet werden, allerdings ohne daß auf ihr Ende gewartet werden müßte.
Insgesamt werden in diesem Beispiel also die Namen aller Gerätedateien bildschirmseitenweise angezeigt. Dieses Beispiel stellte die Named Pipes nur prinzipiell vor. Als Benutzer wird man in der gegebenen Situation eine gewöhnliche Pipe vorziehen:
ls /dev | less
Im Gegensatz zu MS-DOS unterscheidet LINUX bei Dateinamen zwischen Groß- und Kleinschreibung. TAPICO, Tapico und tapico sind drei verschiedene Dateinamen. Aus praktischen Gründen werden die Dateinamen meistens klein geschrieben.
Bei Pfadangaben werden die einzelnen Verzeichnisse durch einen Schrägstrich / (slash) getrennt. Daher ist dieses Zeichen für Dateinamen verboten. Auch das Minuszeichen kann am Anfang einer Datei Probleme bereiten. So stellt sich bei
ls -fault
die Frage, ob nun die Datei -fault oder die Schalter f, a, u, l und t gemeint sind.
Probleme bereiten auch die nichtdruckbaren (ASCII-)Zeichen 0 bis 32 sowie
< > | * ? [ ] { } ( ) $ ` ´ " ! ; \ # ^
Diese Zeichen sind nicht verboten, können aber große Probleme bereiten und sollten deshalb auch vermieden werden.
Die Inode speichert alle Verwaltungsinformationen über die Datei. Da die Benutzer in aller Regel besser mit Namen als mit Nummern arbeiten können, bietet Linux folgende einfache Schnittstelle zwischen Benutzer und Dateisystem an. Der Benutzer verwendet in den Befehlen einen Dateinamen. Die benutzte Shell, z. B. die bash, ermittelt über den Verzeichniseintrag, den Link, die zugehörige Inode. Jeder Dateiname ist mit genau einer Inode verbunden. Dagegen kann eine Inode durch mehrere Dateiname referenziert werden. Deshalb kann eine Datei nicht nur einen Dateinamen besitzen. Wird die Inode beschädigt, dann kann auf die Datei nicht mehr zugegriffen werden. Um die Inodes der Dateien zu bestimmen, wird der Schalter -i des Befehls ls eingesetzt.
tapico@defiant:/ > ls -aFi
2 ./ 1 d/ 11 lost+found/ 10241 tmp/
2 ../ 38914 dev/ 124929 mnt/ 165 trellwan
305412 a/ 2049 etc/ 126977 opt/ 83969 usr/
59393 bin/ 118785 floppy/ 1 proc/ 12289 var/
51201 boot/ 120833 home/ 69633 root/
1 c/ 117000 kurs/ 55297 sbin/
112641 cdrom/ 65537 lib/ 211184 seminare/
Besitzen zwei Dateinamen die gleiche Inode, so handelt es sich hierbei um ein und dieselbe Datei. Auffällig ist die Inode 1 bei /proc, /c und /d. Bei proc handelt es sich um ein virtuelles Dateisystem zur Prozessüberwachung. /c und /d sind eingebundene FAT16-Dateisysteme von Windows. Ihnen wird daher auch keine ``richtige'' Inode zugewiesen.
stat DATEINAMEAllerdings ist er nicht auf jedem System zu finden. Bei SuSE muß das Paket explizit installiert werden.
Ein Link kann dazu benutzt werden einem anderen Benutzer Zugriff auf eine Datei zu gewähren. Als Erstes bekommt der andere Benutzer Rechte auf die Datei und evt. auf das Verzeichnis. Danach kann er einen Link auf die Datei in seinem Heimatverzeichnis anlegen. Dadurch erhält er einen vereinfachten Zugriff auf den Inhalt der Datei.
Durch die Benutzung von Links brauchen oft keine Kopien von Dateien erstellt werden. Dies spart Speicherplatz und erleichtert die Aufgabe des Systemadministrators alle Dateien auf dem neuesten Stand zu halten.
Daneben können große Verzeichnisbäume übersichtlicher gestaltet werden. Z. B. landen alle Auswertungsergebnisse in einem Verzeichnis data. In den Verzeichnissen helios und ulysses können dann Links auf die entsprechenden Datendateien im Verzeichnis data gemacht werden.
Einen Link können Sie nur auf eine existierende Datei anlegen. Er ist ein weiterer Name für die gleiche Datei. Dies wird deutlich wenn Sie sich die Links mit ls -i anzeigen lassen. Beide Links zeigen auf die gleiche Inode. Sie unterscheiden sich nur im Namen und/oder ihrem Ort im Verzeichnisbaum.
tapico@defiant:~/links > ls -il insgesamt 2 111099 -rw-r--r-- 2 tapico users 46 Jan 14 13:41 clarkkent 111099 -rw-r--r-- 2 tapico users 46 Jan 14 13:41 supermanIn der dritten Spalte sehen Sie die Anzahl der harten Links, die auf die Datei zeigen. Lösche Sie nun einen der beiden Links, so bleibt die Datei trotzdem bestehen. Erst wenn alle Links auf die Datei gelöscht sind, die Zahl also auf Null steht, wird die Datei auf wirklich gelöscht.
Es gibt aber auch Einschränkungen für harte Links. So müssen sich alle Links auf dem gleichen Dateisystem befinden. Außerdem ist es einem normalen Benutzer nicht möglich einen Hardlink auf ein Verzeichnis einzurichten. Dies ist nur root vorbehalten.
Symbolische Links werden dann eingerichtet, wenn die Grenzen der harten Links umgangen werden sollen. Symbolische Links können eingerichtet werden für
Wie im Beispiel unten zu sehen, ändert sich das Aussehen des symbolischen Links bei Verwendung des Befehls ls -l. Der Linkname wird durch einen Pfeil und den Namen der Zieldatei ergänzt.
tapico@defiant:~/links > ls -il insgesamt 2 111099 -rw-r--r-- 2 tapico users 46 Jan 14 13:41 clarkkent 111101 lrwxrwxrwx 1 tapico users 5 Jan 14 13:51 kurs -> /kurs 111100 lrwxrwxrwx 1 tapico users 9 Jan 14 13:50 superheld -> clarkkent 111099 -rw-r--r-- 2 tapico users 46 Jan 14 13:41 superman
Die Funktion der Befehle cd und pwd kann sich bei gelinkten Verzeichnissen je nach Shell unterscheiden. In der bash zeigt, wenn wir dem Link kurs gefolgt sind, z. B. der Befehl pwd das Arbeitsverzeichnis über die verlinkte Struktur an. Der Befehl cd .. führt auch in das Verzeichnis mit dem Link zurück.
tapico@defiant:~/links > cd kurs tapico@defiant:~/links/kurs > pwd /home/tapico/links/kurs tapico@defiant:~/links/kurs > cd .. tapico@defiant:~/links > pwd /home/tapico/links
In anderen Shells führt der Link an den Ort der normalen Struktur. Das aktuelle Verzeichnis ist dann nicht mehr durch den symbolischen Link gegeben, sondern durch den harten Link des Verzeichnisses.
ln [OPTIONEN] DATEINAME NEUERLINK
Ist NEUERLINK ein Verzeichnis und die Optionen -d und -F sind nicht gegeben, so wird in dem Verzeichnis ein Link mit dem Namen DATEINAME angelegt.
| Optionen | |
| -d | Legt einen Link auf ein Verzeichnis an (Nur Superuser) |
| -F | Legt einen Link auf ein Verzeichnis an (Nur Superuser) |
| -s | Legt einen symbolischen Link an |
Einen harten oder symbolischen Link können Sie durch den Befehl rm entfernen.
Anstatt Kopien von Dateien zu erstellen, kann der Befehl cp auch Hard- und Softlinks anlegen. Für eine Hardlink geben Sie die Option -l an und für einen Softlink die Option -s.
ole@enterprise:~/test> ls -ilG insgesamt 8 147475 -rw-r--r-- 1 ole 78 2004-06-28 21:46 blubb 147479 -rw-r--r-- 1 ole 144 2004-06-28 21:46 fasel ole@enterprise:~/test> cp -l blubb blubber ole@enterprise:~/test> cp -s fasel fusel ole@enterprise:~/test> ls -ilG insgesamt 12 147475 -rw-r--r-- 2 ole 78 2004-06-28 21:46 blubb 147475 -rw-r--r-- 2 ole 78 2004-06-28 21:46 blubber 147479 -rw-r--r-- 1 ole 144 2004-06-28 21:46 fasel 147481 lrwxrwxrwx 1 ole 5 2004-06-28 21:47 fusel -> fasel
Eine besondere Situation tritt auf, wenn Softlinks kopiert werden sollen. Denn hier stellt sich die Frage was denn nun eigentlich kopiert werden soll: Der Link oder die Datei, auf die der Link zeigt.
Wenn der Befehl cp ohne Option verwendet wird, wird die verlinkte Datei kopiert.
ole@enterprise:~/test> cp fusel fiesel ole@enterprise:~/test> ls -ilG 147479 -rw-r--r-- 1 ole 144 2004-06-28 21:46 fasel 147483 -rw-r--r-- 1 ole 144 2004-06-28 21:53 fiesel 147481 lrwxrwxrwx 1 ole 5 2004-06-28 21:47 fusel -> fasel
Bei der Verwendung des Schalters -d werden die Softlinks auch als Links kopiert.
ole@enterprise:~/test> ls -ilG 147485 lrwxrwxrwx 1 ole 5 2004-06-28 21:58 dusel -> fasel 147479 -rw-r--r-- 1 ole 144 2004-06-28 21:46 fasel 147483 -rw-r--r-- 1 ole 144 2004-06-28 21:53 fiesel 147481 lrwxrwxrwx 1 ole 5 2004-06-28 21:47 fusel -> fasel
Und wie sieht es bei Kopien über ganze Verzeichnisebenen hinweg aus? Der Link wird genau so kopiert, wie er auch dasteht. Relative Links bleiben relative Links und die Pfade werden nicht angepaßt. Sein Ziel muß also entsprechend mitkopiert werden. Bei absoluten Links, wo der Pfad an der Wurzel beginnt, gibt es das Problem nicht. Sie zeigen weiterhin auf die ursprüngliche Datei. Beide Verfahren haben Ihre Vor- und Nachteile.
ole@enterprise:~/test> cp -d /usr/bin/bunzip2 entpack ole@enterprise:~/test> cp -d /usr/X11/bin/X klickibunti ole@enterprise:~/test> ls -ilG 147475 lrwxrwxrwx 1 ole 5 2004-06-28 22:01 entpack -> bzip2 147479 lrwxrwxrwx 1 ole 16 2004-06-28 22:03 klickibunti -> /var/X11R6/bin/X
du [OPTIONEN] [DATEINAME]
Wird du ohne Dateinamen aufgerufen, dann zeigt es die Daten des aktuellen Arbeitsverzeichnisses an.
| Optionen | |
| -a | Zeige die Nutzung für einzelne Dateien |
| -b | Anzeige des Speicherplatzes in Bytes |
| -c | Zeigt die Summe an |
| -h | Zeigt durch einen Buchstaben die verwendete Einheit an |
| -k | Anzeige des Speicherplatzes in Kilobytes (normal) |
| -m | Anzeige des Speicherplatzes in Megabytes |
| -l | Zählt auch die Links |
| -s | Gibt nur die totale Summe aus |
Ohne den Schalter -a zeigt du nur die Verzeichnisse.
tapico@defiant:~ > du -c test 1259 test/mytest/textfilter 1263 test/mytest 14761 test/log 17453 test 17453 insgesamt
df [OPTIONEN] [DATEINAME]
Wird eine Datei oder ein Verzeichis mit angegeben, so zeigt df die Daten der Partition an, auf der diese Datei bzw. dieses Verzeichnis liegt. Ansonsten zeigt das Kommando eine Übersicht aller Partitionen an.
| Optionen | |
| -a | Liefert Informationen über alle Dateisysteme (normal) (all) |
| -h | Zeigt durch einen Buchstaben die verwendete Einheit an(human readable) |
| -i | Zeigt die Nutzung der Inodes an(inode) |
| -k | Anzeige des Speicherplatzes in Kilobytes (normal)(kilobyte) |
| -m | Anzeige des Speicherplatzes in Megabytes(megabyte) |
| -t DSTYP | Zeigt nur Dateisysteme vom Typ DSTYP(typ) |
| -T | Zeigt den Dateisystemtyp für jeden Eintrag(typ) |
| -x DSTYP | Zeigt keine Dateisysteme vom Typ DSTYP(exclude typ) |
--sync |
Startet erst das sync-Kommando |
Als Information liefert df:
tapico@defiant:~ > df Filesystem 1K-Blöcke Benutzt Verfügbar Ben% Eingehängt auf /dev/hda5 5162796 2893372 2007168 60% / /dev/hda6 3099260 325012 2616816 12% /home /dev/hda1 4096540 2525980 1570560 62% /windows/C tmpfs 127828 0 127828 0% /dev/shm /dev/sda1 127620 55962 71658 44% /media/sda1
Die Übersicht über die genutzten Inodes mit dem Befehl df -i funktioniert natürlich nur, wenn das Dateisystem auch auf Inodes-Basis arbeitet. Bei anderen Dateisystemen träumt sich Linux etwas im Kaffeesatz. (Hier /dev/hda1 und /dev/sda1.)
tapico@defiant:~ > df -i Filesystem INodes IBenut. IFrei IBen% Eingehängt auf /dev/hda5 656000 162745 493255 25% / /dev/hda6 393600 3110 390490 1% /home /dev/hda1 26619 26603 16 100% /windows/C tmpfs 31957 1 31956 1% /dev/shm /dev/sda1 0 0 0 - /media/sda1
Notizen:
Notizen:
Dateisystem 1
| Dateiname | R | P | F | Dateiname | R | P | F |
abc.txt |
Dies ist Falsch |
||||||
Textdatei |
ls -l |
||||||
-usr |
*.* |
||||||
c:\dos |
this is right |
||||||
pillepallename |
\">$<[!] |
||||||
.. |
... |
||||||
../.. |
calprobedatei1 |
||||||
katalog_1.2.1 |
abc/def/ghi |
||||||
-123 |
123 |
||||||
mc.man.gz |
194.195.155.60 |
||||||
..home |
../home |
Notizen:
Arbeiten mit Disketten
Sie benötigen für die Aufgaben zwei 3,5''-Disketten.
Notizen:
Die Standardgröße für eine Blockgruppe liegt bei 8192 Blöcken und 2048 Inodes, von denen acht reserviert sind.
Blocks per group: 8192
Die Strukturdefinition des Superblocks finden Sie in der Datei /usr/include/linux/ext2_fs.h im Abschnitt Structure of the super block. Die wichtigsten Informationen sind:
dumpe2fs [OPTIONEN] GERÄT
Der Befehl steht nur dem Superuser zur Verfügung. Als Beispiel hier die Ausgabe eine Befehls ohne die Übersicht über die Blockgruppen.
root@defiant:/ > dumpe2fs /dev/hda3 Filesystem volume name: <none> Last mounted on: /mnt Filesystem UUID: 0c7c1f82-510a-11d3-8c57-e447ecb45d66 Filesystem magic number: 0xEF53 Filesystem revision #: 0 (original) Filesystem features: (none) Filesystem state: not clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 370688 Block count: 1477980 Reserved block count: 73899 Free blocks: 203986 Free inodes: 269515 First block: 1 Block size: 1024 Fragment size: 1024 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 2048 Inode blocks per group: 256 Last mount time: Mon Jan 8 20:45:40 2001 Last write time: Mon Jan 8 21:19:10 2001 Mount count: 20 Maximum mount count: 20 Last checked: Mon Dec 18 20:44:00 2000 Check interval: 15552000 (6 months) Next check after: Sat Jun 16 21:44:00 2001 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root)
tune2fs [OPTIONEN] GERÄT
| Optionen | |
| -c MOUNTCOUNTS | Stellt die Anzahl der maximalen Mountcounts zwischen zwei Dateisystemchecks ein |
| -C MOUNTCOUNTS | Trägt die Anzahl der erfolgten Mountcounts ein |
Die weiteren Schalter entnehmen Sie bitte den Man-Pages.
root@defiant:/> tune2fs -c 200 /dev/hda5stellt die Anzahl der maximalen Mountvorgänge zwischen zwei Dateisystemchecks für das Gerät /dev/hda5 auf 200 ein.
Damit die Verzeichnisse gleichmäßig über die Blockgruppen verteilt werden, werden neue Verzeichnisse in dem Block angelegt, der am wenigsten Verzeichnisse enthält.
Die ersten zwölf Einträge verweisen direkt auf jeweils einen Datenblock. Im Normalfall ist dieser logische Block 1024 Bytes groß. Es können also direkt 12 KB adressiert werden. Der Zugriff ist aufgrund der Mechanik des Caches sehr schnell.
Der dreizehnte Eintrag weißt auch auf einen Datenblock. Dieser Datenblock enthält aber wiederum bis zu 256 Adressen von Datenblöcken. Es sind also nun 268 KByte adressierbar.
Der vierzehnte Eintrag weißt auf einen Datenblock der 256 Einträge vom Typ des dreizehnten Eintrags enthält. Er adressiert hier also
Blöcke mit 64 MByte Daten.
Der fünfzehnte Eintrag weißt auf einen Datenblock mit 256 Einträgen vom Typ des vierzehnten Eintrags. Hiermit werden also
Blöcke mit ca.
16,6 GByte adressiert.
In den meisten Fällen basiert ein solcher Dateisystemfehler auf einem Systemabsturz. Der Kernel ist dann nicht mehr in der Lage die im Cache zwischengespeicherten Daten auf die Platte zu schreiben.
fsck [OPTIONEN] [-t DSTYP] [GERÄT]
| Optionen | |
| -a | Das Programm läuft ohne Rückfragen ab (Vorsicht!) |
| -c | Untersucht auf defekte Blöcke |
fsck -t ext2 /dev/hda2
Ist dieses Dateisystem das Wurzel-Dateisystem, dann fragt e2fsck nach, ob der Check auch durchgeführt werden soll. Beim Check werden getestet:
e2fsck [OPTIONEN] GERÄT
| Optionen | |
| -b BLOCK | Die zu benutzende Kopie des Superblocks |
| -f | Führt den Check auch durch, wenn das System sauber erscheint. |
Zum Testen können alle Dateisysteme außer dem Wurzel-System unmountet werden. Das Wurzel-System kann in folgenden Situationen gestestet werden.
e2fsck -f -b 16385 /dev/hda3
badblocks [OPTIONEN] GERÄT [LETZTER-BLOCK] [ERSTER-BLOCK]
Mit der Angabe von ERSTER-BLOCK und LETZTER-BLOCK können sie auch einen Bereich auf dem Gerät bestimmen, welcher untersucht werden soll. Falls nichts angegeben wird, wird vom ersten bis letzten Block alles getestet.
Das Programm badblock sollte möglichst nur auf nicht gemounteten Geräten gestartet werden.
| Optionen | |
-b GROESSE |
Größe der Datenblöcke in Bytes |
-c ZAHL |
Anzahl der Blocks, die auf einmal getestet werden |
-f |
Erlaubt auch die Durchführung bei gemounteten Geräten. Vorsicht! |
-i DATEI |
Liest Liste mit bekannten defekten Blocks ein |
-o DATEI |
Schreibt gefundene defekte Block in die angegebene Datei |
-p VERSUCHE |
Anzahl der Wiederholungen, wenn kein defekter Block gefunden wurde. Defaultwert ist 0 |
-n |
Nicht zerstörender Lese-und-Schreibtest, Defaulteinstellung |
-s |
Zeigt Fortschritt in Form der abgearbeiteten Blocks |
-v |
``Blubbermodus'' |
-w |
Schreibmodus-Test: dieser Test löscht vorhandene Daten |
enterprise:~ # badblocks -p 2 -s /dev/fd0 Checking for bad blocks (read-only test): done Checking for bad blocks (read-only test): done
find [PFAD] [SUCHKRITERIEN]
Werden keine Kriterien angegeben, so zeigt find alle Dateien im Verzeichnis und seinen Unterverzeichnissen an. Wird kein Pfad angegeben, so dient das aktuelle Arbeitsverzeichnis als Startverzeichnis. Um die Anzahl der gefundenen Dateien einzuschränken, können Kriterien für die Eigenschaften der gesuchten Dateien angegeben werden. Tabelle 11.1 liefert einen Überblick über die wichtigsten Kriterien.
|
Einzelne Suchkriterien sind logisch verknüpfbar, d. h., es können Suchkriterien aus verschiedenen Teilbedingungen zusammengesetzt werden. Numerische Angaben als Bestandteil eines Suchkriteriums lassen sich auf drei Weisen benutzen:
N, +N und -N, wobei N eine ganze Zahl ist.
Das Kriterium -links veranlaßt z. B. eine Suche nach Dateien mit einer bestimmten Anzahl von Links und erfordert eine entsprechende numerische Angabe. So bedeuten
| -links 3 | Suche nach Dateien mit 3 Links |
| -links +3 | Suche nach Dateien mit mehr als 3 Links |
| -links -3 | Suche nach Dateien mit weniger als 3 Links |
find -name "super*"
find /usr -type d -print
sucht nach allen Verzeichnissen, die unterhalb von /usr existieren und zeigt ihre Pfadnamen an.
find / -name tty* -print
liefert die Pfade aller Dateien des gesamten Dateisystems, die mit ``tty'' beginnen.
find / -user 406 -ok rm {} \;
sucht im gesamten Dateisystem nach Dateien des Benutzers mit der uid 406. Gefundene Dateien werden bei positiver Beantwortung einer Sicherheitsabfrage gelöscht.
find . -newer .version_time -print
zeigt alle Dateien des aktuellen Verzeichnisses, die jüngeren Datums sind als die Datei .version_time.
find / -size +10k -user tapico -print
zeigt alle Dateien die größer als 10 kB sind und dem Benutzer tapico gehören.
find ~ -atime -10 -print
findet alle Dateien, auf die innerhalb der letzten 10 Tage zugegriffen wurde.
Bei Angabe von mehreren Kriterien wird immer von einer UND-Verknüpfung ausgegangen.
find / -size +10k -user tapico -print
zeigt alle Dateien die größer als 10 kB sind und dem Benutzer tapico gehören.
Dies kann durch -a betont werden.
find / -size +10k -a -user tapico -print
Eine ODER-Verknüpfung erreicht man durch -o.
find ~ -name '*.htm' -o -name '*.html' -print
sucht nach allen Dateien, die auf ``.htm'' oder ``.html'' enden.
Die Negation eines Kriteriums wird durch das ! erreicht.
find / \! -name '*~' -print
findet alle Dateien, die nicht mit einem Tilde ~ enden. Allerdings stellt die Verwendung des Negationsoperators ``!'' ein Problem dar, da dieser in der Bash eine besondere Bedeutung hat. Er muß deshalb maskiert werden. Im Zweifelsfall bietet es sich an die längere Version -not zu verwenden.
Der Befehl find kann auch zur Suche nach weiteren Hardlinks einer Datei verwendet werden.
ole@enterprise:~> ls -li /bin/gzip 926671 -rwxr-xr-x 3 root root 52964 2003-09-23 18:52 /bin/gzip ole@enterprise:~> find /bin -inum 926671 /bin/gzip /bin/zcat /bin/gunzip
locate [DATEINAME]
Der Befehl locate XYZ ist wesentlich schneller als find / -name XYZ. Allerdings muß auch immer die Datenbank auf dem neuesten Stand sein.
Die Anwendung ist sehr einfach, so zeigt der Befehl
locate "*.ps"alle Dateien an, die mit ``.ps'' enden.
od -c /var/lib/locatedb | lessbetrachten können.
Mit dem Befehl updatedb wird die Datenbank auf den neuesten Stand gebracht.
updatedb [OPTIONEN]
| Optionen | |
--localpaths |
Die lokalen Verzeichnisse werden mit eingebunden |
--netpaths |
Die Netzwerk-Verzeichnisse werden mit eingebunden |
--prunepaths LISTE |
Liste der ausgeschlossenen Verzeichnisse |
--output DATEI |
Name der Ausgabedatei |
Für eine generelle Konfiguration des Befehls kann eine Datei updatedb.conf benutzt werden.
In vielen Distributionen wird das Update automatisch durch ein mit cron gestartetes Skript durchgeführt. Bei SuSE 9.0 ist das Skript updatedb im Verzeichnis /etc/cron.daily verantwortlich. Die Datei sieht in einer leicht gekürzten Version so aus.
enterprise:~ # cat /etc/cron.daily/updatedb
#!/bin/sh
...
# Copyright (c) 2003 SuSE Linux AG, Nuernberg, Germany.
# Author: Burchard Steinbild <bs@suse.de>, 1996
# Florian La Roche <florian@suse.de>, 1996
# paranoia settings
umask 022
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH
# get information from /etc/rc.config
if [ -f /etc/sysconfig/locate ] ; then
. /etc/sysconfig/locate
fi
# update database for locate
if [ -n "$RUN_UPDATEDB" -a "$RUN_UPDATEDB" = "yes" -a \
-x /usr/bin/updatedb ] ; then
# avoid error messages from updatedb when using user nobody for find.
cd /
PARAMS="`test -n "$RUN_UPDATEDB_AS" && \
fgrep localuser /usr/bin/updatedb > /dev/null && \
echo --localuser=$RUN_UPDATEDB_AS`"
PARAMS="$PARAMS `test -n "$UPDATEDB_PRUNEPATHS" && \
echo --prunepaths=\'$(eval echo $UPDATEDB_PRUNEPATHS)\'`"
...
eval nice -n 19 /usr/bin/updatedb $PARAMS 2> /dev/null
fi
exit 0
Auch können für einzelne Benutzer oder für Gruppen Quoten festgelegt werden. Diese Quoten sind unabhängig voneinander. Erreicht das Kontingent der Gruppe oder des Benutzers das Limit, kann der Benutzer keine Daten mehr speichern.
Sollte ein Benutzer durch die Gruppenbegrenzung keinen Platz mehr haben, kann er das dadurch umgehen, daß er die Gruppe wechselt.
Im Normalfall sind die Festplattenquoten abgeschaltet. Um sie wieder zu aktivieren ist ein Eintrag für die Partition in /etc/fstab notwendig. Also Option wird der Platte der Eintrag usrquota für Benutzer und grpquota für Gruppen hinzugefügt.
/dev/hda1 / ext2 defaults,grpquota 1 1 /dev/hda2 /home ext2 defaults,usrquota 1 1 /dev/hda3 /server ext2 defaults,usrquota,grpquota 1 1
Der Superuser muß dann in der Wurzel der Partition eine Datei quota.user bzw. quota.group einrichten. Diese Dateien sollten nur für den Superuser schreib- und lesbar sein.
root@defiant: ~> touch /quota.user /quota.group root@defiant: ~> chmod 600 /quota.user /quota.group
Danach muß das System neu gestartet werden, um die Änderungen im System gültig zu machen. Um die Quoten einzuschalten wird das Kommando quotaon und um die Quoten auszuschalten das Kommando quotaoff benutzt. Um die Quoten einzurichten, wird der Befehl edquota verwendet. Dabei kann die Anzahl der Inodes, der Speicherplatz oder beides als Begrenzung dienen. Dabei spielen drei Parameter eine wichtige Rolle.
Weiche Limit (soft limit): Die durch das weiche Limit gesetzte Grenze kann für eine bestimmte Zeit überschritten werden.
Harte Limit (hart limit): Nach Erreichen des harten Limits ist es nicht mehr möglich Dateien zu erstellen. Es gibt keine Gnadenfrist.
Gnadenfrist (grace period): Für diesen Zeitraum kann das weiche Limit überschritten werden. Standardeinstellung sind sieben Tage.
quota [OPTIONEN] [WER]
Normal zeigt quota die Quoten der in /etc/fstab eingetragenen Dateisysteme.
| Optionen | |
| -u BENUTZER | Zeigt die Quoten des angegebenen Benutzers |
| -g | Zeigt neben den persönlichen Quoten auch die Quoten der Gruppen, in denen der Benutzer Mitglied ist |
| -q | Zeigt nur Dateisysteme an in denen die Quote überschritten wurden. |
quotaon [OPTIONEN]
| Optionen | |
| -a | Die Quoten werden für alle Dateisysteme mit rw-Recht aus der /etc/fstab aktiviert. Dies sollte jedesmal beim Boot-Vorgang passieren. |
| -v | Zeigt die Informationen über alle Systeme, auf denen die Quoten aktiviert sind. |
| -u | Schaltet die Quoten für benannte User an |
| -q | Schaltet die Quoten für benannte Gruppen an |
Die Quoten sollten beim Booten jedesmal aktiviert werden. Deshalb muß das Init-Skript um einen Eintrag erweitert werden.
# Check quota and then turn quota on.
if [ -x /usr/sbin/quotacheck ]
then
echo "Checking quotas. This may take some time."
/usr/sbin/quotacheck -avug
echo " Done."
fi
if [ -x /usr/sbin/quotaon ]
then
echo "Turning on quota."
/usr/sbin/quotaon -avug
fi
quotaoff [OPTIONEN]
| Optionen | |
| -a | Die Quoten werden für alle Dateisysteme mit rw-Recht aus der /etc/fstab deaktiviert. Dies sollte jedesmal beim Shutdown-Vorgang passieren. |
| -v | Zeigt die Informationen über alle Systeme, auf denen die Quoten deaktiviert sind. |
| -u | Schaltet die Quoten für benannte User aus |
| -q | Schaltet die Quoten für benannte Gruppen aus |
edquota [OPTIONEN]
| Optionen | |
| -u BENUTZER | Editiert die Quote des angegebenen Benutzers |
| -g BENUTZER | Editiert die Quote der angegebenen Gruppe |
| -p BENUTZER | Dupliziert die Quote des Benutzers (mit -u) oder die Quote der Gruppe (mit -g). |
| -t | Editiert die weichen Limits |
Der Befehl edquota -u tapico öffnet den Abschnitt der Datei quota.user im Standardeditor.
Quotas for user tapico:
/dev/hda3: blocks in use: 2594, limits (soft = 5000, hard = 6500)
inodes in use: 356, limits (soft = 1000, hard = 1500)
Jedes Limit kann dabei drei verschiedene Werte annehmen.
Die Standardeinstellungen werden in der Datei quota.h eingestellt.
repquota [OPTIONEN] [DATEISYSTEM]
Dabei werden die Nutzung und die Quoten der Partition angezeigt.
| Optionen | |
| -a | Zeigt alle Dateisysteme an, die in /etc/fstab eingetragen sind. |
| -v | Zeigt alle Quoten an, selbst wenn der Benutzer keinen Platz auf der Partition beansprucht. |
| -g GRUPPE | Zeigt die Quoten für die angegebene Gruppe an. |
| -u BENUTZER | Zeigt die Quoten für den angegebenen Benutzer an. Nur der Superuser kann dies für andere Benutzer machen. |
quotacheck [OPTIONEN]
Normalerweise wird der Befehl nach einem fsck ausgeführt.
| Optionen | |
| -v | Zeigt Informationen über den Verlauf des Programms an |
| -u | Führt einen Benutzerscan aus. (UID als Argument) |
| -g | Führt einen Gruppenscan aus. (GID als Argument) |
| -a | Überprüft alle Dateisysteme, die in der /etc/fstab stehen. |
| -R | Im Zusammenhang mit -a verwendet, um alle Systeme außer dem Wurzelverzeichnis zu testen. |
In diesem Beispiel wird die Partition /dev/hdb1 mit dem Dateiystem ext2 am Mountpunkt /daten in das Dateisystem eingebunden. Für diese Partition sollen Disk Quotas für Benutzer angelegt werden. Daher muß in der /etc/fstab der Eintrag für /dev/hdb1 um die Option usrquota ergänzt werden.
/dev/hdb1 /daten ext2 defaults,usrquota 1 3
Im Wurzelverzeichnis der Partition muß nun die Verwaltungsdatei für die Disk Quotas eingesetzt werden. Bei SuSE kommt ``aquota'' zum Einsatz, daher der abweichende Name. Auf jeden Fall darf nur root die Datei lesen und schreiben.
voyager:~ # touch /daten/aquota.user voyager:~ # chmod 600 /daten/aquota.user
Nun muß die Verwaltungsdatei eingerichtet werden. Dies übernimmt das Programm quotacheck.
voyager:~ # quotacheck -avR quotacheck: WARNING - Quotafile /daten/aquota.user was probably truncated. Can't save quota settings... quotacheck: Scanning /dev/hdb1 [/daten] done quotacheck: Checked 3 directories and 1 files voyager:~ # quotacheck -avR quotacheck: Scanning /dev/hdb1 [/daten] done quotacheck: Checked 3 directories and 1 files
Jetzt ist es an der Zeit für eine Benutzer Quoten anzulegen. Dies erfolgt über den Befehl edquota, der für die Eingabe der Werte den vi benutzt.
voyager:~ # edquota -u walter
Un so sollte der Eintrag lauten, wenn der Benutzer walter eine Beschränkung von 5 MB als weiches und hartes Limit besitzen soll.
Disk quotas for user walter (uid 510): Filesystem blocks soft hard inodes soft hard /dev/hdb1 0 5120 5120 0 0 0
Nach der Einrichtung sollten die Disk Quotas auch aktiviert werden. Danach liefert repquota den derzeitigen Stand der Dinge.
voyager:~ # quotaon /daten
voyager:/daten # repquota -av
*** Report for user quotas on device /dev/hdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 32 0 0 4 0 0
walter -- 0 5120 5120 0 0 0
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000
Zum Testen legen wir uns eine ungefähr 2 MB große Datei an. Um die Datei zu füllen benutzen wir den Befehl dd (4.5.4), der aus dem Gerät /dev/zero Daten liest und sie in die Datei testfile schreibt. Wenn nun doe Datei dreimal rüberkopiert wird in den Verzeichnisbaumabschnitt /daten, sollten die Disk Quotas greifen.
walter@voyager:~> dd if=/dev/zero of=testfile count=2000000 bs=1 2000000+0 Records ein 2000000+0 Records aus walter@voyager:~> cp testfile /daten/test/testfile1 walter@voyager:~> cp testfile /daten/test/testfile2 walter@voyager:~> cp testfile /daten/test/testfile3 ide0(3,65): write failed, user block limit reached. cp: Schreiben von »/daten/test/testfile3«: Der zugewiesene Plattenplatz (Quota) ist überschritten
Mit den Quotas klappt das ja schon ganz gut. Allerdings sind die Quotas nach dem Neustart des Rechners nicht mehr aktiv und müssen per Hand gestartet werden. Abhilfe schafft hier eines der vielen init-Skripte. Das Skript quota startet die Quoten und boot.quota sorgt dafür, daß nach einem unsauberen Beenden des Dateisytems die Quoten überprüft werden. Der Befehl insserv sorgt dafür, daß das angegebene Skript nun auch in den im Skript angegebenen Runleveln startet.
yoyager:~ # cd /etc/init.d voyager:/etc/init.d # insserv quota voyager:/etc/init.d # insserv boot.quota
Mit dem Befehl quota können Sie sich nun die Quoten der Benutzer anschauen.
voyager:~ # quota
Disk quotas for user root (uid 0): none
voyager:~ # quota walter
Disk quotas for user walter (uid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 5120* 5120 5120 3 0 0
Manchmal kann es vorkommen, daß durch ungünstige Umstände die Anzahl der benutzten Ressourcen in der Verwaltungsdatei mit der Wirklichkeit nicht mehr übereinstimmt. Dies passiert z. B. wenn Dateien verändert wurden, während das Quota-System aus war. Der Befehl quotacheck ändert diese Information. Allerdings nur unter Verwendung einiger Schalter.
voyager:~ # repquota -av
*** Report for user quotas on device /dev/hdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 32 0 0 4 0 0
walter -- 5120 5120 5120 3 0 0
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000
voyager:~ # quotacheck -avR
quotacheck: Quota for users is enabled on mountpoint /daten so quotacheck might
damage the file.
Please turn quotas off or use -f to force checking.
voyager:~ # quotacheck -afvR
quotacheck: Cannot remount filesystem mounted on /daten read-only so counted
values might not be right.
Please stop all programs writing to filesystem or use -m flag to force checking.
voyager:~ # quotacheck -amfvR
quotacheck: Scanning /dev/hdb1 [/daten] done
quotacheck: Checked 4 directories and 1 files
voyager:~ # repquota -av
*** Report for user quotas on device /dev/hdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 32 0 0 4 0 0
walter -- 0 5120 5120 0 0 0
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000
Notizen:
Notizen:
Dateisystem und Disk Quotas
Zu Beginn der Aufgabe sollten Sie sich im Heimatverzeichnis befinden! Wechseln Sie das Verzeichnis nur, falls Sie dazu ausdrücklich aufgefordert werden. Einige Aufgaben lassen sich nicht ausführen! Versuchen Sie in diesen Fällen die Fehlermeldung zu interpretieren.
Notizen:
| (12.1) |
Da beide verwendeten Register 16 Bit groß sind, werden vom Segmentregister nur 4 Bit benötigt. Der Speicher ist also aufgeteilt in 16 Segemente zu 65.536 Bytes. Die Adresse ergibt sich dann nach folgender Regel: Das Segementregister wird um 4 Bit nach links verschoben. Das entspricht einer Multiplikation mit 16. Der entstehende Wert wird dann mit dem Offsetregister addiert. Schauen wir uns doch mal als Beispiel das Segmentregister 0xA000 und das Offsetregister 0x3F00 an.
![]() |
(12.2) |
Die Schreibweise für die Adresse lautet dann: 000A:3F00.
Nachdem nun der Prozessor angefangen hat zu arbeiten, startet er den Programmcode an der Speicherstelle 0000F:FFF0. Hier befindet sich direkt nach dem Einschalten der Initialisierungscode des BIOS. Dieser Programmcode sucht nun ab dem zehnten Segment den Speicher nach weiterem BIOS-Code von Geräten (Grafikkarte, SCSI-Controller) durch und führt ihn aus. Dies ist übrigens auch der Grund, warum die Meldung der Grafikkarte als erstes erscheint.
Nach der Initialisierung und Ausführung des Grafikkarten-BIOS startet das BIOS den Power On Self Test. Dieser auch als POST abgekürzte Test überprüft den Prozessor und die DMA- und Interrupt-Controller. Danach führt er einen Test des Arbeitsspeichers durch, der als auffälliges Element beim Booten eigentlich jederm Anwender ins Auge fällt.
Am Ende des POST wird dafür gesorgt, daß auftretende Interrupts verarbeitet werden können. Interrupts sind Signale, die ein Programm darüber informieren, daß ein Ereignis eingetreten ist, was nun bearbeitet werden soll. In vielen Fällen wird dazu das Programm angehalten, das aufgetretene Ereignis wird abgearbeitet und danach setzt das Programm seine normale Tätigkeit fort. Denken Sie daran, daß auch das Betriebssystem nur ein Programm ist. Jedenfalls wird nun dafür gesorgt, daß im ersten Speicher-Segment12.1 die Interrupt-Vektor-Tabelle initialisiert wird. In ihr steht für jeden Interrupt eine Sprungadresse zu dem passenden Programmcode. Nach dem Abschluß des POST wird als letzte Aktion der Interrupt 0x1912.2 ausgelöst, dessen Programmcode nun versucht ein Betriebssystem zu starten. Dafür macht es sich auf die vorhandenen Datenträger nach einem funktionsfähigen Master Boot Record zu durchsuchen. Den Aufbau des Master Boot Records habe ich schon in Abschnitt 10.2 beschrieben. Das im MBR enthaltene Mini-Programm wird gestartet. Dies sorgt nun dafür, daß ein Bootloader gestartet wird. Dabei kann es sein, daß das Mini-Programm schon den ersten Teil des Bootloaders darstellt.
Dieser Bootmanager sorgt nun dafür, daß der Kernel gestart wird. Der Kernel befindet sich entweder auf einer Diskette oder auf der Festplatte im Verzeichnis /boot12.3. Der gepackte Kernel ist normalerweise in der Datei vmlinuz-versionsnummer. Bei SuSE lautet der Dateiname nur vmlinuz. Wie auch immer, der Name und der Dateipfad sind eigentlich unwichtig. Wichtig ist nur, daß der Kernel während des Bootvorgangs lokalisiert werden kann.
Als erstes wird der Kernel in den Speicher geladen. Normalerweise ist der Kernel gepackt. Nur der Code für das Entpacken ist natürlich in ungepackter Form enthalten. Sie können das Programm gunzip (13.6.1) zum Entpacken des Kernels verwenden. Der Kernel enthält wichtige Informationen wie z. B. den Ort des Wurzeldateisystems.
Während des ganzen Ladevorgangs gibt der Kernel Meldungen aus und speichert sie in der Datei /var/log/messages (Abschnitt 13.3.3). Um sich die Meldungen später anzusehen, können Sie den Befehl dmesg verwenden. Er benötigt keine Argumente und gibt die letzten Meldungen aus dem Meldungspuffer des Kernels aus.
Diese Nachrichten enthalten
Nachdem der Kernel gestartet wurde, mounted er das Wurzel-Dateisystem, das normalerweise auf der Festplatte liegt. Nach dem Mounten wird die Kontrolle an die Programme auf der Festplatte übergeben, während der Kernel im Speicher bleibt.
dmesg [OPTIONEN]
Hier noch ein Beispiel für die vom Kernel gelieferten Meldungen über den Startvorgang.
root@defiant:/ > dmesg Linux version 2.2.14 (root@defiant) (gcc version 2.95.2 19991024) #2 Wed Jul 26 20:49:06 MEST 2000 Detected 365818579 Hz processor. Console: colour VGA+ 80x25 Calibrating delay loop... 730.73 BogoMIPS Memory: 62800k/65472k available (1280k kernel code, 412k reserved, 936k data, 44k init, 0k bigmem) Dentry hash table entries: 8192 (order 4, 64k) Buffer cache hash table entries: 65536 (order 6, 256k) Page cache hash table entries: 16384 (order 4, 64k) CPU: Intel Celeron (Mendocino) stepping 0a Checking 386/387 coupling... OK, FPU using exception 16 error reporting. Checking 'hlt' instruction... OK. POSIX conformance testing by UNIFIX PCI: PCI BIOS revision 2.10 entry at 0xf0200 PCI: Using configuration type 1 PCI: Probing PCI hardware Linux NET4.0 for Linux 2.2 Based upon Swansea University Computer Society NET3.039 NET4: Unix domain sockets 1.0 for Linux NET4.0. NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP, IGMP TCP: Hash tables configured (ehash 65536 bhash 65536) Initializing RT netlink socket Starting kswapd v 1.5 Detected PS/2 Mouse Port. pty: 256 Unix98 ptys configured apm: BIOS version 1.2 Flags 0x0f (Driver version 1.12) Real Time Clock Driver v1.09 loop: registered device at major 7 Uniform Multi-Platform E-IDE driver Revision: 6.30 ide: Assuming 40MHz system bus speed for PIO modes; override with idebus=xx ALI15X3: IDE controller on PCI bus 00 dev 78 ALI15X3: not 100% native mode: will probe irqs later ALI15X3: simplex device: DMA disabled ide0: ALI15X3 Bus-Master DMA disabled (BIOS) ALI15X3: simplex device: DMA disabled ide1: ALI15X3 Bus-Master DMA disabled (BIOS) hda: IBM-DBCA-204860, ATA DISK drive hdc: CD-224E, ATAPI CDROM drive ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 ide1 at 0x170-0x177,0x376 on irq 15 hda: IBM-DBCA-204860, 4645MB w/420kB Cache, CHS=592/255/63 hdc: ATAPI 24X CD-ROM drive, 128kB Cache Uniform CDROM driver Revision: 2.56 Floppy drive(s): fd0 is 1.44M FDC 0 is a National Semiconductor PC87306 scsi0 : SCSI host adapter emulation for IDE ATAPI devices scsi : 1 host. scsi : detected total. Partition check: hda: hda1 hda2 < hda5 > hda3 hda4 VFS: Mounted root (ext2 filesystem) readonly. Freeing unused kernel memory: 44k freed Adding Swap: 128516k swap-space (priority -1) Serial driver version 4.27 with HUB-6 MANY_PORTS MULTIPORT SHARE_IRQ enabled ttyS00 at 0x03f8 (irq = 4) is a 16550A
GRUB ist sehr flexibel. Der Bootloader versteht verschiedenste Dateisysteme und Kernelformate. So ist er in der Lage Betriebssysteme zu starten ohne sich die physikalische Position des Kernels auf dem Datenträger sich merken zu müssen. Daher reicht die Angabe des Dateinamens mit Pfad und der Partition um einen Kernel zu starten. Die Eingabe kann dabei über eine Kommandozeile oder über ein Menü erfolgen.
GRUB Ursprung stammt aus dem Jahre 1995, als Erich Boleyn das Betriebssystem GNU Hurd mit dem Mach 4 Kernel der University of Utah starten wollte. 1999 wurde GRUB Bestandteil des GNU-Projekts und damit freie Software, an der jeder mitschreiben kann.
(fd0)
Als erstes sollten Sie sich merken, daß aller Gerätebezeichnungen in runden Klammern stehen. Die Zahl 0 gibt an, daß dies das erste Laufwerk ist, da die Zählung von 0 beginnt. Mit dieser Angabe meint GRUB dann die gesammte Diskette. Bis jetzt also keinen großen Unterschied bei den von Linux und GRUB benutzten Bezeichnungen.
(hd0,1)
Die Buchstaben hd sagen, daß es sich hierbei um eine Festplatte handelt. Die 0 steht wiederum für das erste Laufwerk. Die Zahl hinter dem Komma gibt die Partitionsnummer an. Und hier taucht das erste Problem auf. Im Gegensatz zu Linux beginnt die Nummeriung der Partition bei GRUB auch mit 0. Diese Angabe entspricht als bei Linux dem Gerät /dev/hda2. Genau wie bei Linux haben logische Partitionen auf der erweiterten Partion ihren eigenen Nummerbereich, der bei 4 beginnt. Die folgende Angabe bezeichnet die erste logische Partition auf der zweiten Festplatte.
(hd1,4)
Wenn Sie eine bestimmte Datei im Dateisystem bezeichnen möchten, dann können Sie den Namen und Pfad der Datei direkt hinter die Laufwerksbezeichnung packen.
(hd0,5)/boot/vmlinuz
Diese Angabe bezeichnet die Datei vmlinuz im Verzeichnis boot auf der zweiten logischen Partition der ersten Festplatte.
# Beispiel für /boot/grub/menu.lst
#
color white/blue black/light-gray
# Starte den ersten Eintrag nach Ablauf einer Frist
default 0
# Warte 8 Sekunden auf eine Entscheidung, dann starte die Standardeinstellung
timeout 8
gfxmenu (hd0,5)/boot/message
# Linux booten
title Linux
kernel (hd0,5)/boot/vmlinuz root=/dev/hda6 vga=0x317 splash=silent desktop
hdd=ide-scsi hddlun=0 showopts
initrd (hd0,5)/boot/initrd
# Windows booten
title Windows
root (hd0,0)
chainloader +1
# Von Diskette booten
title Diskette
root (fd0)
chainloader +1
# Linux in einem abgesicherten Modus starten
title Failsafe
kernel (hd0,5)/boot/vmlinuz root=/dev/hda6 showopts ide=nodma apm=off
acpi=off vga=normal nosmp noapic maxcpus=0 3
initrd (hd0,5)/boot/initrd
Sie können GRUB nun auf zwei Arten und Weisen installieren. Sie verwenden entweder den Befehl grub direkt oder Sie benutzen das Skript grub-install.
grub> root (hd0,5)
Falls Sie nicht ganz sicher sind, auf welcher Partition das Bootverzeichnis sich befindet, können Sie den Befehl find verwenden. Der folgende Befehl sucht nach der Datei mit dem Namen ``/boot/grub/stage1'' und gibt die gefundene Partition aus.
grub> find /boot/grub/stage1 (hd0,5)
Wenn Sie nun die Wurzelpartition richtig gesetzt haben, können Sie mit dem Befehl setup den GRUB-Bootsector installieren. Der folgende Befehl installiert GRUB im MBR der ersten Festplatte.
grub> setup (hd0)
Wollen Sie dagegen GRUB im Bootsector der ersten Partition auf dem ersten Laufwerk installieren, dann müssen Sie folgenden Befehl eingeben.
grub> setup (hd0,0)
Nun können Sie GRUB auch ohne Bootdiskette laden.
Ansonsten ist die Verwendung von grub-install relativ einfach. Sie müssen im Prinzip nur das Laufwerk angeben, in dessen (Master-)Bootsector GRUB installiert werden soll. So installiert der folgende Befehl GRUB im MBR der ersten Platte.
defiant:~> grub-install /dev/hda
Sollte sich aber das Bootverzeichnis sich nicht auf der Rootpartition befinden, dann müssen Sie noch das Verzeichnis angeben. Sie haben z. B. für das Bootverzeichnis eine seperate Partition angelegt. Dann muß grub-install folgendermaßen verwendet werden.
defiant:~> grub-install --root-directory=/boot /dev/hda
Wir brauchen für eine Grub-Bootdiskette eine leere formatierte Diskette. Die Diskette können Sie ganz einfach mit dem Befehl fdformat (10.4.2) formatieren.
defiant:~ # fdformat /dev/fd0
Der Befehl badblocks (11.2.3) wird zum Testen von Datenträgern verwendet. Wird badblocks mit dem Schalter -w zusammen verwendet, so wird ein destruktiver Schreib- und Lesetest des Datenträgers durchgeführt. Danach wissen wir ob die Diskette in Ordnung ist, und daß sie auf jeden Fall keine Daten mehr enthält.
defiant:~ # badblocks -w /dev/fd0
Wir schreiben zuerst den ersten Teil von GRUB in den MBR der Diskette. Dazu wechseln wir zuerst in das GRUB-Verzeichnis. Das GRUB-Verzeichnis nach der Anleitung /usr/share/grub/i386-pc. Bei SuSE finden Sie bis Version 9.0 die GRUB-Dateien im Verzeichnis /usr/lib/grub/, ab Version 9.1 im Verzeichnis /usr/lib/grub/i386-pc.
enterprise:~ # cd /usr/lib/grub/ enterprise:/usr/lib/grub # ls -l insgesamt 212 -rw-r--r-- 1 root root 8544 2002-09-11 01:56 e2fs_stage1_5 -rw-r--r-- 1 root root 8176 2002-09-11 01:56 fat_stage1_5 -rw-r--r-- 1 root root 7520 2002-09-11 01:56 ffs_stage1_5 -rw-r--r-- 1 root root 9248 2002-09-11 01:56 jfs_stage1_5 -rw-r--r-- 1 root root 7712 2002-09-11 01:56 minix_stage1_5 -rw-r--r-- 1 root root 10432 2002-09-11 01:56 reiserfs_stage1_5 -rw-r--r-- 1 root root 512 2002-09-11 01:56 stage1 -rw-r--r-- 1 root root 105124 2002-09-11 01:56 stage2 -rw-r--r-- 1 root root 7168 2002-09-11 01:56 vstafs_stage1_5 -rw-r--r-- 1 root root 10024 2002-09-11 01:56 xfs_stage1_5
Mit dem Befehl dd können wir das Images des Grub-MBR (stage1) in den MBR der Diskette spielen.
enterprise:/usr/lib/grub # dd if=stage1 of=/dev/fd0 bs=512 count=1 1+0 Records ein 1+0 Records aus
Der zweite wesentlich größere Teil des Bootloaders (stage2) wird in die Blöcke dahinter geschrieben.
enterprise:/usr/lib/grub # dd if=stage2 of=/dev/fd0 bs=512 seek=1 205+1 Records ein 205+1 Records aus
Wenn wir jetzt den Rechner runterfahren und dann von der Diskette booten, sollte die Grub-Shell erscheinen. Gehen wir mal davon aus, daß der Linux-Kernel auf der zweiten Partition der ersten Platte im Verzeichnis /boot liegt. Dann können wir in der GRUB-Shell mit den folgenden Kommandos das Linux-System starten.
grub> root (hd0,1) grub> kernel /boot/vmlinuz root=/dev/hda2 grub> boot
Und schon bootet das Linux-System.
Der Windows-Kernel ist leider nicht multibootfähig und daher kann GRUB ihn auch nicht direkt starten. Um trotzdem mit diesen Betriebssystemen arbeiten zu können greift GRUB zu einem Hilfsmittel. Mit einem sogenannten Chain-Loading startet GRUB einfach den Bootloader des Betriebssystem und startet damit die Bootsequenz. Als erstes wird das GRUB-Wurzelverzeichnis auf die entsprechende Partition gelegt. Hier ist es die erste Partition der ersten Platte. Dann wird diese Partition aktiv geschaltet. Dann wird der Bootsektor und damit der Bootloader gelesen. Nun besitzt GRUB alle Informationen um den Bootvorgang einzuleiten.
grub> rootnoverify (hd0,0) grub> makeactive (hd0,0) grub> chainloader +1 grub> boot
LILO besteht aus zwei Teilen. Der erste Teil befindet sich normalerweise im Master Boot Record (MBR) der Festplatte. Dieser Programmteil wird während des Bootvorgangs vom BIOS gestartet. Seine Aufgabe besteht darin, den größeren zweiten Teil zu starten, der sich irgendwo anders auf einem Medium befinden kann. Der zweite Teil nun bietet dem Benutzer eine Möglichkeit zur Auswahl des gewünschten Betriebssystems, findet den Kernel, lädt ihn in den Speicher und startet ihn. Die Zweiteilung ist notwendig, da der MBR nur sehr wenig Platz (meistens nur 1 Block) bietet. Daher ist der erste Teil sehr kompakt und dient nur als Starter für den größeren zweiten Teil.
Da LILO auch andere Betriebssysteme laden kann, ist er bestens dafür geeignet als Wahlschalter für Systeme mit mehreren installierten Betriebssystemen zu agieren.
Wurde keine Wahlmöglichkeit geschaffen, dann wird das standardmäßig eingestellte
Betriebssystem gebootet. Durch das Drücken einer Taste (Alt-, Shift- oder Strg-Taste) oder einem Eintrag in der /etc/lilo.conf kann dieser Vorgang abgebrochen und ein Boot-Prompt angezeigt werden.
BOOT:
oder auch
LILO:
Am Boot-Prompt können Sie den Namen des zu ladenden Betriebssystems angeben. Mit der Tab-Taste oder der Eingabe eines `?' wird Ihnen eine Liste der zu bootenden Betriebssysteme angezeigt. Sollte Sie keine Entscheidung treffen, so bootet LILO nach einer voreingestellten Zeit automatisch das erste Betriebssystem in der Liste.
LILO: <TAB> linux* windoof oldlinux betalinux
Beim Eintippen des Namens des Betriebssystems können Kernelparameter angehängt werden. Dies wird oft dazu benutzt das System im Single-User-Modus zu starten.
Die Einstellungen von LILO werden in seiner Standardkonfigurationsdatei /etc/lilo.conf festgelegt. Ein Bootloader wird normalerweise bei der Installation angelegt. Soll der Bootloader später verändert werden, so müssen die Änderungen in der Konfigurationsdatei noch in das System übertragen werden. Diese Aufgabe übernimmt das Programm lilo.
lilo [OPTIONEN]
lilo liest die Konfigurationsdatei und codiert die Informationen auf Basis der physikalischen Festplattenkonfiguration. (Was befindet sich in welchem physikalischem Block.) Dies ist notwendig, da es zum Startzeitpunkt noch kein Dateisystem bzw. keine Dateiverwaltung gibt. Diese Informationen werden in einer Map-Datei (z. B. /boot/map) gespeichert.
Um LILO ganz normal zu installieren reicht ein Aufruf ohne Parameter. Es können aber verschiedenste Optionen mit übergeben werden. Eine Übersicht über diese Schalter liefert Tabelle 12.1.
|
Meistens werden Sie aber eine Konfigurationsdatei bei Ihren Aufrufen von LILO verwenden. Bei der Verwendung einer Konfigurationsdatei müssen Sie Schlüsselworte anstatt Optionen verwenden. Die Tabelle 12.2 zeigt die Optionen mit ihren dazugehörigen Schlüsselworten.
|
# LILO Konfigurations-Datei boot=/dev/hda vga=normal read-only prompt timeout=100 # End LILO global Section # other = /dev/hda1 label = win table = /dev/hda # image = /boot/vmlinuz root = /dev/hda3 label = linux # image = /boot/vmlinuz.old root = /dev/hda3 label = oldlinux password=hamster
Es können Parameter wie append, ramdisk, read-only, read-write, root und vga an den Kernel weitergegeben werden. Dies kann global oder auch in den einzelnen Image-Sektionen passieren. So kann z. B. für die Fehlerbehebung ein Kernel in eine RAM-Disk geladen werden. Genauso können Sie Ihr System für den Bootvorgang als Nur-Lesend definieren.
Wenn Sie die Konfigurationsdatei geändert haben, ist es nötig das Kommando /sbin/lilo auszuführen, damit die Änderungen auch in den LILO übernommen werden. Führen Sie also das Kommando nach jeder Änderung der Konfigurationsdatei aus. Auch bei Änderungen der Systemkonfiguration, wie z. B. Partitionswechsel und Kernelkompilierung muß der Befehl ausgeführt werden, damit LILO sauber weiter arbeiten kann.
Es geht auch ohne Rettungssystem. Wenn Sie beim Starten des Image den Parameter init=/bin/bash an den Imagenamen anhängen, startet der Kernel gleich eine Bash.
LILO: linux init=/bin/bash
Das Wurzelsystem ist aber nur als Read-Only eingebunden. Es muß daher noch als lesend und schreibend wiedergemountet werden.
(none):/# mount -t ext3 -o rw,remount /dev/hda2 / EXT3 FS 2.4-0.9.17, 10 Jan 2002 on ide0(3,2), internal journal
Und schon können die Benutzerdateien von Hand verändert werden. Es gibt nur zwei Nachteile am System. Der Pfad ist etwas sehr dürftig und die englische Tastatur ist eingeschaltet.
Da es so einfach ist das Passwort von root zu ändern oder sich einen anderen Benutzer zu root zu machen, muß ich mein System schützen. Denken Sie daran, jedes System, an das jemand pysikalisch herankommt, ist knackbar. Im einfachsten Fall baut er nur die Festplatte aus.
Das Booten eines anderen Systems über externe Medien (Floppy oder CD) verhindern Sie dadurch, daß in der Bootreihenfolge die Festplatte an erster Stelle kommt. Damit nicht jeder diese Reihenfolge umstellen kann, schützen Sie dann das BIOS noch mit einem Passwort.
Die Möglichkeit über LILO und init können Sie verhindern, in dem Sie alle Linux-Images mit einem Passwort schützen. Zusätzlich geben Sie noch den Parameter restricted dazu. Dann wird das Passwort nur abgefragt, wenn manuell Parameter beim Booten mit angegeben werden. Ohne Parameter startet das System wie sonst auch.
nichts - LILO wurde nicht geladen. Er ist entweder nicht installiert oder die Partition ist nicht aktiv.
L FEHLERCODE - Wahrscheinlich ein Medienfehler.
LI - Der erste Teil wurde erfolgreich beendet, aber der zweite Teil wurde nicht ausgeführt. Das kann einem Plattengeometriefehler liegen oder die Datei /boot/boot.b wurde nicht gefunden.
LIL - Der erste und zweite Teil wurde erfolgreich beendet. Die Map-Datei kann nicht geladen werden. Wahrscheinlich ein Medienfehler.
LIL? - Der Loader für den zweiten Teil wurde an eine falsche Adresse geladen. Wahrscheinlich Geometriefehler oder die Datei /boot/boot.b konnte nicht gefunden werden.
LIL- - Beschädigte Beschreibungstabelle. Wahrscheinlich ein Geometriefehler oder die Map-Datei konnte nicht gefunden werden.
LILO - LILO wurde erfolgreich geladen.
Es kann sein, daß Sie hexadezimale Zahle nach dem ersten `L' sehen. Diese werden zufällig erzeugt und weisen indirekt auf eine temporäres Plattenproblem hin. Wenn LILO lädt, ist das Problem nicht behoben. Sie sollten so bald wie möglich ein fsck durchführen.
Der Init-Daemon und seine Aktionen werden durch die Konfigurationsdatei /etc/inittab gesteuert.
|
Das folgende Listing gibt eine gekürzte Fassung der /etc/inittab der SuSE-Linux 6.4 Distribution wieder.
# /etc/inittab # default runlevel id:2:initdefault: # check system on startup # first script to be executed if not booting in emergency (-b) mode si:I:bootwait:/sbin/init.d/boot # /sbin/init.d/rc takes care of runlevel handling # # runlevel 0 is halt # runlevel S is single-user # runlevel 1 is multi-user without network # runlevel 2 is multi-user with network # runlevel 3 is multi-user with network and xdm # runlevel 6 is reboot l0:0:wait:/sbin/init.d/rc 0 l1:1:wait:/sbin/init.d/rc 1 l2:2:wait:/sbin/init.d/rc 2 l3:3:wait:/sbin/init.d/rc 3 l6:6:wait:/sbin/init.d/rc 6 # what to do in single-user mode ls:S:wait:/sbin/init.d/rc S ~~:S:respawn:/sbin/sulogin # what to do when CTRL-ALT-DEL is pressed ca::ctrlaltdel:/sbin/shutdown -r -t 4 now # what to do when power fails/returns pf::powerwait:/sbin/init.d/powerfail start pn::powerfailnow:/sbin/init.d/powerfail now po::powerokwait:/sbin/init.d/powerfail stop # getty-programs for the normal runlevels # <id>:<runlevels>:<action>:<process> # The "id" field MUST be the same as the last # characters of the device (after "tty"). 1:123:respawn:/sbin/mingetty --noclear tty1 2:123:respawn:/sbin/mingetty tty2 3:123:respawn:/sbin/mingetty tty3 4:123:respawn:/sbin/mingetty tty4 5:123:respawn:/sbin/mingetty tty5 6:123:respawn:/sbin/mingetty tty6 # end of /etc/inittab
Die Nummer, die mit dem Runlevels verknüpft sind, variieren mit den verschiedenen Distributionen. Sie werden in der /etc/inittab aufgeführt. So sieht z. B. der Eintrag für SuSE-Linux 6.4 so aus:
# runlevel 0 is halt # runlevel S is single-user # runlevel 1 is multi-user without network # runlevel 2 is multi-user with network # runlevel 3 is multi-user with network and xdm # runlevel 6 is reboot
und der für SuSE-Linux 7.3 so aus:
# runlevel 0 is System halt (Do not use this for initdefault!) # runlevel 1 is Single user mode # runlevel 2 is Local multiuser without remote network (e.g. NFS) # runlevel 3 is Full multiuser with network # runlevel 4 is Not used # runlevel 5 is Full multiuser with network and xdm # runlevel 6 is System reboot (Do not use this for initdefault!)
Die Einteilung der Runlevel von 7.3 ist auch aktuell (8.1) noch gültig.
Um zu bestimmen, in welchem Runlevel Sie sich gerade befinden, können Sie den Befehl runlevel verwenden.
Die Runlevels 0 und 6 sind normalerweise reserviert für die Zustände halt und reboot. Aber egal wie die Nummernvergabe auch läuft, der Init-Daemon arbeitet nur die Zeilen der /etc/inittab ab, die mit dem Runlevel verknüpft sind.
Der Runlevel Single-User unterscheidet sich etwas von den anderen Runlevels. Er wird gerne zur Administration und Konfiguration des Systems verwendet, wie z. B. die Reparatur eines beschädigten Dateisystems. Niemand kann sich in das System einloggen, wenn es sich in diesem Modus befindet. Trotzdem können mehrere Prozesse gleichzeitig ausgeführt werden. Dieser Modus ist auch der einzige, in dem der Init-Daemon nicht die Datei /etc/inittab ausliest und abarbeitet. Normalerweise starten Sie das Programm /bin/su um dann als Superuser zu arbeiten.
Wenn Sie einen höheren Runlevel einstellen als den Single-User-Modus, dann startet das System immer im Multiuser-Betrieb. Dann werden die Zeilen mit den Aktionen sysinit, boot und bootwait ausgeführt. Oft werden in diesen Zeilen auch die Dateisysteme gemountet.
Danach führt der Init-Daemon die anderen Zeilen aus, die mit dem Runlevel verknüpft sind. Der angestrebte Runlevel wird in der Zeile
id:2:initdefault:
definiert. Denken Sie daran, daß diese Zeile keinen Prozeß startet, sondern den Runlevel festlegt, mit dem gestartet werden soll. Ein Wechsel des Runlevels erfolgt mit den Befehlen init und telinit.
Im nächsten Abschnitt wird definiert, welche Startskripte ausgeführt werden sollen. Diese Zeile könnte lauten
si::sysinit:/etc/rc.d/rc.sysinit
oder z. B. bei SuSE
si:I:bootwait:/sbin/init.d/boot
Die ID si am Anfang der Zeile wird intern vom Init-Daemon verwendet. Diese Zeile startet das Skript rc.sysinit, welches Aufgaben wie die Aktivierung der Swap-Partition, Starten von fsck und Mounten des Dateisystems übernimmt.
Der folgende Abschnitt definiert die Skripte, die für den jeweiligen Runlevel ausgeführt werden sollen. Sie stehen im Verzeichnis /etc/rc.d bzw. bei SuSE im Verzeichnis /etc/init.d.
l0:0:wait:/sbin/init.d/rc 0 l1:1:wait:/sbin/init.d/rc 1 l2:2:wait:/sbin/init.d/rc 2 l3:3:wait:/sbin/init.d/rc 3 l6:6:wait:/sbin/init.d/rc 6
Das rc-Skript wird mit einem Parameter, der den Runlevel angibt, aufgerufen. Dabei führt es Skripte aus dem Verzeichnis rcn.d aus, wobei n für die Nummer des Runlevels steht.
Daneben kann rc auch Kernel-Module aufrufen. Dies sind Teile des Kernels, die nicht fest einkompiliert wurden. Sie können bei Bedarf nachgeladen und wieder entladen werden. Meistens handelt es sich hierbei um Gerätetreiber, die nicht oft benötig werden.
Die Datei /etc/modules.conf enthält die Liste der Module mit ihren Parametern. Oft handelt es sich bei den Parametern um I/O-Adressen und Interrupts. Ein Ausschnitt aus der /etc/modules.conf könnte so aussehen.
# Aliases - specify your hardware alias parport_lowlevel parport_pc options parport_pc io=0x378 irq=none,none isp16_cdrom_type=Sanyo options ne io=0x300 alias block-major-1 rd alias block-major-2 floppy alias char-major-4 serial alias char-major-5 serial alias char-major-6 lp alias char-major-9 st
Als nächstes werden die Prozesse abgearbeitet, die bei jedem Runlevel ausgeführt werden. Dies ist u. a. der getty-Prozeß, der die virtuellen Terminals anlegt.
# getty-programs for the normal runlevels 1:123:respawn:/sbin/mingetty --noclear tty1 2:123:respawn:/sbin/mingetty tty2 3:123:respawn:/sbin/mingetty tty3 4:123:respawn:/sbin/mingetty tty4 5:123:respawn:/sbin/mingetty tty5 6:123:respawn:/sbin/mingetty tty6
Nach dem Lesen und abarbeiten der /etc/inittab bleibt der Init-Daemon aktiv. Er überwacht das System auf Anweisungen den Runlevel zu ändern oder ob ein Prozeß gestoppt wurde. Wenn einer der Kindsprozesse von init gestoppt ist, macht der Daemon zwei Sachen.
Genauso liest der Daemon die /etc/inittab ein, wenn der Runlevel geändert wurde oder er das Signal über einen Stromausfall bekommt.
Änderungen in der /etc/inittab können Sie mit einem einfachen Editor machen während das System läuft. Bevor die Änderungen aber wirksam werden, muß erst wieder die /etc/inittab gelesen werden. Dies passiert
Seien Sie sehr vorsichtig und gründlich, wenn Sie die Datei /etc/inittab bearbeiten wollen. Ein Fehler in der Datei kann dazu führen, daß Sie sich nicht mehr am System einloggen können. Legen Sie deshalb vorher eine Kopie der Datei an und erstellen Sie eine Bootdiskette für den Notfall. Es besteht die Möglichkeit, daß Sie noch im Single-User-Modus starten können, darauf sollten Sie aber nicht vertrauen. Auch ist es möglich, daß Sie eine Endlosschleife programmieren, so daß ein Prozeß immer wieder gestartet wird. Für diesen Fall überprüft der Init-Daemon, ob ein Prozeß innerhalb von 2 Minuten 10 mal gestartet wurde. Er gibt dann eine Warnung aus und wartet 5 Minuten, bevor er den Prozeß wiederum startet.
runlevel [UTMP]
Der Befehl liest dafür die Datei /var/run/utmp aus um den Runleveleintrag zu finden und gibt dann den alten und neuen Runlevel getrennt durch ein Leerzeichen aus. Falls es keinen vorherigen Runlevel gegeben hat, wie es nach einem Start der Fall ist, dann wird der Buchstabe N angezeigt.
Ist der Runlevel nicht ermittelbar, dann zeigt runlevel das Wort ``unknown'' und beendet sich mit einem Fehlersignal.
Optional kann der genaue Name der Datei utmp mit Pfad angegeben werden, wenn sich sich z. B. nicht in /var/run befindet.
ole@enterprise:~> /sbin/runlevel N 5
Die Informationen dazu bezieht er dabei aus der Datei /var/run/utmp.12.5
ole@enterprise:~> od -c /var/run/utmp | grep ^00006 0000600 001 \0 \0 \0 5 N \0 \0 ~ \0 \0 \0 \0 \0 \0 \0 0000620 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000640 \0 \0 \0 \0 \0 \0 \0 \0 ~ ~ \0 \0 r u n l 0000660 e v e l \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
init [OPTIONEN] [RUNLEVEL]
Beim Aufruf des Befehl sendet init ein Stopsignal an alle Prozesse, die nicht für den neuen Runlevel definiert sind. Danach werden die Prozesse ``getötet'' und die Prozesse für den Runlevel, die noch nicht laufen, werden gestartet.
Die Eingabe des Runlevels `s' oder `S' bewirkt einen Wechsel in den Single-User-Modus. Die Angabe `q' führt zu einem erneuten Einlesen und abarbeiten der /etc/inittab.
telinit [OPTIONEN] [RUNLEVEL]
Der Befehl sorgt dafür, daß init erst mit 5 Sekunden Verzögerung ausgeführt wird. Mit dem Schalter -t SEKUNDEN kann eine andere Verzögerung definiert werden.
enterprise:/etc/init.d # head -15 rc #! /bin/bash # # Copyright (c) 1996-2002 SuSE Linux AG, Nuernberg, Germany. # All rights reserved. # # Author: Florian La Roche <feedback@suse.de> 1996 # Werner Fink <werner@suse.de> 1994-99,2000-2001 # # /etc/init.d/rc -- The Master Resource Control Script # # This file is responsible for starting/stopping services # when the runlevel changes. If the action for a particular # feature in the new run-level is the same as the action in # the previous run-level, this script will neither start nor # stop that feature.
In dem Verzeichnis /etc/init.d stehen die Skripte zum Starten der Programme bzw. Dienste. Für jeden Runlevel existiert ein Verzeichnis in dem sich nun Links auf die Skripte befinden, die in diesem Runlevel gestartet werden sollen.
enterprise:/etc/init.d # ls -ld rc* -rwxr-xr-x 1 root root 6082 Mär 6 17:56 rc drwxr-xr-x 2 root root 4096 Mär 21 01:14 rc0.d drwxr-xr-x 2 root root 4096 Mai 2 22:07 rc1.d drwxr-xr-x 2 root root 4096 Mai 2 22:07 rc2.d drwxr-xr-x 2 root root 4096 Mai 6 20:19 rc3.d drwxr-xr-x 2 root root 4096 Mär 21 01:14 rc4.d drwxr-xr-x 2 root root 4096 Mai 6 20:19 rc5.d drwxr-xr-x 2 root root 4096 Mär 21 01:14 rc6.d drwxr-xr-x 2 root root 4096 Mai 2 22:07 rcS.d enterprise:/etc/init.d # ls -lG rc1.d insgesamt 8 lrwxrwxrwx 1 root 9 Mai 2 22:07 K03single -> ../single lrwxrwxrwx 1 root 9 Mai 2 22:07 K12splash -> ../splash lrwxrwxrwx 1 root 8 Mai 2 22:07 K13fbset -> ../fbset lrwxrwxrwx 1 root 10 Mai 2 22:07 K16hotplug -> ../hotplug lrwxrwxrwx 1 root 10 Mai 2 20:25 S07hotplug -> ../hotplug lrwxrwxrwx 1 root 8 Mai 2 20:33 S10fbset -> ../fbset lrwxrwxrwx 1 root 6 Mai 2 20:33 S11kbd -> ../kbd lrwxrwxrwx 1 root 9 Mai 2 20:33 S11splash -> ../splash lrwxrwxrwx 1 root 9 Mai 2 20:23 S20single -> ../single
Die Links, die mit ``K'' (kill) beginnen, stehen für die Dienste, die beim Verlassen des Runlevels beendet werden sollen und die Links, die mit ``S'' (start) beginnen, beziehen sich auf Dienste, die in diesem Runlevel zu starten sind. Im dem Bootskript selber steht oft drinnen, in welchen Runleveln dieser Dienst gestartet werden soll, wenn er überhaupt gestartet werden soll.
Um nun einen Dienst beim Booten starten zu können Sie nun entweder per Hand die Skripte mit Links versehen oder sich komfortabler mit dem Programm insserv behelfen. Unter YaST2 steht ihnen der Runlevel-Editor für diese Aufgabe zur Verfügung.
insserv [OPTIONEN] [SKRIPTE]
Dazu wertet das Programm den Kommentarblock des Skriptes aus, wie er z. B. in diesem Skript vorkommt.
enterprise:/etc/init.d # head -18 splash #! /bin/bash # Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany. # # Author: Michael Schroeder <feedback@suse.de> # # /etc/init.d/splash # /usr/sbin/rcsplash # # System startup script for console splash screens # ### BEGIN INIT INFO # Provides: splash # Required-Start: $remote_fs fbset # Required-Stop: # Default-Start: 1 2 3 5 S # Default-Stop: # Description: Splash screen setup ### END INIT INFO
| Optionen | |
-r |
Entfernt das Skript aus allen Runlevels |
-d |
Installiert das Skript in den vorgegebenen Runleveln |
Konfiguriert wird insserv über die Konfigurationsdatei /etc/insserv.conf.
shutdown [OPTIONEN] WANN [NACHRICHT]
Der shutdown-Befehl beendet alle Prozesse in dem er das SIGTERM-Signal an sie sendet. Als nächstes wird init aufgerufen um den Runlevel zu ändern und die Dateisystem zu unmounten.
Der Shutdown-Vorgang kann zu einem bestimmten Zeitpunkt ausgelöst werden. Mit dem Stichwort now wird der Vorgang sofort eingeleitet. Die Angabe der Minuten als eine positiven Zahl wie z. B. +15 löst den Vorgang nach der angegebenen Zeit aus. Es kann aber auch in der Form hh:mm:ss ein fester Zeitpunkt vorgegeben werden.
Wahlweise kann eine spezielle Nachricht an alle eingeloggten Benutzer gesendet werden. Wird keine Nachricht angegeben, meldet sich das System bei den Benutzern mit einer Standardnachricht.
| Optionen | |
| -c | Beendet einen laufenden Shutdown-Vorgang |
| -f | fsck wird nach einem Neustart nicht ausgelöst |
| -F | fsck wird nach einem Neustart ausgelöst |
| -h | Anhalten des Systems nach dem Herunterfahren; Runlevel 0 |
| -k | Sendet nur die Warnung, fährt das System aber nicht herunter |
| -n | Fährt herunter ohne init aufzurufen |
| -r | Führt einen Neustart nach dem Herunterfahren aus; Runlevel 6 |
| -t SEKUNDEN | Zeit zwischen dem ``Töten'' der Prozesse und dem Aufruf von init |
Nur root hat das Recht den Rechner mit dem Befehl shutdown herunterzufahren. Wenn die Datei /etc/shutdown.allow existiert und der Benutzer befindet sich in der darin enthaltenen Liste, dann kann auch er den Befehl (zusammen mit dem Schalter -a) nutzen.
Denken Sie daran: Schalten Sie nie den Rechner aus, wenn der Shutdown-Vorgang noch nicht beendet worden ist. Der Vorgang ist beendet, wenn der Text
The system is halted
oder
Runlevel 0 is reached
erschien ist.
halt [OPTIONEN] reboot [OPTIONEN]
Wenn Sie die Befehle halt oder reboot aufrufen, wird erst der aktuelle Runlevel überprüft. Ist das System im Runlevel 0 oder 6, dann wird der Befehl ausgeführt. Ansonsten wird das Kommando shutdown -nf ausgeführt.
Weder halt noch reboot senden einen Warnhinweis an die eingeloggten Benutzer noch lassen Sie eine Verzögerung bis zur Ausführung zu.
| Optionen | |
| -d | Es wird nicht in die Datei /var/log/wtmp geschrieben |
| -f | Der Befehl shutdown wird nicht aufgerufen aber ein halt oder reboot versucht |
| -i | Das Netzwerkinterface wird vor dem Herunterfahren deaktiviert |
| -n | Der Befehl sync wird nicht vor halt oder reboot ausgeführt |
| -p | Schaltet die Energie nach dem Herunterfahren aus |
| -w | Fährt das System nicht herunter, sondern schreibt nur in die Datei var/log/wtmp |
Die Verwaltung all dieser Prozesse ist eine der Hauptaufgaben des Systems. Zur Verwaltung werden die sogenannten Prozeßkenndaten verwandt. Die wichtigsten sind:
Die Überwachung der Prozesse und der Systemlast ist eine der wichtigsten Aufgaben in der Systemadministration. Während bei Desktop-Systemen, die normalerweise kaum Ihre Ressource ausnutzen, in den meisten Fällen außer Kontrolle geratene Prozesse die meisten Schwierigkeiten verursachen, sind bei den stärker geforderten Servern oft Flaschenhälse in Form von ungenügend dimensionierten Ressourcen ein Problem. Als Flaschenhals bezeichnet man die schwächste Systemkomponente, die letztendlich die Geschwindigkeit des Gesamtsystems bestimmt. Solche Flaschenhälse können sein:
Das Load Average wird vom Kernel ermittelt und in der virtuellen Datei /proc/loadavg notiert. Neben den drei Mittelwerte wird auch die aktuelle Anzahl der Prozesse in der Verarbeitungsschlange, die Anzahl aller Prozesse und die PID des zuletzt ausgeführten Prozesses angegeben.
tapico@enterprise:~> cat /proc/loadavg 4.30 1.44 0.50 2/91 4312
Ein Reihe von Tools wie uptime (Abschnitt 12.8.4), top (Abschnitt 12.8.3), w (Abschnitt 8.7.4) und procinfo (Abschnitt 12.8.6) lesen diese Datei aus und zeigen das Load Average an.
Was kann nun aber aus dem Load Average geschlossen werden? Normalerweise bedeutet ein hohes Load Average, daß der Rechner stark ausgelastet ist. Ideal ist ein Load Average von 1, da dann immer ein Prozeß in der Verarbeitungsschlange ist und sofort verarbeitet werden kann. Bei einem Load Average unter 1 hat die CPU teilweise nichts zu tun gehabt. Ist der Load Average über 1, dann müssen im Schnitt die Prozesse etwas warten, bevor Sie an die CPU kommen.
Normalerweise geht ein hoher Load Average auch mit einer hohen durchschnittlichen Rechenauslastung der CPU einher. Sind beide Angaben dauerhaft für das 15-Minuten-Mittel hoch, dann wäre es ratsam die Leistung der CPU zu erhöhen. Ein hohes Load Average muß aber nicht unbedingt zusammen mit einer hohen CPU-Auslastung zusammenhängen. Schauen wir uns doch mal das folgende Beispiel an.
root@mail-server:~ # top 1:31pm up 2 days, 4:24, 3 users, load average: 17.03, 16.93, 17.28 101 processes: 100 sleeping, 1 running, 0 zombie, 0 stopped CPU0 states: 1.0% user, 4.1% system, 0.0% nice, 94.0% idle CPU1 states: 2.0% user, 6.1% system, 0.0% nice, 91.0% idle Mem: 125844K av, 123272K used, 2572K free, 0K shrd, 5740K buff Swap: 257000K av, 141920K used, 115080K free 12624K cached ...
Auffällig ist die geringe Auslastung der beiden CPUs und das sehr hohe Load Average. Das Problem liegt also nicht in der Geschwindigkeit der CPUs, denn die drehen die meiste Zeit Däumchen. Auffällig ist, daß der Swap-Speicher stark genutzt wird. Dies sollte bei einem Server, der nur als Mail-Server dient, eigentlich nicht vorkommen. Eine Möglichkeit wäre also eine zu geringe Dimensionierung des Arbeitsspeichers. Der Rechner ist hauptsächlich mit der Ein- und Auslagerung von Speicherseiten beschäftigt, die die CPU nicht sehr stark belasten. Allerdings müßte der Mailserver schon sehr stark frequentiert werden um diesen Effekt zu erreichen.
Eine andere Möglichkeit ist eine zu langsame Festplatte. Beim Schreiben und Lesen von der Festplatte wird die CPU wenig gebraucht, allerdings blockiert der schreibende/lesende Prozess die CPU. Dies führt zu einem hohen Load Average aber zu einer kleinen CPU-Auslastung. Aber es geht noch weiter: Da die Daten nicht schnell genug geschrieben werden können, verbleiben Sie im Arbeitsspeicher und sorgen für einen größeren Speicherverbrauch. Die Katastrophe tritt in dem Moment ein, wenn der physikalische Arbeitsspeicher zu klein geworden ist und das System mit dem Auslagern auf die Festplatte beginnt. Die Zugriffe auf die langsame Festplatte erhöhen sich stark und die Verarbeitung einer eMail, die normalerweise nur Sekundenbruchteile braucht, dauert nun 5 Minuten.
Um das Problem zu lösen, sollte die Geschwindigkeit der Platte untersucht und die Zugriffsparameter optimiert werden. Reicht dies nicht aus, muß ein schnelles Plattensystem eingebaut werden. Sicherheitshalber sollte auch der physikalische Arbeitsspeicher erhöht werden um bei kurzfristigen Leistungspitzen besser puffern zu können.
Um sich eine Übersicht über die Prozesse zu verschaffen und übelgelaunte Prozesse, die das System belasten, zu identifizieren, können eine Reihe von Tools verwendet werden.
ps [OPTIONEN]
Die Optionen bei ps werden mit und ohne führenden Bindestrich geschrieben. Dies funktioniert, da ps keine Parameter kennt. Die Optionen mit einem Bindestrich stammen von Unix, während die Optionen ohne Bindestrich ihren Ursprung im BSD-Betriebssystem haben.
Der Befehl ps zeigt normalerweise die unter der eigenen UID laufenden Prozesse an. Die Option -e wie auch die Kombination ax bewirken eine Anzeige aller laufenden Prozesse, wenn auch mit unterschiedlichen Informationen.
Eine Auswahl von Optionen sortiert nach Ihrem Anwendungsgebiet finden Sie im folgenden Abschnitt.
| Optionen | |
| -e | Zeigt alle Prozesse an |
| a | Zeigt alle Prozesse, die einem Terminal zugeordnet sind. |
| x | Zeigt alle Prozesse, die keinem Terminal zugeordnet sind. |
| T | Zeigt alle Prozesse, die diesem Terminal zugeordnet sind. |
| Optionen | |
| -C NAME | Auswahl nach Programmnamen |
| -G GID | Auswahl nach GID |
| -p PID | Auswahl nach PID |
| -t TERMINAL | Auswahl nach Terminal |
| -U UID | Auswahl nach UID |
| Optionen | |
| -f | Ausführliche Ansicht |
| l | Sehr ausführliche Ansicht |
| u | Userorientiertes Format |
| v | Speicherorientiertes Format |
| Optionen | |
| e | Zeigt die dazugehörigen Umgebungsvariablen. |
| f | Zeigt die Ausgabe als Baum (Eltern- und Kindsprozesse). |
| h | Spaltenüberschriften werden unterdrückt. |
ole@enterprise:~ > ps PID TTY TIME CMD 2955 pts/5 00:00:00 bash 2978 pts/5 00:00:00 kdvi 2981 pts/5 00:00:37 kviewshell 4679 pts/5 00:00:00 ps ole@enterprise:~ > ps f PID TTY STAT TIME COMMAND 4537 pts/3 S 0:00 less 4535 pts/3 Z 0:00 [sh] <defunct> 2955 pts/5 S 0:00 /bin/bash 2978 pts/5 S 0:00 \_ /bin/sh /opt/kde3/bin/kdvi lk.dvi 2981 pts/5 S 0:37 | \_ kviewshell dvi lk.dvi 4682 pts/5 R 0:00 \_ ps f 2840 pts/4 S 0:00 /bin/bash 2296 pts/3 S 0:00 /bin/bash
Einzelne Prozesse können über die Prozeßnummer mit oder ohne die Option -p bzw. p ausgegeben werden.
ole@enterprise:~> ps -p 2981 PID TTY TIME CMD 2981 pts/5 00:00:37 kviewshell ole@enterprise:~> ps p 2981 PID TTY STAT TIME COMMAND 2981 pts/5 S 0:37 kviewshell dvi lk.dvi ole@enterprise:~> ps 2981 PID TTY STAT TIME COMMAND 2981 pts/5 S 0:37 kviewshell dvi lk.dvi
Auswahl der Prozesse nach dem kontrollierenden Terminal.
ole@enterprise:~> ps -t pts/3 PID TTY TIME CMD 2296 pts/3 00:00:00 bash 4534 pts/3 00:00:00 man 4535 pts/3 00:00:00 sh <defunct> 4537 pts/3 00:00:00 less 4538 pts/3 00:00:00 gzip
pstree [OPTIONEN] [PID]
| Optionen | |
| -a | Zeigt die Kommandozeilenargumente an |
| -c | Verhindert die kompakte Darstellung von identischen Zweigen |
| -l | Zeigt lange Zeilen an, sonst werden die Zeilen für die Bildschirmbreite umgebrochen |
| -n | Sortiert die Prozesse nach PID und nicht nach Name |
| -p | Zeigt die PIDs zu den Prozessen an |
| -u | Zeigt an, wenn die UID von Kinds- und Elternprozeß sich unterscheidet |
Ohne weitere Parameter gibt pstree den Baum ab dem Prozeß init aus. Durch Eingabe einer PID kann die Ausgabe auf einen Teilast beschränkt werden.
tapico@defiant:~> pstree -p 1079
kdeinit(1079)-+-kdeinit(1088)
|-kdeinit(1102)-+-bash(1103)-+-kdvi(1254)---kviewshell(1255)
| | `-pstree(2415)
| `-bash(1186)---su(1193)---bash(1194)
`-nedit(1207)
Hier ein Beispiel für eine Ausgabe des Befehls top.
8:38pm up 29 min, 3 users, load average: 0.11, 0.08, 0.09
59 processes: 51 sleeping, 2 running, 6 zombie, 0 stopped
CPU states: 0.7% user, 0.7% system, 0.0% nice, 98.4% idle
Mem: 62844K av, 61308K used, 1536K free, 46324K shrd, 15880K buff
Swap: 128516K av, 380K used, 128136K free 17252K cached
PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
724 tapico 9 0 1060 1060 876 R 0 0.9 1.6 0:00 top
207 root 10 0 11160 10M 2008 R 0 0.3 17.7 0:16 X
569 tapico 2 0 4272 4272 3100 S 0 0.1 6.7 0:01 kvt
1 root 0 0 200 200 172 S 0 0.0 0.3 0:05 init
2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd
3 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kupdate
4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kpiod
5 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kswapd
63 bin 0 0 396 396 320 S 0 0.0 0.6 0:00 portmap
67 root 0 0 480 480 400 S 0 0.0 0.7 0:00 rpc.ugidd
75 root 0 0 556 556 468 S 0 0.0 0.8 0:00 syslogd
79 root 0 0 784 784 328 S 0 0.0 1.2 0:00 klogd
105 root 0 0 508 492 396 S 0 0.0 0.7 0:00 rpc.mountd
108 root 0 0 500 484 396 S 0 0.0 0.7 0:00 rpc.nfsd
115 root 0 0 1536 1516 1400 S 0 0.0 2.4 0:00 httpd
116 wwwrun 0 0 1056 912 800 S 0 0.0 1.4 0:00 httpd
122 at 0 0 540 540 460 S 0 0.0 0.8 0:00 atd
Top besitzt eine Reihe von interaktiven Kommandos. Mit der Taste <h> oder <?> wird ein Hilfe-Bildschirm angezeigt.
Proc-Top Revision 1.2 Secure mode off; cumulative mode off; noidle mode off Interactive commands are: space Update display ^L Redraw the screen fF add and remove fields oO Change order of displayed fields h or ? Print this list S Toggle cumulative mode i Toggle display of idle proceses c Toggle display of command name/line l Toggle display of load average m Toggle display of memory information t Toggle display of summary information k Kill a task (with any signal) r Renice a task N Sort by pid (Numerically) A Sort by age P Sort by CPU usage M Sort by resident memory usage T Sort by time / cumulative time u Show only a specific user n or # Set the number of process to show s Set the delay in seconds between updates W Write configuration file ~/.toprc q Quit Press any key to continue
Weil der Befehl top kontinuierlich seine Informationen auf den neuesten Stand bringt und damit den Bildschirm füllt, ist es ratsam den Befehl auf einer seperaten Konsole oder X-Terminal laufen zu lassen. Interessant ist top vor allen Dingen, weil er das interaktive ``töten'' von Prozessen erlaubt, sowie das Ändern von Prozeßprioritäten.
tapico@enterprise:~> uptime 7:52am an 1:42, 4 Benutzer, Durchschnittslast: 0,01, 0,05, 0,01
free [OPTIONEN]
| Optionen | |
| -b | Angabe in Byte (byte) |
| -k | Angabe in Kilobyte(kB) |
| -m | Angabe in Megabyte(MB) |
| -o | Kein Anzeigen der Puffer/Cache-Korrektur(ohne) |
| -s ZEIT | Kontinuierliche Anzeige im Abstand von ZEIT Sekunden(switchtime) |
| -t | Zeigt eine Zeile mit den Werten aller Speicher an(total) |
| -V | Versionsnummer() |
tapico@enterprise:~> free -mt
total used free shared buffers cached
Mem: 501 492 9 0 55 215
-/+ buffers/cache: 220 280
Swap: 1004 28 975
Total: 1505 521 984
procinfo [OPTIONEN]
Bevor wir uns mit den Optionen des Befehls beschäftigen, schauen Sie sich doch erstmal die Informationen der Standardausgabe an.
tapico@ds9:~> procinfo Linux 2.4.19-4GB (root@Pentium.suse.de) (gcc 3.2) #1 1CPU [ds9.] Memory: Total Used Free Shared Buffers Cached Mem: 255004 53904 201100 0 9808 25300 Swap: 530104 0 530104 Bootup: Sun May 2 08:26:17 2004 Load average: 0.10 0.04 0.05 1/42 2962 user : 0:00:15.06 0.3% page in : 28756 disk 1: 2724r 2500w nice : 0:00:00.00 0.0% page out: 28309 system: 0:00:13.13 0.2% swap in : 1 idle : 1:31:20.36 99.5% swap out: 0 uptime: 1:31:48.55 context : 91434 irq 0: 550855 timer irq 7: 1 irq 1: 6 keyboard irq 8: 2 rtc irq 2: 0 cascade [4] irq 9: 64241 usb-uhci irq 3: 17595 eth0 irq 11: 0 acpi irq 4: 1 irq 14: 5936 ide0 irq 5: 0 Intel 82801AA-ICH irq 15: 0 ide1
| Optionen | |
| -a | Zeigt alle Informationen an.(all) |
| -b | Daten für das I/O-Verhalten der Platten werden in Blöcken angegeben und nicht in Anfragen. (blocks) |
| -d | Speicher-, CPU-, Paging-, Swapping-, Platten-, Context- und Interrupt-Daten werden pro Sekunde und nicht total angezeigt. Enthält den Schalter -f. |
| -D | Wie -d, die Speicherdaten werden aber total angezeigt. |
| -f | Gibt kontinuierlich Informationen über das System aus wie top.(force) |
| -FDATEI | Leitet die Ausgabe in eine Datei in. In den meisten Fällen wird ein Terminal (tty) angegeben. (file) |
| -h | Zeigt die Hilfe an.(help) |
| -i | Zeigt auch ungenutzte Interrupts an. (irq) |
| -m | Zeigt Informationen über Module und Geräte an anstatt über CPU und Speicher. (module) |
| -nN | Legt den Aktualisierungszeitraum im Zusammenhang mit dem Schalter -f fest. (new) |
| -r | Anzeige des wirklich freien Speichers wie in free.(free) |
| -v | Version() |
tapico@ds9:~> procinfo -fn2
Anstatt der Informationen über CPU und Speicher können Sie sich auch Informationen über die Module und Gerät anzeigen lassen. Dies ermöglicht der Schalter -m. Wenn Sie den Schalter -a benutzen, werden Informationen über CPU, Speicher, Module und Geräte angezeigt.
tapico@ds9:~> procinfo -m Linux 2.4.19-4GB (root@Pentium.suse.de) (gcc 3.2) #1 1CPU [ds9.] Kernel Command Line: root=/dev/hda5 Modules: 8 pppoe 1 *pppox 13 af_packet 18 usbserial 25 *parport_pc 7 lp 22 *parport 18 snd-intel8x0 62 snd-pcm 11 snd-timer 26 snd-ac97-codec 3 snd-mpu401-uar 14 snd-rawmidi 4 snd-seq-device 31 snd 3 soundcore 136 *ipv6 2 *ipt_TCPMSS 1 *ipt_TOS 1 *ipt_MASQUERADE 1 *ipt_state 3 *ipt_LOG 16 ppp_generic 5 slhc 7 printer 14 *pegasus 5 joydev 4 evdev 3 input 21 usb-uhci 55 *usbcore 26 *3c59x 3 *ipt_REJECT 2 *iptable_mangle 2 *iptable_filter 3 ip_nat_ftp 13 *iptable_nat 3 ip_conntrack_f 14 *ip_conntrack 11 *ip_tables 62 lvm-mod 75 *ext3 44 *jbd Character Devices: Block Devices: 1 mem 29 fb 1 ramdisk 2 pty 108 ppp 3 ide0 3 ttyp 109 lvm 7 loop 4 ttyS 116 alsa 9 md 5 cua 128 ptm 22 ide1 6 lp 136 pts 58 lvm 7 vcs 162 raw 10 misc 180 usb 13 input 188 usb/tts/%d 14 sound File Systems: ext3 [rootfs] [bdev] [proc] [sockfs] [futexfs] [tmpfs] [shm] [pipefs] ext2 [ramfs] minix iso9660 [nfs] [devpts] [usbdevfs] [usbfs]
Noch zu erledigen: -Ffile Redirect output to file (usually a tty). Nice if, for example, you want to run procinfo permanently on a virtual console or on a terminal, by starting it from init(8) with a line like:
p8:23:respawn:/usr/bin/procinfo -biDn1 -F/dev/tty8
Eine Reihe von Shell-Kommandos können zur Administration verwendet werden.
nice [OPTION] KOMMANDO
Das Kommando ist ein Befehl oder eine Kette von Befehlen, die mit der angegebenen Priorität ausgeführt werden können. Im Normalfall ist die Prozeßpriorität bei Verwendung von nice auf den Wert 10 festgelegt. Mit dem Schalter -n ZAHL kann eine Priorität zwischen -20 und 19 angegeben werden. Dabei bedeutet eine kleinere Zahl eine höhere Priorität und eine große Zahl eine niedrige Priorität. Nur der Superuser ist in der Lage einen negativen Wert, und damit eine höhere Priorität als normal, einzustellen.
nice -n 19 find / -name urmel* -print > urmelliste.txt
renice PRIORITÄT PROZESS
Dabei kann der Zielprozeß durch Angabe der PID bestimmt werden. Mit den Schaltern -u und -g kann sich auf alle Prozesse einer Benutzers oder einer Gruppe bezogen werden und mit -p weitere PIDs angegeben werden.
renice +5 4711 -u wwwrun kingkong -p 42
Also immer wenn Sie einen Befehl eingeben, läuft dieser Befehl im Vordergrund. Die Shell wartet so lange, bis der Befehl abgearbeitet worden ist. Das kann z. B. beim find-Befehl etwas länger dauern. Um das Terminal dabei nicht zu blockieren, kann der Prozeß in den Hintergrund gelegt werden. Dabei sollte natürlich die Ausgabe des Befehls abgefangen und in eine Datei umgeleitet werden. Ein an die Zeile angefügtes kaufmännisches Und (&) sorgt für das Verschieben in den Hintergrund.
find / -user tapico -exec rm -f {}; 2> /dev/null &
Ein laufendes Programm können Sie unter der bash mit der Tastenkombination <Strg>+<z> stoppen und in den Hintergrund verschieben.
Ein Job ist eine Folge von einem oder mehreren Kommandos. Also immer wenn Sie Linux einen einzelnen oder mehrere miteinander verknüpfte Befehle geben, erstellen Sie einen Job. Die Shell ist in der Lage diese Jobs zu kontrollieren und weißt diesen Jobs daher Identifikationsnummern zu.
jobs [OPTIONEN] [JOB]
| Optionen | |
| -r | Zeigt nur laufende Jobs an |
| -s | Zeigt nur gestoppte Jobs an |
ole@defiant:~ > jobs [1]- Stopped tail -f /var/log/warn >warning.log [2]+ Stopped vi warning2.log [3] Running ping 217.89.70.62 >ping.log & ole@defiant:~ > jobs -r [3] Running ping 217.89.70.62 >ping.log & ole@defiant:~ > jobs -s [1]- Stopped tail -f /var/log/warn >warning.log [2]+ Stopped vi warning2.log
Dabei zeigt jobs nur die Hintergrundjobs an, die von dieser Shell gestartet worden sind. Die Jobs in Shells auf anderen Terminals oder sogar in der Elternshell werden nicht dargestellt.
ole@defiant:~ > tail -f /var/log/warn > warning.log & [1] 3085 ole@defiant:~ > jobs [1]+ Running tail -f /var/log/warn >warning.log & ole@defiant:~ > bash ole@defiant:~ > tail -f /var/log/warn > warning2.log & [1] 3108 ole@defiant:~ > jobs [1]+ Running tail -f /var/log/warn >warning2.log &
fg [JOB]
Außerdem geht auch % oder fg %. Wenn mehrere Hintergrundjobs vorhanden sind, muß die Jobnummer oder der Name angegeben werden.
fg
fg %4
holt den Prozeß mit der Nummer 4 aus dem Hintergrund.
fg %joe
holt den Job ``joe'' aus dem Hintergrund hervor.
ole@defiant:~ > tail -f ~/.X.err & [1] 976 ole@defiant:~ > Creating Harddisk icons... Starting kcontrol -init...Done. No sound device available. kaudioserver not started. Starting krootwm...Starting kfm...Done. Done. No sound device available. kwmsound not started. Starting kbgndwm...Done. Starting kpanel...Done. startkde: program khotkeys not found! Max Entries = 23 fg %1 tail -f ~/.X.err ole@defiant:~ >Der Befehl tail wird erst in den Hintergrund geschoben, dann wieder in den Vordergrund gebracht und mit <Strg>+<c> abgebrochen.
bg [JOB]
Außerdem geht auch bg %N oder fg %NAME. Wenn mehrere Hintergrundjobs vorhanden sind, muß die Jobnummer oder der Name angegeben werden.
kill [OPTIONS] ID
Das Standardsignal ist das Beenden des Prozesses mit SIGTERM. Man spricht in diesem Fall auch von Terminieren. Nur der Superuser oder der Besitzer des Prozesses dürfen Signale senden. Die ID kann die PID, % (Das wäre der aktuelle Job), %N oder %JOBNAME sein.
Eine Übersicht über die Signal liefert Tabelle 12.4.
kill -9 %joe
joe'' zum Selbstmord auf.
kill -HUP $(cat /var/run/httpd.pid)
führt zum Neustart des Apache-Webservers.
|
killall [OPTIONS] ID
Die sonstige Arbeitsweise ist identisch mit kill.
nohup KOMMANDO
Wenn das KOMMANDO die Standardausgabe und Standardfehlerausgabe aufs Terminal benutzt, so wird diese umgeleitet auf die Datei nohup.out. Sollte dies nicht klappen wird versucht die Ausgabe in die Datei $HOME/nohup.out umzuleiten. Klappt dies wieder erwarten auch nicht, dann verweigert nohup die Ausführung des Kommandos. Die Datei nohup.out wird nur mit Rechten für den Besitzer erstellt. Bei bereits vorhandenen nohup.out-Dateien werden die Rechte nicht angefaßt.
Die Kommandos werden nicht automatisch in den Hintergrund gebracht. Dazu ist ein abschließendes Kaufmännisches Und (&) nötig. Auch die Prozeßpriorität wird nicht verändert. Hier ist zusätzlich der Befehl nice (12.9.1) notwendig.
Der Befehl wurde entwickelt um Programme auch nach dem Ausloggen weiter laufen zu lassen. Normalerweise bekommen auch Programme, die in den Hintergrund verschoben wurden und dort laufen, beim Ausloggen das Signal SIGHUP gesendet. Die führt, wenn der Programmierer es nicht explizit abfängt, zum Abbruch des Programms. Allerdings kann ich diesen Effekt bei einer SuSE 9.0 nicht nachvollziehen. Auch normal im Hintergrund gestartete Prozesse liefen nach dem Abmelden und Anmelden immer noch. Sie hatten zwar Ihren Elternprozess verloren, waren aber noch immer aktiv.
Als Endestatus bzw. Fehlercode von nohup kommen die Werte 126 und 127 in Frage. Bei 126 wurde das KOMMANDO zwar gefunden, konnte aber nicht gestartet werden. Dagegen konnte bei 127 das KOMMANDO nicht gefunden werden oder nohup hat einen Fehler. Ansonsten werden die Fehlercodes des KOMMANDO weitergereicht.
ole@enterprise:~/test> tail -f /var/log/warn > warn.log & [2] 6082 ole@enterprise:~/test> kill -s SIGHUP 6082 [2]+ Aufgelegt tail -f /var/log/warn >warn.log ole@enterprise:~/test> nohup tail -f /var/log/warn > warn.log & [2] 6087 ole@enterprise:~/test> kill -s SIGHUP 6087 ole@enterprise:~/test> ps -e | grep tail 6087 pts/6 00:00:00 tail
Die Standardausgabe wird umgeleitet in die Datei nohup.out, die mit sehr strengen Rechten versehen ist.
ole@enterprise:~/test> nohup tail -f /var/log/warn & [1] 6108 nohup: appending output to `nohup.out' ole@enterprise:~/test> ls -l insgesamt 4 -rw------- 1 ole users 655 2004-06-24 23:10 nohup.out
Notizen:
Notizen:
Bootvorgang und Prozesse
Notizen:
Für die automatische Verwaltung täglicher Aufgaben und einmaliger Aufgaben besitzt Linux die entsprechenden Ressourcen.
Dämonen sind im Prinzip auch nur Programme, die aber nicht über ein Terminal gestartet werden. Beim at-Dämon ist dies das Programm /usr/sbin/atd. Sie können den Dämon einfach starten, indem Sie als root den Befehl atd auf der Shell eingeben. Wie für alle Systemdienste bzw. Dämonen existiert auch für atd ein RC-Script. Dieses ist /etc/init.d/atd und ist mit dem symbolischen Link /usr/sbin/rcatd verknüpft. Sie sollten den Dämon möglichst über dieses Skript starten, neustarten oder beenden.
defiant:~ # rcatd start Starting service at daemon done defiant:~ # rcatd restart Shutting down service at daemon done Starting service at daemon done defiant:~ # rcatd stop Shutting down service at daemon done
Allerdings ist der Dämon nach einem Neustart nicht mehr aktiv. Sie müssen, wenn Sie den Dämon jedesmal aktiv haben wollen, ihn in die Runlevel eintragen. Sie können dies bei SuSE entweder über YaST und den Runlevel-Editor erledigen oder Sie benutzen den Befehl insserv (12.4.7). Die Runlevel, für die insserv das Skript einträgt, stehen in einem Kommentarfeld im Skript.
linux37:/etc/init.d # grep Default-Start atd # Default-Start: 2 3 5 linux37:/etc/init.d # insserv atd
Um nun einen Job zu starten benötigen Sie noch ein Werkzeug, daß das entsprechende Programm, Kommando oder Skript in die Warteschlange packt. Dies ist der Befehl at.
at [OPTIONEN] ZEIT
Verantwortlich für die Ausführung des Befehls zur richtigen Zeit ist der Dämon atd, der im Hintergrund läuft und wie ein Wecker zum voreingestellten Zeitpunkt die entsprechenden Maßnahmen einleitet.
| Optionen | |
| -d | Löscht einen Job (delete) |
| -f DATEI | Liest den Job aus der angegebenen Datei (file) |
| -l | Zeigt alle Jobs des Benutzers an (list) |
| -m | Sendet nach dem Abschluß des Jobs eine eMail (mail) |
Die Benutzung des at-Kommandos ist ganz einfach.
tapico@defiant:~ > at +1 minutes warning: commands will be executed using /bin/sh at> who > ~/who.txt at> <EOT> job 9 at 2001-02-10 18:25
Bei der Zeitangabe stehen Ihnen mehrere Möglichkeiten zur Verfügung.
atq
Die Funktion des Befehls ist identisch zu at -l.
atrm JOBNUMMERN
Die Funktion des Befehls ist identisch zu at -d JOBNUMMER.
Mit zwei Dateien ist es möglich festzulegen, wer überhaupt Jobs starten darf. Dies sind die Dateien /etc/at.allow und /etc/at.deny . Wenn also ein Benutzer einen Job anlegen will, dann prüft das System zuerst, ob der Benutzer dazu berechtigt ist.
Existiert die Datei /etc/at.allow nicht, dann wird in der Datei /etc/at.deny nachgeschaut, ob der Zugriff für den Benutzer verboten ist.
Existiert die Datei /etc/at.allow und der Benutzer ist dort aufgeführt, dann darf der Benutzer den Job anlegen. Die Datei /etc/at.deny wird nicht überprüft. Eine leere /etc/at.deny erlaubt jedem Benutzer das Anlegen eines Jobs. Existiert hingegen die Datei gar nicht, dann hindert das alle Benutzer am Anlegen von Jobs. Wenn beide Dateien nicht existieren, dann darf nur der Superuser Jobs anlegen.
Auf jeden Fall sollten Sie als Systemadministrator darauf achten, daß das System nicht durch zu viele Job verstopft wird. Benutzen Sie dazu die Kommandos atq und atrm.
batch [OPTIONEN] [ZEIT]
Der Befehl batch entspricht dem Befehl at -b now. Der Schalter -b steht allerdings unter at nicht mehr zur Verfügung.
Im Gegensatz zu at hat der Job eine sehr niedrige Priorität. Der Befehl untersucht die virtuelle Datei /proc/loadavg. Wenn die durchschnittliche Belastung (average load) unter 0,8 sinkt, dann wird der Job ausgeführt. Sie haben außerdem eine geringere Priorität als Hintergrundjobs. Im Gegensatz aber zu diesen, werden Sie nicht beim Ausloggen beendet, sondern laufen weiter. Vom Ende des Jobs werden Sie dann per eMail benachrichtigt. Wenn keine Zeit angegeben wird, beginnt der Job sofort.
Das Verzeichnis für den Dämon ist /var/spool/cron . Hier schaut der Dämon cron im Verzeichnis tabs nach ob es persönliche Aufgaben gibt. Die sind in Dateien mit dem Benutzernamen des jeweiligen Users abgelegt. Im folgenden Beispiel hat der User tapico mit der Masterdatei cj eine Cron-Job angelegt.
defiant:/var/spool/cron # ls -l tabs insgesamt 4 -rw------- 1 root users 214 2004-05-25 15:19 tapico defiant:/var/spool/cron # cat tabs/tapico # DO NOT EDIT THIS FILE - edit the master and reinstall. # (cj installed on Tue May 25 15:19:44 2004) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) */5 * * * * uptime >> ~/uptime.log
Die gefundenen Cron-Tabelle (engl. crontabs) werden in den Speicher geladen. Daneben konsultiert der Dämon die Datei /etc/crontab, die bei SuSE 9.0 so aussieht.
SHELL=/bin/sh PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin MAILTO=root # # check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly # -*/15 * * * * root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1 59 * * * * root rm -f /var/spool/cron/lastrun/cron.hourly 14 4 * * * root rm -f /var/spool/cron/lastrun/cron.daily 29 4 * * 6 root rm -f /var/spool/cron/lastrun/cron.weekly 44 4 1 * * root rm -f /var/spool/cron/lastrun/cron.monthly
Daneben sorgt das Skript /usr/lib/cron/run-crons dafür, daß die Skripte in den Verzeichnissen /etc/cron.daily, /etc/cron.weekly und /etc/cron.monthly regelmäßig ausgeführt werden. Bei anderen Distributionen erfolgt der Aufruf der Skripte durch das Programm run-parts, das durch den Daemon aufgerufen wird.
Die Dateien im Verzeichnis /etc/cron.daily werden als Erweiterung von /etc/crontab bezeichnet. Dies ermöglicht eine feinere Abstimmung von Aufgaben, als wie sie durch die oben erwähnten Cron-Verzeichnisse angeboten werden.
Damit ist also der Dämon crond für die Ausführung der regelmäßigem System- und Benutzerjobs zuständig. Er wird normalerweise gestartet, wenn Linux bootet und wacht jede Minute auf um zu überprüfen ob ein Job gestartet werden soll. Dabei überprüft er jedes mal die Cron-Tabelle. Sollte sich das Änderungsdatum einer Tabelle geändert haben, dann wird die Tabelle neu in den Speicher geladen. Es ist daher nicht notwendig den Cron-Dämon nach einer Änderung neu zu starten.
Bei der Ausführung werden alle Ausgaben des jeweiligen Jobs per eMail an den Besitzer der Cron-Tabelle gesendet. Es ist natürlich klar, daß Benutzer nur ihre eigenen Jobs und der Superuser alle Jobs bearbeiten kann. Für weitere Informationen über den Cron-Dämon konsultieren Sie bitte die Manual-Page cron(8).
crontab [OPTIONEN] [MASTERDATEI]
| Optionen | |
| -e | Erstellt oder bearbeitet die crontab-Datei des Benutzers |
| -l | Zeigt die crontab-Datei des Benutzers an |
| -r | Löscht die crontab-Datei des Benutzers |
| -u BENUTZER | Legt fest, mit welcher crontab-Datei gearbeitet werden soll (nur Superuser) |
Um crontab zu nutzen, müssen Sie zuerst eine Masterdatei im Format der oben schon gezeigten /etc/crontab anlegen. Den Namen können Sie frei wählen, er sollte aber nicht gerade mit crontab lauten. Dort tragen Sie für jeden Cron-Job eine Zeile mit sechs Feldern ein. Diese sechs Felder sind von links nach rechts: Minute, Stunde, Tag des Monats, Monat, Wochentag und Kommando. Die Werte für die Felder entnehme Sie bitte der Tabelle 13.1.
|
Zeilen in den Cron-Dateien, die mit einem Schweinegatter `#' beginnen, sind Kommentarzeilen und werden ignoriert. Außerdem werden leere Zeilen und führende Leerzeichen auch ignoriert. Ein Asterisk `*' in einem Feld repräsentiert jeden möglichen Wert (also vom ersten bis zum letzten) für das Feld.
Das crontab-Kommando speichert eine Kopie der Masterdatei unter dem Benutzernamen in dem Verzeichnis /usr/lib/crontab/tabs. Sie können auch direkt die Cron-Tabelle bearbeiten, in dem Sie den Befehl crontab -e benutzten. Dieser Befehl startet den Editor vi mit der aktuellen Cron-Tabelle und sorgt dann nach dem Beenden und Speichern für die Aktualisierung der Cron-Tabellen.
00 10 * * * who >> /var/log/benutzerliste.log
Bei einer Liste von Werten werden die Einzelwerte durch Kommata voneinander getrennt. Zeitbereich können auch mit einem Bindestrich `-' angegeben werden. So bedeutet `10-12' das Gleiche wie `10,11,12'. Ein Job, der jeden Dienstag und Donnerstag um 12 Uhr ausgeführt werden soll, kann dann so angegeben werden.
00 12 * * 2,4 myjob
Ein Job, der zu jeder Stunde von 6 bis 18 Uhr ausgeführt werden soll, sieht dann so aus.
00 6-18 * * * myjob
Soll ein Job innerhalb dieses Zeitraums nur jede zweite Stunde ausgeführt werden, dann kann man den Schrägstrich benutzen.
00 6-18/2 * * * myjob
Der folgende Befehl veranlaßt alle 5 Minuten einen Ping auf eine Internetadresse. Dies ist z. B. eine Möglichkeit eine Internetverbindung offen zu halten, wenn Sie sonst vom Provider nach 10 Minuten Inaktivität geschlossen werden würde.
*/5 * * * * ping -c 1 www.fibel.org &> /dev/null
Eine Besonderheit ist die Angabe des Tages. Hier stehen zwei Möglichkeiten zur Verfügung. Sie können den Tag des Monats und den Wochentag angeben. Werden beide Informationen angegeben, dann wird der Job zu dem Zeitpunkt ausgeführt wenn mindestens eine von den Angaben zutrifft. Der folgende Befehl wird also nicht nur am Freitag, den 13. ausgeführt, sondern er wird an jedem 13. Tag des Monats und an jedem Freitag ausgeführt.
00 12 13 * 5 freitag_der_13.sh
syslogd
| Optionen | |
| -f DATEI | Gibt alternative Konfigurationsdatei an (file) |
| -h | Veranlaßt syslogd dazu, Nachrichten von verbundenen Hosts weiterzuleiten (hosts) |
| -l HOST | Die angegebenen HOSTs (Liste mit Doppelpunkt getrennt) werden nur mit einfachem und nicht mit vollem Hostnamen mitgeloggt (list of hosts) |
| -m INTERVALL | Zeit zwischen zwei markierten Linien (Standard: 20 Minuten) (markintervall) |
| -r | Erlaubt den Empfang von Netzwerknachrichten (remotenews) |
Der Dämon syslogd kann durch Signale gesteuert werden. Der Befehl kill (Abschnitt 12.9.7) kann mit den Signalen dazu verwendet werden, syslogd zu starten, stoppen, die Datei /etc/syslog.conf auf den neuesten Stand zu bringen u. s. w.
kill -SIGNAL $(cat /var/run/syslogd.pid)
Die Datei /var/run/syslogd.pid enthält die aktuelle PID des syslogd-Prozesses. Ein Übersicht über die Signal zeigt Tabelle 13.2.
|
# print most on tty10 and on the xconsole pipe # kern.warning;*.err;authpriv.none /dev/tty10 kern.warning;*.err;authpriv.none |/dev/xconsole *.emerg * # enable this, if you want that root is informed # immediately, e.g. of logins #*.alert root # # all email-messages in one file # mail.* -/var/log/mail mail.info -/var/log/mail.info mail.warning -/var/log/mail.warn mail.err /var/log/mail.err # # all news-messages # # these files are rotated and examined by "news.daily" news.crit -/var/log/news/news.crit news.err -/var/log/news/news.err news.notice -/var/log/news/news.notice # enable this, if you want to keep all news messages # in one file #news.* -/var/log/news.all # # Warnings in one file # *.=warning;*.=err -/var/log/warn *.crit /var/log/warn # # save the rest in one file # *.*;mail.none;news.none -/var/log/messages # # enable this, if you want to keep all messages # in one file #*.* -/var/log/allmessages # # Some foreign boot scripts require local7 # local0,local1.* -/var/log/localmessages local2,local3.* -/var/log/localmessages local4,local5.* -/var/log/localmessages local6,local7.* -/var/log/localmessages
Dabei besteht jede Linie aus drei Angaben. Der Nachrichtenquelle, dem Nachrichtentyp und der Logdatei13.2.
Die Nachrichtenquelle ist eines der folgenden Schlüsselworte: auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, syslog, user, uucp und local0 bis local7.
Der Nachrichtentyp bzw. die Nachrichtenpriorität wird in aufsteigender Reihenfolge durch die Schlüsselworte debug, info, notice, warning, err, crit, alert und emerg ausgedrückt.
Ein Minuszeichen vor dem Namen der Logdatei sorgt dafür, daß die Nachrichten nicht sofort auf Platten geschrieben werden, sondern, wie sonst auch üblich, im RAM gespeichert und erst bei der nächsten routinemäßigen Synchronisation von RAM und Platte geschrieben werden.
Weitere Informationen finden Sie unter man syslog.conf.
*.emerg root
Das Gleichheitszeichen sorgt dafür, daß die genannte Nachrichtenpriorität exklusiv in einer Datei mitgeloggt wird.
*.=crit /var/log/critical
Das Ausrufungszeichen `!' wird als Negationsoperator verwendet.
mail.*;mail.!=info /var/log/maillog
Damit zum Beispiel überhaupt keine Mail-Nachrichten mitgeloggt werden, kann mail.!* oder mail.none gesetzt werden.
Vorsicht: Bei den Dateien /var/log/wtmp, /var/run/utmp und /var/log/lastlog handelt es sich um Binärdateien.
Für diesen Zweck gibt es den Befehl logrotate. Es sorgt dafür, daß ältere Daten aus den Logdateien entnommen und archiviert werden, alte Logdateien gelöscht und neue leere Logdateien erstellt werden.
logrotate [OPTIONEN] KONFIG_DATEI
Normalerweise ist die Konfigurationsdatei /etc/logrotate.conf , es können aber auch andere Dateien verwendet werden. Die Statusinformationen werden in der Datei /var/lib/logrotate.status gespeichert.
Die möglichen Kommandos entnehmen Sie bitte der Tabelle 13.3.
|
Eine Konfigurationsdatei kann globale und lokale Optionen enthalten. Globale Optionen gelten für alle Logs, während lokale Optionen für ein bestimmtes Log gedacht sind.
Der Eintrag
# Globale Optionen
weekly
# Lokale Optionen
# für wtmp
/var/log/wtmp {
monthly
}
bewirkt, daß alle Logs wöchentlich rotieren. Dies ist eine globale Option. Die explizite Angabe des Lognamens beim zweiten Eintrag bewirkt, daß die globale Option durch die lokale Option überschrieben wird und die Logdatei wtmp nur monatlich rotiert.
Die Datensicherung eines Systems ist eine der wichtigsten Aufgaben eines Administrators. In vielen Fällen kann es sogar die einzige Aufgabe sein.
Eine Datensicherung macht man nur aus einem Grund. Man will in der Lage sein ein zerstörtes System in kürzester Zeit wieder zum Laufen zu bringen. Eine Datensicherung zu besitzen kann einen davor bewahren Tage oder sogar Wochen an der Wiederherstellung des Systems und der Daten zu sitzen.
Steht das System dem Benutzer nicht zur Verfügung, so müssen auch die Kosten für die Ausfallzeit der Mitarbeiter mit in die Kosten für das gesamte Projekt einkalkuliert werden. Da dies sehr teuer werden kann, sollte man diesen Posten bei der Abwägung für die Durchführung der Aufgabe genau unter die Lupe nehmen.
Als erstes sollten Sie Ihre Daten unterteilen in jene, die sich ändern, und jene, die sich nicht ändern. Als Regel kann man davon ausgehen, daß die System- und Applikationsdateien sich nicht so häufig ändern. Dies passiert ja nur, wenn das System und die Applikationen auf den neuesten Stand gebracht werden. Daher ist es eine Verschwendung von Ressourcen, wenn man diese Daten täglich sichert. Es ist aber eine gute Idee, nach jedem Update ein Backup vom aktuellen System zu fahren. So ist eine schnelle Wiederherstellung des laufenden Systems in kürzester Zeit möglich. Ein Installation mit womöglich noch nachträglich zu installierenden Patches und Treiber dauert wesentlich länger, als eine Sicherung wieder auf das System zu spielen.
Für die Datendateien, die sich naturgemäß häufiger ändern, sollten Sie einen regelmäßigen Turnus für die Datensicherung einführen. Da die wichtigsten Dateien sich täglich ändern, sollte auch das Backup täglich durchgeführt werden.
Haben Sie sich entschieden verschiedene Datengruppen in verschiedenen Intervallen zu sicher, so sollten Sie diese Dateien auch an unterschiedlichen Orten, am besten in unterschiedlichen Partitionen, speichern. Dies erleichtert die Datensicherung wesentlich.
So sollte sich das Heimatverzeichnis auf einer seperaten Partition befinden um die Sicherung der persönlichen Dateien der Benutzer wesentlich zu vereinfachen. Außerdem würde ein Schaden an der Systempartition keinen Schaden an den Daten verursachen und die Wiederherstellung des Systems wesentlich vereinfachen.
Warum sollten Sie Systemressourcen, Platz und Arbeitskraft für ein tägliches Update Ihrer Systemdateien verschwenden, wenn sich diese alle paar Wochen nur ändern. Eigentlich brauchen Sie nur eine Sicherung, wenn Sie Veränderung am System, wie Patchen oder Aufspielen neuer Versionen, durchgeführt haben. Ein regelmäßiges Backup in größeren Abständen (z. B. monatlich) sollte aber durchgeführt werden, um sicher zu gehen, daß Sie eine funktionierende Kopie Ihres Systems besitzen.
Wenn es um die Häufigkeit eines Backups geht, dann fragen Sie sich doch einfach, welcher Schaden Ihrem Unternehmen entsteht, wenn die Daten verlorengehen, bevor eine Sicherung gefahren werden konnte. In den meisten Fällen reicht ein tägliches Backup aus. Bei sehr wichtigen sich häufigen ändernden Daten kann es sogar sinnvoll sein eine stündliche Sicherung zu fahren.
Bei Systemen, die rund um die Uhr ausgelastet sind, muß man Fenster der Inaktivität nutzen um immer wieder einzelne Dateien zu sichern.
In der heutigen Zeit der billigen Festplatten, CD-Rs und optischen Laufwerken haben Sie ein große Zahl weiterer Medien für ihr Sicherung zur Verfügung.
Eine zweite Festplatte ist ein einfaches und schnelles Sicherungsmedium. Sollen aber mehrere Sicherungen über längere Zeit aufbewahrt werden, wird dieses Prinzip bald unerschwinglich teuer.
Die CD-R ist durch ihren günstigen Preis und ihre lange Haltbarkeit ein weitere gute Lösung. Allerdings macht ihr beschränkter Datenplatz bei größeren Backups Probleme. Daß sie nur einmal verwendbar ist, ist bei dem geringen Medienpreis zu verschmerzen. Die DVD mit ihrer größeren Kapazität und doch relativ kleinen Medienpreisen schließt hier eine Lücke im Angebot und reicht für viele Anwendungen aus.
Wollen Sie aber dennoch ein mehrfach beschreibbares Medium verwenden, dann sollten Sie sich mit den Magneto-Optischen-Medien beschäftigen. Sie stellen mehr Platz als CD-Rs zur Verfügung, der Zugriff auf die Daten ist flexibel wie bei einer Festplatte und sie sind haltbarer als Bänder.
Wenn man eine Datei an einen anderen Ort kopiert, ist man in der Lage die Datei wiederherzustellen, falls sie beschädigt worden ist. Meisten benutzt man ein wiederbeschreibbares Medium wie Floppy oder Zip-Disk für diese Aufgabe. Hauptanwendungsgebiet ist die Sicherung von Konfigurationsdateien. So kann man bei Fehlern beim Konfigurieren durch einfaches Zurückkopieren der Dateien den alten Zustand des Systems wieder herstellen.
Kommt es nun an einem Mittwoch zu einem Systemausfall, dann müssen Sie zuerst das Backup vom Freitag - das ist das volle Backup - einspielen. Danach müssen Sie dann die Backups vom Montag und Dienstag einspielen um die Änderungen vom letzten vollen Backup wiederherzustellen.
Summa sumarum brauchen Sie also 52 Bänder um Ihre Backupstrategie durchführen zu können. Vergessen Sie aber auf keinen Fall die Bänder auch sorgfältig zu beschriften, sonst nützt Ihnen auch das vollständigste Backup nichts.
Machen Sie sich einfach einen Zettel und notieren Sie bei jedem Backup darauf:
tar [OPTIONEN] [TARARCHIV] [DATEILISTE]
In den Optionen bilden die Schalter eine besondere Gruppe. Es kann immer nur ein Schalter zur Zeit verwendet werden, während die anderen Optionen kombinierbar sind.
| Schalter | |
| A | Hängt das ARCHIV2 and das Ende von ARCHIV1 |
| c | Legt ein neues Archiv an |
| d | Vergleicht den Inhalt des Archivs mit anderen Dateien |
| r | Fügt die neuen Dateien an das Ende eines bestehenden Archivs an |
| t | Zeigt eine Liste aller Dateien im Archiv |
| u | Fügt nur neue oder veränderte Dateien zum Archiv hinzu |
| x | Extrahiert Dateien aus dem Archiv |
| Optionen | |
| b N | Definiert die Blockgröße |
| e | Verhindert das Aufsplittern von Dateien über Archiv-Volumes |
| f DATEI | Name des Archivs mit Pfad oder Gerätename |
| j | Benutzt bzip2 zur Kompression |
| m | Übernimmt nicht die Änderungszeit der Datei aus dem Archiv |
| n | Das Gerät ist kein Bandgerät |
| p | Die Originalrechte werden übernommen |
| v | Zeigt die Liste der Dateien an, die bearbeitet werden |
| w | tar arbeitet interaktiv |
| z | Benutzt gzip zur Kompression |
| F Skript | Am Ende jedes Mediums das angegeben Skript ausführen |
| L | Länges des Bandes in kByte |
| M | Das Archiv ist in mehrere Teile (Volumes) aufgeteilt. |
| W | Überprüft die Dateien, nachdem sie zum Archiv hinzugefügt worden sind. |
| X DATEI | Die in DATEI aufgeführten Dateien werden nicht berücksichtig. |
| Z | Benutzt compress zur Kompression |
--exclude DATEI |
Die DATEI wird nicht berücksichtigt. |
tar cf archiv.tar .
Als Ziel kann neben einer Datei auch ein Gerät angegeben werden. Der folgenden Befehl speichert das komplette Dateisystem auf dem Gerät /dev/tape.
tar cf /dev/tape /
Dabei wird der Inhalt des Magnetbandes überschrieben. Meistens müssen Sie bei einem Magnetband die Blockgröße mit angeben. Die Blockgröße definiert dabei die Menge an Daten (in Einheiten zu 512 Byte), die zur gleichen Zeit geschrieben werden können. Die Angabe erfolgt durch die Option b.
tar cfb /dev/tape 20 /
Wie Sie sehen, wird der Wert für b nicht wie üblich direkt hinter die Option geschrieben, sondern erst werden die Optionen aufgeführt und dann in der Reihenfolge die Werte.
Wenn Sie das Archiv auf mehrere Geräte (z. B. Disketten) aufteilen wollen, müssen Sie die Größe der Archiv-Teile (Volumes) angeben. Dies erfolgt durch den Schalter M. So speichert der folgende Befehl den Inhalt des Verzeichnis /home auf das Diskettengerät /dev/fd0 mit einer Größe von 1440 kB.
tar cfML /dev/fd0 1440 /home
Wenn Sie ein bestehendes Archiv nur auf den neuesten Stand bringen wollen, ohne alle Dateien erneut hineinzupacken, dann benutzen Sie den Schalter u.
tar uf archiv.tar .
Sie können Dateien auch an ein bestehendes Archiv anhängen.
tar rf archiv.tar neueDatei
Solche Archive können sehr groß werden, wenn Sie z. B. Logdateien speichern. Da es sich hierbei in den meisten Fällen um reine Textdateien handelt, können sehr gut gepackt werden. Mit der Option z wird tar angewiesen, das entstandene Archiv auch gleich mit gzip (Abschnitt 13.6.1) zu packen.
Um sich die Dateiliste des Archivs anzeigen zu lassen, kann man den folgenden Befehl verwenden.
tar tf archiv.tar
Nicht immer wollen Sie alle Dateien bzw. Unterverzeichnisse mit in das Archiv packen. Hier kommt die Option -exclude ins Spiel. Diese Option kann mehrfach vorkommen und gibt an, welche Dateien nicht mit ins Archiv sollen.
barclay@enterprise:~/test> tar cvf befehle.tar befehle/ befehle/ befehle/data befehle/befehle befehle/befehle.bck befehle/data.bck befehle/data.old barclay@enterprise:~/test> tar cvf befehle.tar --exclude data.old befehle/ befehle/ befehle/data befehle/befehle befehle/befehle.bck befehle/data.bck barclay@enterprise:~/test> tar cvf befehle.tar --exclude data.old --exclude "*.bck" befehle/ befehle/ befehle/data befehle/befehle
Haben Sie ein paar Dateien mehr, die nicht mit ins Archiv dürfen, dann können Sie die Namen auch in eine Datei schreiben und diese mit dem Schalter -X als Informationsquelle verwenden.
barclay@enterprise:~/test> cat noarchiv data.old *.bck barclay@enterprise:~/test> tar cvf befehle.tar -X noarchiv befehle/ befehle/ befehle/data befehle/befehle
tar xvf archiv.tar
Vor dem Entpacken, sollten Sie feststellen welche Verzeichnispfad gespeichert wurden. Dies können Sie mit dem Befehl
tar tvf archiv.tarfeststellen. Die Option v erzeugt eine ausführlichere Anzeige als t alleine.
Schauen wir uns doch mal folgendes Beispiel an:
Aus dem Wurzelverzeichnis haben Sie die Daten im Verzeichnis /home mit folgendem Befehl gespeichert.
tar cf home.tar home/*
Daher wurde das Verzeichnis home in jedem Pfad mit eingefügt. Sind Sie allerdings ins Verzeichnis /home gewechselt und haben den Befehl als
tar cf home.tar .ausgeführt, so ist das Verzeichnis home nicht mehr Bestandteil des Dateipfads.
Bei einem Backup sollten Sie die Dateien immer in dem gleichen Verzeichnis extrahieren in dem Sie auch das Archiv erzeugt hatten.
Um einzelne Dateien aus einem Archiv zu entpacken, können Sie zum einen den interaktiven Modus (Option w) von tar wählen. Bei dem folgenden Befehl werden Sie bei jeder Datei gefragt, ob Sie die Datei entpacken wollen.
tar xvwf archiv.tar
Allerdings hat diese Methode einen schwerwiegenden Nachteil. Auf diesem Wege eine Datei aus einem 10.000 Dateien-Archiv zu entpacken ist doch etwas mühselig. Hier bietet sich einfach an, die gewünschte Datei einfach anzugeben.
tar xf archiv.tar meineDatei.txt
Sie können auch den umgekehrten Weg nehmen und die Dateien angeben, die nicht extrahiert werden sollen. Dies geht analog zum Erstellen des Archivs.
tar xvf archiv.tar --exclude "*.bck"
Neben den schon fertig kompilierten Binärdateien erhalten Sie in der Open Source Gemeinde auch den Quellcode um ihr Programm selbst kompilieren und installieren zu können. Dabei wird der Quellcode nicht nur alleine vertrieben, sondern meist zusammen mit Konfigurationsdateien für die Installation und Dokumentationen zum Programm. Diese Dateien befinden sich meistens in einer Verzeichnisstruktur.
Solche Strukturen werden am besten in einem tar-Archiv gesichert. Damit das entstandene Archiv auch schnell heruntergeladen werden kann, wird es komprimiert. Dabei kommt meistens das Programm gzip (13.6.1) zum Einsatz. Aber auch bzip2 (13.6.2) wird gerne verwendet, während das veraltete compress kaum mehr zum Einsatz kommt.
barclay@enterprise:~> tar cf superduper_2.1.tar superduper/2.1/ barclay@enterprise:~> gzip superduper_2.1.tar
Es ist dann eine Datei mit der Endung tar.gz entstanden. Ein solches komprimiertes Archiv wird als Tarball bezeichnet.
Beim Auspacken geht man den umgekehrten Weg. Erst entpacken und dann die Dateien aus dem Archiv extrahieren.
tapico@defiant:~> gunzip superduper_2.1.tar.gz tapico@defiant:~> tar xf superduper_2.1.tar
Nun ist das Verzeichnis /superduper/2.1 entstanden, daß alle Dateien enthält. Heute können Sie das Entpacken und Extrahieren in einem Schritt durchführen. Der Schalter z beim Befehl tar berücksichtigt die GZIP-Kompression. Für die Kompression mit bzip2 muß der Schalter j verwendet werden und bei compress der Schalter Z.
tapico@defiant:~> tar zxf superduper_2.1.tar.gz tapico@defiant:~> tar Zxf turbogeil_3.2.tar.Z tapico@defiant:~> tar jxf megastark_0.7.tar.bz2
Denken Sie bitte daran, daß Sie beim Erstellen des Archivs die passenden Endungen für die Kompression selbst anhängen müssen.
barclay@enterprise:~> tar zcf superduper_2.1.tar.gz superduper/2.1/ barclay@enterprise:~> tar Zcf turbogeil_3.2.tar.Z turbogeil/3.2/ barclay@enterprise:~> tar jcf megastark_0.7.tar.bz2 megastark/0.7/
Für die Endung .tar.gz kann auch .tgz verwendet werden.
cpio [OPTIONEN]
Wie auch bei tar gibt es auch hier Schalter und Optionen.
| Schalter | |
| -o | Legt ein neues Archiv an |
| -i | Extrahiert Dateien aus einem Archiv |
| -p | Kopiert komplette Verzeichnisstrukturen |
| Optionen | |
| -a | Setzt die Zugriffszeit der Dateien nach dem Kopieren zurück. |
| -d | Erzeugt Verzeichnisse, wenn Sie benötigt werden (-i und -p) |
| -E DATEI | Name einer Datei mit zusätzlichen Mustern für die zu entpackenden Dateien |
| -F ARCHIV | Name des Archivs, was entpackt werden soll (-i) |
| -m | Erhält die Änderungszeit der Dateien (-i) |
| -r | Fragt nach einem neuen Namen für die Datei vorm Kopieren, wird kein Namen angegeben, wird die Datei nicht kopiert. |
| -t | Zeigt mit -i die Dateiliste des Archivs an |
| -u | Überschreibt existierende Dateien |
| -v | Zeigt die Dateinamen bei der Bearbeitung an |
Im Gegensatz zu tar arbeitet cpio nicht direkt mit den Dateien sondern übernimmt nur die Aufgabe der Archivierung. Um alle Dateien und Verzeichnisse im Verzeichns /home zu sichern, müssen die Dateinamen mit find übergeben werden und die Ausgabe in eine Datei umgeleitet werden.
find /home | cpio -o > home.cpio
Um nun zu prüfen welche Dateien in dem Verzeichnis sind, können Sie folgenden Befehl benutzen.
cpio -itF home.cpio
Um das Archiv zu entpacken, benutzen Sie den Befehl
cpio -iF home.cpio
Eine einzelne Datei läßt sich genau wie bei tar aus einem Archiv extrahieren.
cpio -iF home.cpio meineDatei.txt
ole@enterprise:~> ls -i /bin/{gzip,gunzip,zcat}
926671 /bin/gunzip 926671 /bin/gzip 926671 /bin/zcat
gzip [OPTIONEN] [DATEI]
| Optionen | |
| -c | Zeigt den Inhalt an ohne die komprimierte Datei zu löschen; zusammen mit -d (content) |
| -d | Dekomprimiert die Datei (decompress) |
| -n | Speichert nicht die originalen Zeitstempel und Dateinamen(no name) |
| -N | Speichert die originalen Zeitstempel (Standard) (!(no name)) |
| -q | Unterdrückt Warnmeldungen (quiet) |
| -r | Verarbeitet auch die Dateien in Unterverzeichnissen (recursive) |
| -t | Test der Datenintegrität(test) |
| -v | Name und Kompressiongrad werden ausgegeben(verbose) |
| -ZAHL | Gibt den Kompressionsgrad mit ZAHL an; Wert zwischen 1 (niedrig) und 9 (hoch). |
tapico@defiant:~ > ls-l lk-0.3 insgesamt 428 -rw-r--r-- 1 tapico users 27494 Okt 17 21:32 lk-backup.tex -rw-r--r-- 1 tapico users 48607 Okt 17 21:32 lk-bootvorgang.tex -rw-r--r-- 1 tapico users 42321 Okt 17 21:32 lk-dateisystem.tex -rw-r--r-- 1 tapico users 40262 Okt 17 21:32 lk-grundbefehle.tex -rw-r--r-- 1 tapico users 25652 Okt 17 21:32 lk-hilfe.tex -rw-r--r-- 1 tapico users 13915 Okt 17 21:32 lk-installation.tex -rw-r--r-- 1 tapico users 13394 Okt 17 21:32 lk-listen.tex -rw-r--r-- 1 tapico users 30716 Okt 17 21:32 lk-shell.tex -rw-r--r-- 1 tapico users 39591 Okt 17 21:32 lk-textfilter.tex -rw-r--r-- 1 tapico users 3427 Okt 17 21:32 lk.tex tapico@defiant:~ > gzip -v lk-0.3/* lk-0.3/lk-backup.tex: 65.0% -- replaced with lk-0.3/lk-backup.tex.gz lk-0.3/lk-bootvorgang.tex: 64.8% -- replaced with lk-0.3/lk-bootvorgang.tex.gz lk-0.3/lk-dateisystem.tex: 65.2% -- replaced with lk-0.3/lk-dateisystem.tex.gz lk-0.3/lk-grundbefehle.tex: 67.1% -- replaced with lk-0.3/lk-grundbefehle.tex.gz lk-0.3/lk-hilfe.tex: 63.7% -- replaced with lk-0.3/lk-hilfe.tex.gz lk-0.3/lk-installation.tex: 59.6% -- replaced with lk-0.3/lk-installation.tex.gz lk-0.3/lk-listen.tex: 69.7% -- replaced with lk-0.3/lk-listen.tex.gz lk-0.3/lk-shell.tex: 65.7% -- replaced with lk-0.3/lk-shell.tex.gz lk-0.3/lk-textfilter.tex: 69.2% -- replaced with lk-0.3/lk-textfilter.tex.gz lk-0.3/lk.tex: 58.7% -- replaced with lk-0.3/lk.tex.gz tapico@defiant:~ > ls-l lk-0.3 insgesamt 164 -rw-r--r-- 1 tapico users 9642 Okt 17 21:32 lk-backup.tex.gz -rw-r--r-- 1 tapico users 17105 Okt 17 21:32 lk-bootvorgang.tex.gz -rw-r--r-- 1 tapico users 14729 Okt 17 21:32 lk-dateisystem.tex.gz -rw-r--r-- 1 tapico users 13261 Okt 17 21:32 lk-grundbefehle.tex.gz -rw-r--r-- 1 tapico users 9331 Okt 17 21:32 lk-hilfe.tex.gz -rw-r--r-- 1 tapico users 5648 Okt 17 21:32 lk-installation.tex.gz -rw-r--r-- 1 tapico users 4087 Okt 17 21:32 lk-listen.tex.gz -rw-r--r-- 1 tapico users 10556 Okt 17 21:32 lk-shell.tex.gz -rw-r--r-- 1 tapico users 12230 Okt 17 21:32 lk-textfilter.tex.gz -rw-r--r-- 1 tapico users 1438 Okt 17 21:32 lk.tex.gz tapico@defiant:~ >
Anstatt eine Datei zu erstellen kann in beiden Richtung (Komprimieren und Dekomprimieren) das Ergebnis auf die Standardausgabe umgeleitet werden. Dabei bleibt die Ursprungsdatei im Gegensatz zur normalen Vorgehensweise erhalten.
tapico@defiant:~ > gzip -c lk.tex > lk.tex.gz
gunzip [OPTIONEN] [DATEILISTE]
Dabei ist gunzip gar kein eigenständiges Programm, sondern nur ein anderer Dateiname für gzip.
ole@enterprise:~> ls -i /bin/{gzip,gunzip}
926671 /bin/gunzip 926671 /bin/gzip
Das Programm gzip kann erkennen, unter welchem Namen es aufgerufen wurde. Deshalb ist gunzip nichts anderes als gzip -d. Aus diesem Grund gelten auch die gleichen Optionen wie bei gzip. So ist auch der folgende Befehl, so unsinnig er auch sein mag, vollkommen korrekt und erledigt die vorgesehene Aufgabe.
ole@enterprise:~> gunzip -d buch.tex.gz
zcat [DATEILISTE]
Die gepackte Datei wird durch den Befehl nicht verändert. Auch hier ist gzip gemeint und es wird eigentlich der Befehl gzip -cd ausgeführt.
bzip2 [OPTIONEN] [DATEILISTE]
Obgleich sich bzip2 und gzip sehr ähnlich sind, sind sie nicht identisch.
| Optionen | |
| -c | Zeigt den Inhalt an ohne die komprimierte Datei zu löschen; zusammen mit -d (content) |
| -d | Dekomprimiert die Datei (decompress) |
| -f | Überschreibt vorhandene Dateien (force) |
| -n | Speichert nicht die originalen Zeitstempel und Dateinamen(no name) |
| -k | Quelldatei wird nicht gelöscht (keep) |
| -N | Speichert die originalen Zeitstempel (Standard) (!(no name)) |
| -q | Unterdrückt Warnmeldungen (quiet) |
| -t | Test der Datenintegrität(test) |
| -v | Name und Kompressiongrad werden ausgegeben(verbose) |
| -z | Komprimiert die Datei, Standardeinstellung |
| -ZAHL | Gibt den Kompressionsgrad mit ZAHL an; Wert zwischen 1 (niedrig) und 9 (hoch). |
Durch den besseren Algorithmus kann bzip2 deutlich besser komprimieren als gzip. Das Beispiel einer großen DVI-Datei (ASCII-Code) zeigt, daß die Kompressionsrate von bzip2 deutlich größer ist als die von gzip.
ole@enterprise:~/test> ls -l insgesamt 2584 -rw-r--r-- 1 ole users 1692688 2004-06-27 07:51 lk.dvi -rw-r--r-- 1 ole users 409181 2004-06-27 07:59 lk.dvi.bz2 -rw-r--r-- 1 ole users 528016 2004-06-27 07:59 lk.dvi.gz
Beim Komprimieren zerlegt bzip2 die Datei in einzelne Blöcke. Je größer die Blöcke sind, desto besser ist der Komprimierungsgrad. Einen direkten Einfluß auf die Größe der Blöcke können Sie mit den Optionen -1 bis -9 ausüben. Diese geben direkt die Größe des Blocks in 100.000 Bytes an. Defaulteinstellung ist -9. Die Verwendung von größeren Blocks hat keinen signifikanten Einfluß mehr auf die Komprimierungsrate. Je kleiner die zu komprimierende Datei ist, desto geringer ist auch der Einfluß der Komprimierungseinstellung.
Der Komprimierer bzip2 benutzt eine 32-Bit-CRC-Checksumme um die Datenintegrität des Archivs überprüfen zu können Die Überprüfung wird durch den Schalter -t aktiviert.
Für weitere Informationen, speziell zu den verwendeten Blockgrößen und Speichernutzung, konsultieren Sie die Manualpage bzip2(1).
Wie auch bei gzip besitzt bzip2 weitere Namen, die bestimmte Aktionen von bzip2 aufrufen. Das Tool bzip2recover ist dagegen ein eigenständiges Programm.
ole@enterprise:~> ls -lG /usr/bin/{bzip2,bunzip2,bzcat,bzip2recover}
lrwxrwxrwx 1 root 5 2004-04-03 09:17 /usr/bin/bunzip2 -> bzip2
lrwxrwxrwx 1 root 5 2004-04-03 09:17 /usr/bin/bzcat -> bzip2
-rwxr-xr-x 1 root 26464 2003-09-23 17:23 /usr/bin/bzip2
-rwxr-xr-x 1 root 8352 2003-09-23 17:23 /usr/bin/bzip2recover
bunzip2 [OPTIONEN] [DATEILISTE]
Beim Dekomprimieren werden die Endungen wie folgt umgewandelt. Bei den Endungen .bz2 und bz werden die Endungen vom Dateinamen entfernt. Die Endungen .tbz2 und .tbz weisen auf komprimierte Tar-Archive hin und werden in .tar umgewandelt. Handelt es sich um keine der genannten Endungen, dann wird an die entkomprimierte Datei die Endung .out angehängt.
Auch dieser Name zeigt auf das Tool bzip2. Unter diesem Namen aufgerufen, aktiviert es die Schalter -cd zum dekomprimieren und gleichzeitiger Ausgabe auf der Standardausgabe.
bzcat [OPTIONEN] [DATEILISTE]
bzip2recover DATEI
Aus der beschädigten Datei erstellt das Tool für jeden Block eine Datei mit dem Namen rec00001file.bz2, rec00002file.bz2, usw. Die einzelnen Dateien können nun mit bzip2 -t auf ihre Integrität überprüft und dann einzeln entpackt werden. Das Verfahren ist natürlich nur sinnvoll bei großen Dateien, die viele Blöcke enthalten. Dateien, die nur aus einem Block bestehen, können nicht wiederhergestellt werden. Wenn Sie die Sicherheit der komprimierten Dateien erhöhen wollen, sollten Sie bei der Komprimierung eine kleine Blockgröße einstellen.
ole@enterprise:~/test> bunzip2 lk.dvi.bz2
bunzip2: Data integrity error when decompressing.
Input file = lk.dvi.bz2, output file = lk.dvi
It is possible that the compressed file(s) have become corrupted.
You can use the -tvv option to test integrity of such files.
You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.
bunzip2: Deleting output file lk.dvi, if it exists.
ole@enterprise:~/test> bunzip2 -tvv lk.dvi.bz2
lk.dvi.bz2:
[1: huff+mtf rt+rld]
[2: huff+mtf rt+rld]
...
[11: huff+mtf rt+rld]
[12: huff+mtf data integrity (CRC) error in data
You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.
ole@enterprise:~/test> bzip2recover lk.dvi.bz2
bzip2recover 1.0.2: extracts blocks from damaged .bz2 files.
bzip2recover: searching for block boundaries ...
block 1 runs from 80 to 47833
block 2 runs from 47882 to 85493
...
block 17 runs from 3647046 to 3864608
block 18 runs from 3864657 to 3864696 (incomplete)
bzip2recover: splitting into blocks
writing block 1 to `rec00001lk.dvi.bz2' ...
writing block 2 to `rec00002lk.dvi.bz2' ...
...
writing block 16 to `rec00016lk.dvi.bz2' ...
writing block 17 to `rec00017lk.dvi.bz2' ...
bzip2recover: finished
ole@enterprise:~/test> ls
lk.dvi.bz2 rec00005lk.dvi.bz2 rec00010lk.dvi.bz2 rec00015lk.dvi.bz2
rec00001lk.dvi.bz2 rec00006lk.dvi.bz2 rec00011lk.dvi.bz2 rec00016lk.dvi.bz2
rec00002lk.dvi.bz2 rec00007lk.dvi.bz2 rec00012lk.dvi.bz2 rec00017lk.dvi.bz2
rec00003lk.dvi.bz2 rec00008lk.dvi.bz2 rec00013lk.dvi.bz2
rec00004lk.dvi.bz2 rec00009lk.dvi.bz2 rec00014lk.dvi.bz2
ole@enterprise:~/test> bzip2 -t rec*
bzip2: rec00012lk.dvi.bz2: data integrity (CRC) error in data
You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.
ole@enterprise:~/test> rm rec00012lk.dvi.bz2
ole@enterprise:~/test> bunzip2 -c rec*.bz2 > lk.dvi
compress [DATEILISTE]
Da die Kompressionsraten von compress allerdings schlechter sind, als die der heutigen Tools, wird es kaum noch verwendet. Es gehört auch seit germaumer Zeit nicht mehr zum Standardumfang der SuSE-Distribution.
uncompress [DATEILISTE]
Notizen:
Administrative Aufgaben
Stellen Sie sicher, daß Sie auf keiner Konsole eingeloggt sind und auch keine Terminalemulationen auf der graphischen Oberfläche laufen. Führen Sie diese Aufgaben nur auf der Textkonsole aus und nicht in den Terminalemulationen des X-Window-Systems.
Notizen:
Das hängt vor allem davon ab, wie das Programm vorliegt: Als ein Archiv mit dem Quellcode, als ein Archiv mit den Binärdateien mit eigenem Installationsprogramm oder als Binärdateien in Installationsarchiven vom Typ Debian oder RPM.
Die Installation auf diese Art und Weise ist komplizierter, da sie individuell vom Programmierer vorgegeben wird. Es hat sich aber eine bestimmte Vorgehensweise eingebürgert, nach der doch die meisten Programmierer vorgehen. Auf jeden Fall sollten Sie die Dateien INSTALL und README mit den Anweisungen des Programmierers lesen, bevor Sie mit der Installation beginnen.
barclay@enterprise:~> gzip -d quellcode.tar.gz barclay@enterprise:~> tar xvf quellcode.tar
barclay@enterprise:~> gunzip quellcode.tar.gz barclay@enterprise:~> tar xvf quellcode.tar
barclay@enterprise:~> gzip -cd quellcode.tar.gz | tar xv
barclay@enterprise:~> tar zxvf quellcode.tar.gz
Als Erstes erstellen Sie die C-Datei start.c, die die Methode main() enthält.
In der Methode main() wird die Methode printHallo() aufgerufen. Diese ist weder eine Methode aus den Standard-C-Bibliotheken noch in der gleichen Datei vorhanden. Sie ist nämlich in der Datei hallo.c definiert worden.
1: #include <stdio.h>
2:
3: void printHallo() {
4: printf("Hallo Fibelleser!\nEs hat geklappt\n");
5: }
6:
Die beiden Quellcode-Dateien müssen nun zuerst kompiliert werden. Dazu verwenden Sie den C-Kompiler gcc. Der Schalter -c bewirkt, daß die angegebene Datei zu einer Objekt-Datei kompiliert wird. Dann werden die beiden Objektdateien durch gcc mit dem Schalter -o zu der Programmdatei gruss zusammengelinkt. Dann noch schnell die Rechte für das neue Programm geändert und fertig ist der Gruß.
barclay@enterprise:~/cprog> gcc -c start.c barclay@enterprise:~/cprog> gcc -c hallo.c barclay@enterprise:~/cprog> gcc -o gruss start.o hallo.o barclay@enterprise:~/cprog> chmod 755 gruss barclay@enterprise:~/cprog> gruss Hallo Fibelleser! Es hat geklappt barclay@enterprise:~/cprog>
make erledigt das, in dem in einer Konfigurationsdatei Ziele und Abhängigkeiten definiert werden. Das Ziel einer solchen Datei ist die Kompilierung eines Programms. Dieses Programm hängt ab von den Objekt-Dateien, die wiederum abhängen von den jeweiligen Quellcode-Dateien. Der Vorteil bei der Verwendung von make ist unter anderem, daß die Änderungszeit von bereits bestehenden Objektdateien mit den jeweiligen Quellcode-Dateien verglichen werden. Normalerweise sind die Objektdateien immer jünger als die Quellcode-Dateien. In diesem Fall werden die Quellcode-Dateien nicht noch einmal kompiliert. Ist die Quellcode-Datei aber jünger als die Objektdatei, so wurde sie wahrscheinlich seit dem letzten Kompiliervorgang verändert und wird deshalb bei diesem Lauf erneut kompiliert. Dadurch sparen Sie enorm viel Zeit, da bei kleinen Änderungen keine komplette Neukompilierung notwendig ist.
Am Beispiel des Programms aus Abschnitt 14.1.2 möchte ich Ihnen den Aufbau einer solchen Make-Datei zeigen.
Das Ziel