Unix-Linux, Eine Einführung von Wolfgang Paulina (de)
Unix-Linux, Eine Einführung von Wolfgang Paulina (de)
Unix-Linux, Eine Einführung von Wolfgang Paulina (de)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Unix</strong> - <strong>Linux</strong><br />
<strong>Eine</strong> <strong>Einführung</strong> <strong>von</strong> <strong>Wolfgang</strong> Pulina<br />
Universität Regensburg<br />
Rechenzentrum<br />
Oktober 2002
Vorwort zur dritten Auflage<br />
Seit 12 Jahren halte ich am Rechenzentrum <strong>de</strong>r Universität Regensburg <strong>de</strong>n Kurs <strong>Einführung</strong> in <strong>Unix</strong>, und<br />
seit 12 Jahren wird dieser Kurs immer wie<strong>de</strong>r <strong>von</strong> vielen Teilnehmern besucht. Dieses große Interesse<br />
ist umso erstaunlicher, als dass ein Betriebssystem wie <strong>Unix</strong> in <strong>de</strong>r gesamten EDV-Landschaft eine eher<br />
periphere Rolle zu spielen scheint. Doch bei genauerer Betrachtung wird man feststellen, dass <strong>Unix</strong> nach<br />
wie vor einen zentralen Platz unter <strong>de</strong>n Betriebssystemen einnimmt, vor allem dann, wenn es darum geht,<br />
hochverfügbare, skalierbare Leistungen zur Verfügung zu stellen. Es gibt aber noch einen weiteren Grund<br />
für das große Interesse an <strong>Unix</strong>-Betriebssystemen und dieser Grund heisst <strong>Linux</strong>. Aus <strong>de</strong>r Spielwiese für<br />
Programmierer und Informatiker ist mittlerweile ein ernstzunehmen<strong>de</strong>s System gewor<strong>de</strong>n, das sogar auf<br />
vielen Schreibtischen <strong>de</strong>r Privatwirtschaft seinen Platz gefun<strong>de</strong>n hat. Auch im häuslichen Bereich wird<br />
zunehmend <strong>Linux</strong> eingesetzt, wobei es hier hauptsächlich darum geht, die Alternativen zu einem an<strong>de</strong>ren<br />
marktbeherrschen<strong>de</strong>n Betriebssystem auszuloten.<br />
Diese Entwicklung hat mich dazu veranlasst, mein kursbegleiten<strong>de</strong>s Skript zu überarbeiten. Gemeinsamkeiten<br />
und Unterschie<strong>de</strong> zwischen <strong>Unix</strong> und <strong>Linux</strong> wur<strong>de</strong>n <strong>de</strong>utlicher herausgestellt und mit entsprechen<strong>de</strong>n<br />
Beispielen dokumentiert. <strong>Eine</strong> Sammlung ausgewählter Web-Links wur<strong>de</strong> hinzugefügt, und wird in <strong>de</strong>r<br />
online-Version <strong>de</strong>s Kurs-Skriptes ständig erweitert.<br />
Ein einwöchiger Kurs kann natürlich unmöglich das gesamte Potential <strong>von</strong> <strong>Unix</strong>/<strong>Linux</strong> ergrün<strong>de</strong>n. Der<br />
Kurs soll vielmehr als Anregung betrachtet wer<strong>de</strong>n, sich intensiver mit <strong>de</strong>m Betriebssystem und seinen<br />
Anwendungen auseinan<strong>de</strong>rzusetzen. Ich freue mich, falls mir dies mit vorliegen<strong>de</strong>r Publikation gelingen<br />
sollte, bin aber auch offen für alle Anregungen, die mir dabei helfen, etwas besser zu machen.<br />
Zum Schluss möchte ich mich bei allen bedanken, die in Diskussionen und Gesprächen wertvolle I<strong>de</strong>en zum<br />
Wer<strong>de</strong>n dieses Kurs-Skriptes beigetragen haben: Dr. Christoph Bauer, Rudolf Holzer und Dr. Fritz Wünsch<br />
- Vielen Dank.<br />
<strong>Wolfgang</strong> Pulina - 30. September 2002
Inhaltsverzeichnis<br />
1. Einleitung 1<br />
1.1. Typographische Konventionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />
1.2. Die Entwicklung <strong>von</strong> <strong>Unix</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />
1.3. Charakterisierung <strong>von</strong> <strong>Unix</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
2. Erste Schritte 5<br />
2.1. Zugang zu einem <strong>Unix</strong>-Rechner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2.1.1. Login über das Datennetz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2.1.2. Dateitransfer über das Datennetz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.1.3. <strong>Unix</strong>-Desktop über die PC-Xserver-Emulation . . . . . . . . . . . . . . . . . . . . 12<br />
2.2. Passwörter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.3. Benutzeroberflächen und Benutzerumgebung . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2.4. <strong>Unix</strong>-Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
2.5. Spezialzeichen und reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
3. Kommandos und Prozesse 23<br />
3.1. Der Login-Prozess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
3.2. Kommandoeingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
3.3. Prozesskontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />
4. Das Dateisystem 31<br />
4.1. Dateiarten und Dateinamen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
4.2. Kommandos mit Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
4.3. Kommandos mit Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />
4.4. Dateischutz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
4.5. Drucken <strong>von</strong> Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />
5. Editoren 41<br />
5.1. Der vi - Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />
5.2. Der emacs - Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
5.3. Sonstige Editoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
6. Die csh/tcsh - Shell 48<br />
6.1. Kommandowie<strong>de</strong>rholung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />
6.2. Vervollständigung <strong>von</strong> Kommandos, Variablen und Dateinamen . . . . . . . . . . . . . . . 49<br />
6.3. alias - Mechanismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
6.4. Ein- und Ausgabeumlenkung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />
6.5. Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
6.5.1. Lokale Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
6.5.2. Globale Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.6. Shell-Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />
6.6.1. Die if - Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />
6.6.2. Die foreach - Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />
6.6.3. Die while - Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />
6.6.4. Die shift - Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />
6.6.5. Fallunterscheidung mit switch und case . . . . . . . . . . . . . . . . . . . . . . . . 59<br />
6.6.6. Die break- und continue-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />
6.6.7. Die goto-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
6.6.8. Allerlei Nützliches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
7. Textmusterverarbeitung mit awk 63<br />
7.1. Aufruf und Programmstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />
7.2. Die Sprachelemente <strong>von</strong> awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />
7.3. Bedingungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
7.4. Aktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
7.4.1. Ausgabeanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
7.4.2. Kontrollanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
7.5. Sonstiges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />
A. Ausgewählte Web-Links 71
1. Einleitung<br />
1.1. Typographische Konventionen<br />
In dieser Publikation wer<strong>de</strong>n häufig Kommandos, Dateiinhalte, Kommunikationsdialoge und Programm-<br />
Strukturen wi<strong>de</strong>rgegeben, die für ein leichteres Verständnis <strong>de</strong>r behan<strong>de</strong>lten Themen dienen sollen. Die<br />
”Interaktion mit <strong>de</strong>m <strong>Unix</strong>-System” soll daher auch aus <strong>de</strong>m Schriftbild logisch erkennbar sein. Folgen<strong>de</strong><br />
typographische Konventionen sind in diesem Zusammenhang gültig.<br />
ls -al<br />
cp file_old file_new<br />
head [-n] [filename ...]<br />
/etc/hosts<br />
f<br />
rechner><br />
Dieser Text kann wörtlich übernommen wer<strong>de</strong>n.<br />
Meist han<strong>de</strong>lt es sich dabei um Kommandos.<br />
Bei diesem Text kann nur das cp wörtlich übernommen<br />
wer<strong>de</strong>n. Die bei<strong>de</strong>n in Schrägschrift gesetzten<br />
Begriffe sind nur Platzhalter für konkrete Werte.<br />
Alle in eckigen Klammern stehen<strong>de</strong>n Angaben sind<br />
optional.<br />
Dateinamen wer<strong>de</strong>n immer in Courier dargestellt.<br />
Control-Tastensequenz: die Control-Taste wird gedrückt<br />
gehalten und gleichzeitig die Taste f betätigt.<br />
Bei <strong>de</strong>utschen Tastaturen entspricht die -<br />
Taste <strong>de</strong>r -Taste.<br />
Rechner-Prompt; dahinter stehen die Kommandos,<br />
die am Bildschirm eingegeben wer<strong>de</strong>n können.<br />
Dateiinhalte und Bildschirmausgaben wer<strong>de</strong>n in einfachem Courier wi<strong>de</strong>rgegeben. Als Beispiel soll das<br />
Kommando ls -l /etc/motd dienen.<br />
ls -l /etc/motd<br />
-rw-r--r-- 1 root sys 54 Jan 9 2000 /etc/motd<br />
Im laufen<strong>de</strong>n Text wer<strong>de</strong>n Hervorhebungen entwe<strong>de</strong>r in italic o<strong>de</strong>r in bold dargestellt. Nach Kommando-<br />
Eingaben ist immer die Betätigung <strong>de</strong>r - bzw. <strong>de</strong>r -Taste erfor<strong>de</strong>rlich. In <strong>de</strong>n<br />
Kommando-Beispielen wird dies nicht explizit dokumentiert.
1. Einleitung 2<br />
1.2. Die Entwicklung <strong>von</strong> <strong>Unix</strong><br />
Das Betriebssystem <strong>Unix</strong> hat bereits eine über 30-jährige Entwicklungsgeschichte hinter sich. Die Entwicklung<br />
begann in einer Zeit, in <strong>de</strong>r Computer noch sehr groß und teuer waren. Üblicherweise wur<strong>de</strong> auf diesen<br />
Großrechnern im sog. Stapelbetrieb gearbeitet. Das sah gewöhnlich so aus, dass ein Stapel Lochkarten in<br />
<strong>de</strong>n Rechner eingelesen wur<strong>de</strong>, <strong>de</strong>r Rechner dann die Bearbeitung vornahm und das Ergebnis auf einen<br />
Drucker ausgab. Falls das Ergebnis nicht <strong>de</strong>n Wünschen entsprach, mussten die fehlerhaften Lochkarten<br />
ersetzt wer<strong>de</strong>n und <strong>de</strong>r ganze Zyklus begann <strong>von</strong> neuem. Der Wunsch vieler Programmierer nach einer Arbeitsumgebung,<br />
die <strong>de</strong>n interaktiven Dialog in einem Mehrbenutzerbetrieb und das Teamwork unterstützt,<br />
mün<strong>de</strong>te in <strong>de</strong>r Entwicklung eines neuen Betriebssystems: <strong>Unix</strong>.<br />
Ken Thompson entwickelte 1969 bei <strong>de</strong>n Bell Laboratories das erste <strong>Unix</strong> auf einer PDP-7, einem Rechner<br />
<strong>de</strong>r Firma Digital Equipment. Dieses erste <strong>Unix</strong> war noch vollständig in Assembler geschrieben. Erst<br />
mit <strong>de</strong>r Entwicklung <strong>de</strong>r Programmiersprache C <strong>von</strong> Dennis Ritchie wur<strong>de</strong> das Betriebssystem 1971 in C<br />
umgeschrieben.<br />
Die Verbreitung <strong>de</strong>s Systems erfolgte zunächst im aka<strong>de</strong>mischen Umfeld, in<strong>de</strong>m es kostenlos an Universitäten<br />
und wissenschaftliche Institute verteilt wur<strong>de</strong>. Vielfach wur<strong>de</strong> das System an verschie<strong>de</strong>nen Stellen<br />
weiterentwickelt, so dass im Laufe <strong>de</strong>r Zeit unterschiedliche <strong>Unix</strong>-Derivate entstan<strong>de</strong>n (PWB/UNIX, IS/1,<br />
XENIX). Seit 1982 wer<strong>de</strong>n <strong>Unix</strong>-Betriebssysteme <strong>von</strong> kommerziellen Systemanbietern wie z.B. IBM, HP<br />
und Sun vertrieben.<br />
Da die Entwicklung verschie<strong>de</strong>ner <strong>Unix</strong>-Systeme zu immer mehr Inkompatibilitäten führte, entschloss man<br />
sich, Anfang <strong>de</strong>r 90er Jahre durch die Definition <strong>von</strong> Standards die konsequente Weiterentwicklung zu<br />
einem konvergenten Basissystem voranzutreiben. <strong>Eine</strong> wichtige Rolle spielten dabei Standardisierungsorganisationen<br />
wie IEEE und X/Open. Das Institute of Electrical and Electronic Engineers, kurz IEEE, ist<br />
eine <strong>de</strong>r vielen industriellen Organisationen, die vom American National Standards Institute (ANSI) mit <strong>de</strong>r<br />
Definition und Spezifizierung <strong>von</strong> Standards beauftragt wor<strong>de</strong>n sind. Das als POSIX-Ausschuss bekannte<br />
Gremium <strong>de</strong>r IEEE besitzt die Aufgabe, <strong>de</strong>n Schnittstellenstandard für alle Aspekte <strong>de</strong>r Betriebsumgebung<br />
festzulegen.<br />
Ziel <strong>von</strong> X/Open ist es, eine Grundlage für die Entwicklung einer gemeinsamen Anwendungsumgebung zu<br />
schaffen. So hat X/Open beispielsweise POSIX als Basisbetriebssystem-Schnittstelle unterstützt und das X<br />
Window System <strong>de</strong>s MIT (Massachusetts Institute of Technology) als Benutzerschnittstelle übernommen.<br />
Die Arbeit <strong>de</strong>r Organisation ist in Form <strong>von</strong> Referenzdokumenten mit <strong>de</strong>r Bezeichnung X/Open Portability<br />
Gui<strong>de</strong> o<strong>de</strong>r XPG erhältlich, die als Leitfa<strong>de</strong>n für Portierbarkeit dienen sollen.<br />
1991 schlug schließlich die Geburtsstun<strong>de</strong> <strong>von</strong> <strong>Linux</strong>. Der Finne Linus Thorvalds entwickelte einen Betriebssystemkern,<br />
um vor allem die Leistung <strong>de</strong>r damals aktuellen Intel 80386-Prozessoren ausnutzen zu<br />
können. Dabei bediente er sich freier Software, die im Rahmen <strong>de</strong>s GNU-Projekts zur Verfügung gestellt<br />
wur<strong>de</strong> (GNU C-Compiler). Von Anfang an wur<strong>de</strong> darauf Wert gelegt, dass auch <strong>Linux</strong> <strong>de</strong>n POSIX- und<br />
X11-Standards entspricht. Das beson<strong>de</strong>re an <strong>Linux</strong> ist die Tatsache, dass die Entwicklung nicht in <strong>de</strong>n<br />
Hän<strong>de</strong>n einer Firma liegt, son<strong>de</strong>rn aufgeteilt ist auf Software-Entwickler, die verteilt über die ganze Welt<br />
arbeiten und über das Internet miteinan<strong>de</strong>r kommunizieren.<br />
Zusammenfassend kann festgestellt wer<strong>de</strong>n, dass alle existieren<strong>de</strong>n <strong>Unix</strong>- und <strong>Linux</strong>-Betriebssysteme im<br />
wesentlichen die <strong>von</strong> <strong>de</strong>n oben beschriebenen Gremien <strong>de</strong>finierten Standards (POSIX, X11) implementieren.<br />
Als kleinste gemeinsame Betriebssystembasis wird <strong>von</strong> nahezu allen <strong>Unix</strong>- und <strong>Linux</strong>-Varianten<br />
System V Release 4 unterstützt. Dies garantiert eine hohe Äquivalenz <strong>de</strong>r Systeme untereinan<strong>de</strong>r.
1. Einleitung 3<br />
1.3. Charakterisierung <strong>von</strong> <strong>Unix</strong><br />
<strong>Eine</strong> Charakterisierung <strong>von</strong> Betriebssystemen kann aus unterschiedlichen Perspektiven erfolgen. Da wäre<br />
zum einen die Unterscheidung <strong>von</strong> Real-Time- und Time-Sharing-Systemen, zum an<strong>de</strong>ren die Aufteilung in<br />
Client- und Server-Systeme. Ferner können Kriterien wie Portierbarkeit und Skalierbarkeit zur Differenzierung<br />
herangezogen wer<strong>de</strong>n.<br />
Abgesehen <strong>von</strong> <strong>de</strong>n unterschiedlichen<br />
Funktionstypen besitzt ein <strong>Unix</strong>-System<br />
eine grundlegen<strong>de</strong> Struktur, die durch<br />
nebenstehen<strong>de</strong> Abbildung ver<strong>de</strong>utlicht<br />
Applications<br />
wird. Die Basis <strong>de</strong>s Betriebssystems bil<strong>de</strong>t<br />
<strong>de</strong>r Kernel, <strong>de</strong>r Betriebssystemkern,<br />
Shell<br />
<strong>de</strong>r für die Ansteuerung <strong>de</strong>r Hardware<br />
verantwortlich ist. Die Hauptaufgaben<br />
Kernel<br />
<strong>de</strong>s Kernels sind die Prozessverwal-<br />
tung die Hauptspeicherverwaltung, die<br />
Ein/Ausgabeverwaltung und die Dateiverwaltung.<br />
Die Leistungsfähigkeit eines<br />
<strong>Unix</strong>-System hängt maßgeblich <strong>von</strong><br />
<strong>de</strong>r Qualität <strong>de</strong>r Implementierung dieser<br />
Basisfunktionen ab. Als nächste Schicht<br />
im Strukturmo<strong>de</strong>ll folgen systemnahe<br />
Programme wie die Shell und sog. Utilities.<br />
Die Shell ist für die kommandoorientierte<br />
Interaktion zwischen Benutzer<br />
cc<br />
Hardware<br />
Utilities<br />
und System verantwortlich, während<br />
die Utilities eine Sammlung nützlicher<br />
Abbildung 1.1.: Struktur <strong>de</strong>s Betriebssystems<br />
Programme darstellen (das Kommando<br />
ls ist eine <strong>de</strong>rartige Utility). Den Abschluss bil<strong>de</strong>n die Applications, also die eigentlichen Anwendungs-<br />
Programme. Der Compiler cc gehört ebenso zu <strong>de</strong>n Anwendungen wie z.B. das Office-Paket StarOffice.<br />
Für eine kurze Charakterisierung <strong>von</strong> <strong>Unix</strong> sollen folgen<strong>de</strong> Aspekte herangezogen wer<strong>de</strong>n.<br />
<strong>Unix</strong> ist ein Dialogsystem<br />
Dies ist zwar in <strong>de</strong>r heutigen Zeit nichts beson<strong>de</strong>res, bei <strong>de</strong>r Entstehung <strong>von</strong> <strong>Unix</strong> waren aber immer<br />
noch die batch-orientierten Systeme in <strong>de</strong>r Mehrzahl.<br />
<strong>Unix</strong> ist primär ein Multi-User/Multi-Tasking-Betriebssystem<br />
Multi-User be<strong>de</strong>utet, dass an einem <strong>Unix</strong>-System gleichzeitig mehrere Benutzer arbeiten können.<br />
Multi-Tasking heißt, dass je<strong>de</strong>r Benutzer auch mehrere Programme quasi gleichzeitig ablaufen lassen<br />
kann. Nebenbei sei bemerkt, dass es heute noch an<strong>de</strong>re Betriebssysteme gibt, die diese Funktionalitäten<br />
entwe<strong>de</strong>r überhaupt nicht o<strong>de</strong>r nur sehr eingeschränkt besitzen.<br />
<strong>Unix</strong> unterstützt das virtuelle Speicherkonzept<br />
Das be<strong>de</strong>utet, dass im Prinzip ein großes Programm auf relativ klein dimensionierter Hardware laufen<br />
kann. Erreicht wird dies durch die sog. virtuelle Speicheradressierung. Erst zur Laufzeit <strong>de</strong>s<br />
Programms wer<strong>de</strong>n die virtuellen Adressen in physikalische Adressen umgesetzt.
1. Einleitung 4<br />
<strong>Unix</strong> unterstützt das Pipe-Konzept<br />
Dabei können die Ausgabedaten eines Prozesses unmittelbar als Eingabedaten einem an<strong>de</strong>ren Prozess<br />
übergeben wer<strong>de</strong>n.<br />
<strong>Unix</strong> verfügt über eine hierarchische Dateiverwaltung<br />
Wie auch bei an<strong>de</strong>ren Betriebssystemen ist die Dateistruktur baumartig aufgebaut.<br />
<strong>Unix</strong> besitzt leistungsfähige Shells als Benutzerschnittstelle<br />
Die kommandoorientierte Interaktion mit <strong>de</strong>m System wird über Shells abgewickelt. Diese Shells<br />
bieten vielfältige Möglichkeiten für die Programmierung und Automatisierung <strong>von</strong> Vorgängen.<br />
<strong>Unix</strong> ist fast vollständig in C programmiert<br />
Die Sprache C kombiniert die Effizienz einer Assemblersprache mit <strong>de</strong>n Steuerstrukturen mo<strong>de</strong>rner<br />
Sprachkonzepte. Heute sind mehr als 95 % in C geschrieben.<br />
<strong>Unix</strong> ist einfach in Datennetze zu integrieren<br />
Alle Funktionen für die Integration in Datennetze sind bereits vorhan<strong>de</strong>n.<br />
<strong>Unix</strong> ermöglicht eine hohe Skalierbarkeit<br />
Das Betriebssystem kann Rechner unterstützen, die einen, zwei, aber auch 128 Prozessoren besitzen<br />
können. Die Leistungsfähigkeit steigt dabei fast linear. Ferner können durch die Vernetzung <strong>von</strong><br />
Rechner-Knoten in Kombination mit geeigneter Software noch weitere Leistungsreserven mobilisiert<br />
wer<strong>de</strong>n (<strong>Linux</strong>-Cluster-Computing).<br />
<strong>Unix</strong>-Rechner wer<strong>de</strong>n in <strong>de</strong>n verschie<strong>de</strong>nsten Bereichen eingesetzt: als Computeserver, Datenbankserver,<br />
Mailserver, Bootserver und natürlich als Web-Server, aber auch als Firewall-Systeme und für das Netzwerk-<br />
Management. Als Desktop-Systeme fin<strong>de</strong>n <strong>Unix</strong>-Rechner vor allem im technischen Computing als CAD-<br />
Arbeitsplätze Verwendung. Auch die Filmindustrie hat die Leistungsfähigkeit <strong>von</strong> <strong>Unix</strong> erkannt. So entstan<strong>de</strong>n<br />
Animationsfilme wie ”Das große Krabbeln”, ”Toy Story” o<strong>de</strong>r ”Spirit” vollständig auf <strong>Unix</strong>-Rechnern.<br />
Im Film ”Titanic” wur<strong>de</strong>n einige Sequenzen auf <strong>Linux</strong>-Rechnern gerechnet.<br />
<strong>Unix</strong> erfüllt in höchstem Maße die Ansprüche an Zuverlässigkeit und Skalierbarkeit, so dass es aus <strong>de</strong>m<br />
Bereich <strong>de</strong>r Mission-Critical-Anwendungen nicht mehr wegzu<strong>de</strong>nken ist. Im Desktop-Bereich hat sich<br />
in <strong>de</strong>n letzten Jahren vor allem <strong>Linux</strong> als ernsthafte Alternative zu einem an<strong>de</strong>ren, marktbeherrschen<strong>de</strong>n<br />
System etabliert.
2. Erste Schritte<br />
2.1. Zugang zu einem <strong>Unix</strong>-Rechner<br />
Der Zugang zu einem <strong>Unix</strong>-/<strong>Linux</strong>-System ist generell mit einer Autorisierung <strong>de</strong>s Benutzers verbun<strong>de</strong>n.<br />
Der Benutzer mel<strong>de</strong>t sich mit einem Account- bzw. Benutzernamen an und muss anschließend<br />
ein Passwort eingeben. Ein Einloggen auf einem <strong>Unix</strong>-/<strong>Linux</strong>-System kann direkt am Rechner selbst o<strong>de</strong>r<br />
aber über das Datennetz erfolgen.<br />
Abbildung 2.1.: Login an einer Sun-Workstation<br />
Das Login an <strong>de</strong>r Console eines <strong>Unix</strong>-/<strong>Linux</strong>-Rechners erfolgt in <strong>de</strong>r Regel über einen graphischen Login-<br />
Bildschirm. Obige Abbildung zeigt einen Login-Bildschirm auf einer Sun-Workstation. Über die Options<br />
können Login-Beson<strong>de</strong>rheiten wie alternative Benutzeroberflächen und das Command Line Login eingestellt<br />
wer<strong>de</strong>n. Mit <strong>de</strong>m Command Line Login kann ein Einloggen ohne Benutzeroberfläche erfolgen. Auf einer<br />
<strong>Linux</strong>-Console wird meist <strong>de</strong>r kdm-Login-Manager für die Eingabe <strong>von</strong> Benutzername und Passwort eingesetzt.<br />
Auch hier lassen sich bereits beim Login alternative Benutzeroberflächen anwählen (k<strong>de</strong>, gnome).<br />
Neben <strong>de</strong>m direkten Login an <strong>de</strong>r Console eines <strong>Unix</strong>-/<strong>Linux</strong>-Rechners gibt es noch verschie<strong>de</strong>ne Möglichkeiten,<br />
einen <strong>Unix</strong>-Rechner über das Datennetz zu nutzen. Dabei wird unterschie<strong>de</strong>n zwischen reinen<br />
Terminal-Verbindungen, Verbindungen zum Austausch <strong>von</strong> Dateien und Verbindungen, die die Nutzung <strong>von</strong><br />
graphischen <strong>Unix</strong>-Anwendungen zulassen.<br />
2.1.1. Login über das Datennetz<br />
Ausgangspunkt für das Login über das Datennetz ist ein lokaler Rechner, auf <strong>de</strong>m <strong>Unix</strong>/<strong>Linux</strong> o<strong>de</strong>r MS-<br />
Windows installiert ist. Die Konfiguration <strong>de</strong>s Rechners muss eine fehlerfreie Netz-Kommunikation erlauben<br />
(IP-Adresse, Netzmaske, usw.).
2. Erste Schritte 6<br />
Lokaler Rechner ist ein <strong>Unix</strong>/<strong>Linux</strong>-System<br />
Die Programme slogin und ssh bieten die <strong>de</strong>rzeit bevorzugte Metho<strong>de</strong>, sich <strong>von</strong> einem lokalen in einen<br />
entfernten <strong>Unix</strong>-Rechner einzuloggen. Dabei läuft die gesamte Datenkommunikation dieser sog. secure<br />
shell zwischen <strong>de</strong>n Rechnern verschlüsselt ab. Der entfernte Rechner (remote host) kann <strong>de</strong>n Zugang<br />
erlauben, verbieten o<strong>de</strong>r differenziert regeln. Beim erstmaligen Login wird im lokalen Home-Verzeichnis<br />
<strong>de</strong>r sog. public key <strong>de</strong>s remote host abgespeichert. Dies erfolgt im Rahmen eines interaktiven Dialogs.<br />
rechner> slogin hostname<br />
rechner> slogin ip-address<br />
rechner> ssh hostname<br />
rechner> ssh ip-address<br />
Remote Login mittels Rechnernamen<br />
Remote Login mittels IP-Adresse<br />
Remote Login mittels Rechnernamen<br />
Remote Login mittels IP-Adresse<br />
Abbildung 2.2.: Remote Login mittels secure shell<br />
In obigem Beispiel loggt sich ein Benutzer namens teu19147 mittels slogin <strong>von</strong> <strong>de</strong>m lokalen Rechner<br />
rciplx2 in <strong>de</strong>n Rechner rss6 ein. Da das secure-shell-Login zu diesem Rechner zum erstem Mal erfolgt,<br />
muss <strong>de</strong>r public key <strong>de</strong>s Rechners rss6 im lokalen Home-Verzeichnis <strong>de</strong>s Benutzers abgespeichert wer<strong>de</strong>n<br />
(in <strong>de</strong>r Datei .ssh/known_hosts). Diese Speicherung wird aber erst dann vorgenommen, wenn <strong>de</strong>r<br />
Benutzer auf die Frage<br />
Are you sure you want to continue connecting (yes/no)?<br />
mit yes antwortet. Dabei ist wichtig, dass die Antwort yes ausgeschrieben wird! Die Eingabe <strong>von</strong> y genügt<br />
nicht. Das System speichert daraufhin <strong>de</strong>n public key <strong>de</strong>s remote host in <strong>de</strong>r Datei .ssh/known_hosts<br />
und for<strong>de</strong>rt <strong>de</strong>n Benutzer auf, sein Passwort einzugeben. Beim wie<strong>de</strong>rholten Login in <strong>de</strong>n Rechner rss6<br />
ist eine Abspeicherung <strong>de</strong>s public keys nicht mehr notwendig. Nach <strong>de</strong>m slogin-Kommando wird sofort<br />
die Eingabe <strong>de</strong>s Passworts verlangt.<br />
Im allgemeinen än<strong>de</strong>rn sich die public keys <strong>de</strong>r entfernten Rechner nicht. Falls dies aufgrund einer Neuinstallation<br />
o<strong>de</strong>r nach Datenverlust doch einmal passiert, ist es notwendig, <strong>de</strong>n public key <strong>de</strong>s entsprechen<strong>de</strong>n<br />
Rechners aus <strong>de</strong>r Datei .ssh/known_hosts zu entfernen. Bei erneuter Verbindungsaufnahme wird dann<br />
<strong>de</strong>r neue public key abgespeichert.
2. Erste Schritte 7<br />
Die Kommandos slogin und ssh lassen sich völlig i<strong>de</strong>ntisch handhaben (slogin ist einfach ein symbolischer<br />
Link auf das Programm ssh). Bei<strong>de</strong> Kommandos besitzen die gleichen Optionen. Die folgen<strong>de</strong>n<br />
Beispiele wer<strong>de</strong>n daher nur mit <strong>de</strong>m Kommando ssh wi<strong>de</strong>rgegeben.<br />
rechner> ssh -l teu19147 rss6<br />
rechner> ssh teu19147@rss6<br />
rechner> ssh rss6 finger<br />
Remote Login zum Rechner rss6 als Benutzer<br />
teu19147<br />
Remote Login zum Rechner rss6 als Benutzer<br />
teu19147<br />
Remote Login mit anschließen<strong>de</strong>r Ausführung<br />
<strong>de</strong>s finger-Kommandos<br />
rechner> ssh rss6.rz.uni-regensburg.<strong>de</strong><br />
Remote Login mit full-qualified Internet-Name<br />
Letztes Beispiel zeigt, wie für die Adressierung eines Rechners <strong>de</strong>r full-qualified Hostname verwen<strong>de</strong>t wird.<br />
Dies ist immer dann erfor<strong>de</strong>rlich, wenn auf Rechner zugegriffen wird, die nicht im lokalen Nameserver<br />
verzeichnet sind.<br />
Ein Login <strong>von</strong> <strong>Unix</strong>- zu <strong>Unix</strong>-System ist auch mit Programmen wie telnet, rlogin und rsh möglich.<br />
Sie stehen in <strong>de</strong>r Regel auf allen <strong>Unix</strong>/<strong>Linux</strong>-Systemen zur Verfügung. Voraussetzung für ein erfolgreiches<br />
Login ist allerdings, dass <strong>de</strong>r Zielrechner diese Art <strong>de</strong>r Verbindung zulässt.<br />
rechner> telnet hostname<br />
rechner> telnet rss6<br />
rechner> telnet ip-address<br />
rechner> telnet 132.199.38.92<br />
rechner> rlogin hostname<br />
rechner> rlogin rss6<br />
rechner> rsh hostname<br />
rechner> rsh rss6<br />
Remote Login mittels Rechnernamen<br />
Remote Login zum Rechner rss6<br />
Remote Login mittels IP-Adresse<br />
Remote Login zum Rechner rss6<br />
Remote Login mittels Rechnernamen<br />
Remote Login zum Rechner rss6<br />
Remote Login mittels Rechnernamen<br />
Remote Login zum Rechner rss6<br />
Bei <strong>de</strong>r Eingabe <strong>de</strong>s Rechnernamens ist darauf zu achten, dass bei externen Rechnern, also Rechnern, die<br />
sich nicht im Intranet befin<strong>de</strong>n, <strong>de</strong>r full-qualified Internet-Name eingegeben wer<strong>de</strong>n muss. Die Kommandos<br />
rlogin und rsh ermöglichen ferner mit <strong>de</strong>r Option -l das Remote-Login unter einem an<strong>de</strong>ren Benutzernamen.<br />
rechner> rlogin rss6.rz.uni-regensburg.<strong>de</strong><br />
Remote Login mit full-qualified Internet-Name<br />
rechner> rlogin -l rar12345 rss6<br />
Remote Login zum Rechner rss6 als Benutzer rar12345<br />
rechner> rsh -l rar12345 rss6<br />
Remote Login zum Rechner rss6 als Benutzer rar12345<br />
Wie beim Login an <strong>de</strong>r Rechner-Console, wird die Eingabe <strong>de</strong>s korrekten Passworts verlangt. Die Abfrage<br />
nach <strong>de</strong>m Passwort kann bei <strong>de</strong>n Programmen rlogin und rsh unterdrückt wer<strong>de</strong>n, in<strong>de</strong>m auf<br />
<strong>de</strong>m Zielrechner im Home-Verzeichnis eine Datei namens .rhosts erstellt wird, die <strong>de</strong>n Namen <strong>de</strong>s Herkunftsrechners<br />
enthält. Das Login mittels telnet, rlogin und rsh ist allerdings mit einer erheblichen
2. Erste Schritte 8<br />
Sicherheitsproblematik behaftet. Diese drei Programme führen <strong>von</strong> sich aus keine Verschlüsselung <strong>de</strong>r zu<br />
transferieren<strong>de</strong>n Daten durch. Je<strong>de</strong>s Zeichen, das an <strong>de</strong>r Tastatur eingegeben wird, wird im Klartext über<br />
das Datennetz gesen<strong>de</strong>t. So ist es für einen böswilligen Benutzer relativ leicht, mit sog. ”Schnüffelprogrammen”<br />
Passwörter auszuspionieren. Seit einiger Zeit gibt es zwar die Möglichkeit, die Verschlüsselung auf<br />
Protokollebene (TCP, UDP) zu aktivieren (IPsec), allerdings bleibt dies aufgrund <strong>de</strong>s Aufwands meist auf<br />
kleine Netze beschränkt. An <strong>de</strong>r Uni Regensburg wer<strong>de</strong>n diese unsicheren Programme nicht verwen<strong>de</strong>t.<br />
Lokaler Rechner ist ein MS-Windows-System<br />
Voraussetzung für ein remote Login <strong>von</strong> MS-Windows zu einem <strong>Unix</strong>-/<strong>Linux</strong>-Rechner ist eine Terminalemulation,<br />
die auf <strong>de</strong>m MS-Windows-System installiert sein muss. Um auch eine sichere Kommunikation<br />
zu gewährleisten, sollte die Terminalemulation die Datenverschlüsselung unterstützen (ssh1- bzw. ssh2-<br />
Protokoll <strong>de</strong>r secure shell). An <strong>de</strong>r Universität Regensburg steht für diesen Zweck die SSH Secure Shell<br />
3.0 zur Verfügung. Diese Software muss auf <strong>de</strong>m PC installiert sein. Ein sicheres Login <strong>von</strong> einem MS-<br />
Windows-Rechner zu einem <strong>Unix</strong>-/<strong>Linux</strong>-Rechner wird im folgen<strong>de</strong>n geschil<strong>de</strong>rt.<br />
Als erstes erfolgt ein Login am PC mit <strong>de</strong>m NDS-Passwort.<br />
Nach<strong>de</strong>m MS-Windows hochgefahren ist, wird in einem MS-DOS-Eingabefenster das Kommando ssh2<br />
eingegeben. Es erscheint dann folgen<strong>de</strong>s Fenster. In diesem Fenster wird nun unter <strong>de</strong>m Menü-Punkt File<br />
<strong>de</strong>r Unterpunkt Connect angewählt.<br />
Abbildung 2.3.: ssh-Login <strong>von</strong> MS-Windows<br />
Abbildung 2.4.: Eingabe <strong>von</strong> Rechner und Benutzer<br />
Im nun erscheinen<strong>de</strong>n Fenster muss nun<br />
<strong>de</strong>r Rechner (Host Name) und <strong>de</strong>r User<br />
Name eingegeben wer<strong>de</strong>n. Als Host Name<br />
kann z.B. rss6 o<strong>de</strong>r je<strong>de</strong>r bliebige Name<br />
eines öffentlichen <strong>Unix</strong>- bzw. <strong>Linux</strong>-<br />
Rechners angegeben wer<strong>de</strong>n.
2. Erste Schritte 9<br />
Falls <strong>de</strong>r Hostkey <strong>de</strong>s Login-Rechners<br />
noch nicht bekannt ist, erscheint nun folgen<strong>de</strong>s<br />
Bild. Das Abspeichern <strong>de</strong>s public<br />
Hostkeys erfolgt nur beim ersten Verbindungsaufbau.<br />
Bei allen künftigen Logins<br />
auf diesen Rechner unterbleibt diese Abfrage.<br />
Abbildung 2.5.: Speichern <strong>de</strong>s public hostkeys<br />
Als nächste Interaktion muss das <strong>Unix</strong>-<br />
Passwort eingegeben wer<strong>de</strong>n.<br />
Abbildung 2.6.: Eingabe <strong>de</strong>s <strong>Unix</strong>-Passworts<br />
Nun kann auf <strong>de</strong>m <strong>Unix</strong>-System interaktiv gearbeitet wer<strong>de</strong>n. Mit <strong>de</strong>m Kommando exit erfolgt ein Logout.<br />
Soll die Verbindung zum <strong>Unix</strong>-System been<strong>de</strong>t wer<strong>de</strong>n, so erfolgt dies über die Menü-Punkte File und<br />
Disconnect.<br />
Abbildung 2.7.: Been<strong>de</strong>n <strong>de</strong>r ssh-Verbindung<br />
Neben <strong>de</strong>m interaktiven Login besitzt dieses Programm noch eine Funktion zum Dateitransfer, die im nächsten<br />
Abschnitt beschrieben wird.
2. Erste Schritte 10<br />
2.1.2. Dateitransfer über das Datennetz<br />
Die Übertragung <strong>von</strong> Dateien zwischen <strong>Unix</strong>-/<strong>Linux</strong>-Rechnern sowie zwischen <strong>Unix</strong>-/<strong>Linux</strong>-Rechnern und<br />
MS-Windows-Rechnern setzt wie beim Login eine Autorisierung <strong>de</strong>s Benutzers voraus. Die Funktionalität<br />
ist aber ganz speziell auf <strong>de</strong>n Transfer <strong>von</strong> Dateien ausgerichtet. Auf bei<strong>de</strong>n Rechnern müssen die<br />
entsprechen<strong>de</strong>n Programme installiert und aktiviert sein.<br />
Dateitransfer zwischen <strong>Unix</strong>/<strong>Linux</strong>-Rechnern<br />
Die Übertragung <strong>von</strong> Dateien (files) zwischen <strong>Unix</strong>-Rechnern wird meist mit Programmen wie scp und<br />
sftp durchgeführt. Das s im Namen weist darauf hin, dass es sich hier um eine sichere Art <strong>de</strong>r Datenübertragung<br />
han<strong>de</strong>lt. Alle Daten wer<strong>de</strong>n verschlüsselt transferiert. Das Programm ftp, das auf je<strong>de</strong>m<br />
<strong>Unix</strong>-System vorhan<strong>de</strong>n ist, kann zwar auch verwen<strong>de</strong>t wer<strong>de</strong>n, allerdings mit <strong>de</strong>m gleichen Sicherheitsrisiko<br />
wie bei <strong>de</strong>n Programmen telnet und rlogin. Passwörter und Daten wer<strong>de</strong>n bei ftp unverschlüsselt<br />
übertragen.<br />
rechner> scp file rechner:<br />
sicheres Kopieren einer Datei zu einem an<strong>de</strong>ren Rechner<br />
rechner> scp file rechner:subdir<br />
sicheres Kopieren einer Datei zu einem an<strong>de</strong>ren Rechner in ein untergeordnetes<br />
Verzeichnis<br />
rechner> scp file username@rechner:<br />
sicheres Kopieren einer Datei in das Home-Directory eines an<strong>de</strong>ren Benutzers<br />
auf einem an<strong>de</strong>ren Rechner<br />
rechner> scp -r directory rechner:<br />
sicheres, rekursives Kopieren eines kompletten Verzeichnisses zu einem an<strong>de</strong>ren<br />
Rechner<br />
Wie bei <strong>de</strong>n Kommandos ssh und slogin wird bei einem erstmaligen Verbindungsaufbau die Abspeicherung<br />
<strong>de</strong>s public hostkeys vorgenommen.<br />
Abbildung 2.8.: Sicheres Kopieren über das Datennetz mittels scp<br />
In obigem Beispiel wird vom Rechner rciplx8 eine Datei namens user51.ps zum Rechner rss6 in<br />
das dort lokal vorhan<strong>de</strong>ne Verzeichnis /tmp kopiert. Ein kleines Histogramm veranschaulicht <strong>de</strong>n Fortschritt<br />
<strong>de</strong>r Kopieraktion.
2. Erste Schritte 11<br />
Der Dateitransfer mittels sftp funktioniert genauso wie mit <strong>de</strong>m älteren ftp, nur mit <strong>de</strong>m Unterschied,<br />
dass die Daten verschlüsselt übertragen wer<strong>de</strong>n.<br />
Abbildung 2.9.: Sicherer Datentransfer mittels sftp<br />
Im vorliegen<strong>de</strong>n Beispiel wird eine Datei namens sz.sdw vom Rechner solaris zum Rechner rss6<br />
übertragen. Nach <strong>de</strong>m sftp-Login wird <strong>de</strong>r Transfer mit <strong>de</strong>m Kommando put sz.sdw angestoßen.<br />
Das Kommando exit been<strong>de</strong>t das Programm.<br />
sftp> help<br />
sftp> get filename<br />
sftp> put filename<br />
sftp> mkdir directory<br />
gibt Informationen zu sftp aus<br />
Datei vom remote Rechner holen<br />
Datei zum remote Rechner schicken<br />
neues Verzeichnis auf remote Rechner anlegen<br />
Weitere Informationen zu sftp können mit <strong>de</strong>m Kommando man sftp aus <strong>de</strong>n online manual pages<br />
abgerufen wer<strong>de</strong>n.<br />
Dateitransfer zwischen <strong>Unix</strong>/<strong>Linux</strong>- und MS-Windows-Rechnern<br />
Mit <strong>de</strong>m an <strong>de</strong>r Uni Regensburg vorhan<strong>de</strong>nen Programm ssh2 können <strong>von</strong> MS-Windows-Rechnern auch<br />
Dateiübertragungen <strong>von</strong> und zu <strong>Unix</strong>-Rechnern vorgenommen wer<strong>de</strong>n. Dabei wird im Secure-Shell-Fenster<br />
<strong>de</strong>r Menü-Punkt Window und dort <strong>de</strong>r Unterpunkt New File Transfer angewählt.<br />
Abbildung 2.10.: Sicherer Datentransfer mittels ssh2 unter MS-Windows
2. Erste Schritte 12<br />
Im neu erscheinen<strong>de</strong>n Fenster wird nun die gewünschte Operation gewählt. Upload überträgt Dateien vom<br />
Windows-PC zum <strong>Unix</strong>-Rechner, Download überträgt Dateien vom <strong>Unix</strong>-Rechner zum Windows-PC.<br />
Abbildung 2.11.: Sicherer Datentransfer mittels ssh2 unter MS-Windows: upload<br />
Im Upload-Fenster wer<strong>de</strong>n die Dateien markiert, die übertragen wer<strong>de</strong>n sollen. Anschließend wird auf<br />
Upload geklickt.<br />
Beim Übertragen <strong>von</strong> Dateien zwischen einem <strong>Unix</strong>-Rechner und einem MS-Windows-Rechner sollten die<br />
entsprechen<strong>de</strong>n Dateinamen-Konventionen beachtet wer<strong>de</strong>n. So können in einem Eingabefenster <strong>von</strong> MS-<br />
Windows nur Dateinamen beschränkter Länge abgebil<strong>de</strong>t wer<strong>de</strong>n. Auch auf die Groß- und Kleinschreibung<br />
muss Rücksicht genommen wer<strong>de</strong>n.<br />
<strong>Unix</strong>-/<strong>Linux</strong>-Systeme unterschei<strong>de</strong>n grundsätzlich zwischen Groß- und Kleinschreibung!<br />
Beson<strong>de</strong>rs bei Dateitransfers <strong>von</strong> <strong>Unix</strong> zu MS-Windows ist dies relevant. Hierzu ein Beispiel: Auf <strong>Unix</strong><br />
liegen zwei Dateien namens brief.txt und Brief.txt vor, die mittels secure ftp nach MS-Windows<br />
übertragen wer<strong>de</strong>n sollen. Für das <strong>Unix</strong>-System sind dies zwei verschie<strong>de</strong>ne Dateien. Wer<strong>de</strong>n die bei<strong>de</strong>n<br />
Dateien hintereinan<strong>de</strong>r übertragen, so wird beim zweiten Transfer <strong>de</strong>r Inhalt <strong>de</strong>r ersten Datei einfach<br />
überschrieben. MS-Windows kennt bzgl. <strong>de</strong>r Dateinamen keine Unterscheidung zwischen Groß- und Kleinschrift.<br />
Es gibt noch eine weitere Möglichkeit, <strong>von</strong> MS-Windows auf Dateien <strong>von</strong> <strong>Unix</strong>-Systemen zuzugreifen.<br />
Ermöglicht wird dies durch einen sog. samba-connect zwischen MS-Windows-Client und einem samba-<br />
Server, <strong>de</strong>r üblicherweise auf einem <strong>Unix</strong>-Fileserver installiert ist. Über <strong>de</strong>n Windows-Explorer kann damit<br />
ein <strong>Unix</strong>-Verzeichnis quasi als MS-Windows-Laufwerk zur Verfügung gestellt wer<strong>de</strong>n. Die Vorgehensweise<br />
wird in einem Web-Link erläutert.<br />
2.1.3. <strong>Unix</strong>-Desktop über die PC-Xserver-Emulation<br />
Auf MS-Windows-PCs kann ein Xserver-Programm aktiviert wer<strong>de</strong>n, das <strong>de</strong>n kompletten <strong>Unix</strong>-Desktop auf<br />
<strong>de</strong>m PC darstellen kann. Diese sog. X-Win32-Software ist auf allen öffentlichen MS-Windows-Rechnern<br />
installiert. Alle notwendigen Schritte für die Nutzung <strong>de</strong>s PCs als graphische <strong>Unix</strong>-Console wer<strong>de</strong>n in einem<br />
Web-Link erläutert.
2. Erste Schritte 13<br />
2.2. Passwörter<br />
Benutzer-Accounts auf <strong>Unix</strong>-Rechner sind grundsätzlich passwortgeschützt. Passwörter dürfen nicht an<br />
an<strong>de</strong>re Personen weitergegeben wer<strong>de</strong>n. Ausser<strong>de</strong>m ist darauf zu achten, dass das Passwort in bestimmten<br />
Zeitabstän<strong>de</strong>n geän<strong>de</strong>rt wird.<br />
Bei <strong>de</strong>r Wahl eines Passworts muss wie bei <strong>de</strong>n Dateinamen auf Groß- und Kleinschreibung geachtet wer<strong>de</strong>n.<br />
Das Passwort sollte nicht weniger als 6 Zeichen besitzen. <strong>Eine</strong> Kombination <strong>von</strong> Buchstaben, Ziffern<br />
und Son<strong>de</strong>rzeichen ist empfehlenswert. Die Zeichen @, $, # und ! können, aber sollten nicht unbedingt<br />
verwen<strong>de</strong>t wer<strong>de</strong>n. Ferner sollte auf nicht sichtbare Zeichen verzichtet wer<strong>de</strong>n.<br />
Das Än<strong>de</strong>rn eines <strong>Unix</strong>-Passworts erfolgt in <strong>de</strong>r Regel mit <strong>de</strong>m Kommando passwd. Diese Möglichkeit<br />
<strong>de</strong>r Passwortän<strong>de</strong>rung beschränkt sich allerdings auf Einzelplatz- o<strong>de</strong>r Standalone-Systeme. Oft wer<strong>de</strong>n<br />
mehrere Rechner zu einer Verwaltungseinheit, einer sog. Domain, zusammengefasst. Die meisten<br />
<strong>Unix</strong>/<strong>Linux</strong>-Rechner an <strong>de</strong>r Universität Regensburg sind in solch einer Domain integriert. Die Verwaltung<br />
<strong>de</strong>r Benutzer-Accounts und damit auch <strong>de</strong>r Passwörter wird daher über einen Namensdienst abgewickelt.<br />
Die unter <strong>Unix</strong> bekanntesten Namensdienste sind NIS, NIS+ und LDAP. Das Kommando zum Än<strong>de</strong>rn <strong>de</strong>s<br />
Passwortes hängt vom installierten Namensdienst ab.<br />
An <strong>de</strong>r Uni Regensburg wird auf allen <strong>Unix</strong>/<strong>Linux</strong>-Rechnern <strong>de</strong>r campusweiten <strong>Unix</strong>-Domäne das Kommando<br />
nispasswd zum Än<strong>de</strong>rn <strong>de</strong>s Passworts verwen<strong>de</strong>t. Als Namensdienst wird also NIS+ eingesetzt.<br />
rechner> nispasswd<br />
Old password: oldpassword<br />
New password: newpassword<br />
Verification: newpassword<br />
Nach einer kurzen Zeit ist das neue Passwort auf allen Rechnern <strong>de</strong>r Domäne gültig. Obiger Hinweis<br />
ist sehr wichtig. Nach einer Passwortän<strong>de</strong>rung wird diese Modifikation auf alle vorhan<strong>de</strong>nen NIS+Server<br />
repliziert. Dieser Replikations-Vorgang benötigt natürlich eine gewisse Zeit, und diese Zeit sollte erst verstreichen,<br />
bevor <strong>de</strong>r Benutzer sich erneut in einen <strong>Unix</strong>-Rechner einloggt. Wird dies nicht beachtet, kann es<br />
dazu kommen, dass <strong>de</strong>r Benutzer sich nicht mehr einloggen kann. <strong>Eine</strong> 5-minütige Wartezeit sollte daher<br />
eingehalten wer<strong>de</strong>n.<br />
Der Namensdienst NIS+ besitzt umfangreiche Möglichkeiten, <strong>de</strong>n Zugriff auf sog. NIS+Objekte zu regeln.<br />
Das be<strong>de</strong>utet, dass eine korrekte Autorisierung gegenüber NIS+ nur durch die explizite Angabe <strong>de</strong>s<br />
Passworts beim Login erreicht wird. Wird ein Login mittels public-key-Verfahren initiiert, so ist danach<br />
<strong>de</strong>r Benutzer zwar im <strong>Unix</strong>-System eingeloggt, im NIS+Namensdienst ist er aber nicht ordnungsgemäß angemel<strong>de</strong>t<br />
(session-key fehlt). Als Konsequenz kann <strong>de</strong>r Benutzer in dieser Situation sein Passwort nicht<br />
än<strong>de</strong>rn. <strong>Eine</strong> nachträgliche Autorisierung gegenüber NIS+ erfolgt mit <strong>de</strong>m Kommando keylogin. Dabei<br />
muss nochmals das Login-Passwort eingegeben wer<strong>de</strong>n.<br />
Neben <strong>de</strong>m <strong>Unix</strong>-Passwort kann ein Benutzer noch über weitere Passwörter verfügen. So erfor<strong>de</strong>rt <strong>de</strong>r oben<br />
geschil<strong>de</strong>rte samba-connect das einmalige Setzen <strong>de</strong>s sog. Samba-Passworts. Auch beim Login in einen<br />
MS-Windows-Rechner wird ein an<strong>de</strong>res Passwort verwen<strong>de</strong>t, das sog. NDS-Passwort. Bei <strong>de</strong>r Än<strong>de</strong>rung<br />
eines dieser drei Passwörter wer<strong>de</strong>n nicht gleichzeitig die an<strong>de</strong>ren Passwörter geän<strong>de</strong>rt.
2. Erste Schritte 14<br />
2.3. Benutzeroberflächen und Benutzerumgebung<br />
Graphische Benutzeroberflächen dienen dazu, die Interaktion zwischen Benutzer und Rechner möglichst<br />
einfach zu gestalten. Alle Aktionen sollen leicht intuitiv erfasst wer<strong>de</strong>n können. Grundsätzlich kann je<strong>de</strong>s<br />
<strong>Unix</strong>/<strong>Linux</strong>-System auch ohne graphische Benutzeroberfläche betrieben wer<strong>de</strong>n. Auf Server-Systemen wird<br />
sogar bewusst darauf verzichtet, da dies nur unnütz Plattenplatz und Rechenzeit kosten wür<strong>de</strong>.<br />
Alle graphischen Benutzeroberflächen unter <strong>Unix</strong>/<strong>Linux</strong> basieren auf <strong>de</strong>m system- und netzwerk-unabhängigen<br />
X Window System.<br />
Der Ursprung <strong>de</strong>s X Window Systems liegt in zwei Projekten <strong>de</strong>r frühen 80er Jahre: ein Window-Projekt<br />
<strong>de</strong>r Standford Universität, bekannt als W und ein Projekt Athena <strong>de</strong>s Massachusetts Institute of Technology<br />
(MIT). 1983 gegrün<strong>de</strong>t und <strong>von</strong> MIT, Digital und IBM finanziert, hatte das Projekt Athena u.a. die Zielsetzung,<br />
ein netzwerkunabhängiges Graphikprotokoll innerhalb <strong>de</strong>r bunt gemischten Rechnerumgebung <strong>de</strong>r<br />
Universität zu entwickeln. Die MIT-Gruppe nahm W in ihr Entwicklungssystem auf und gab ihm <strong>de</strong>n zufälligen<br />
Namen X Window System. 1986 bot MIT die erste kommerzielle Version <strong>de</strong>s X Window Systems<br />
(X10) an und bil<strong>de</strong>te 1987 eine breitere Industriepartnerschaft, das X Konsortium, um eine kontinuierliche<br />
Entwicklung zu gewährleisten. Konsortiumsgründungsmitglie<strong>de</strong>r waren u.a. Tektronix, IBM, Sun, HP und<br />
AT&T.<br />
Das X Window System ist ein Softwarestandard, <strong>de</strong>r einen Rahmen für fensterbetriebene Anwendungen<br />
über das Netzwerk bietet. Es han<strong>de</strong>lt als eine Art Mittelsmann zwischen einer Anwendung und einem<br />
Darstellungssystem (X Terminal, Workstation, PC). Bei einer Benutzeroberfläche, die auf <strong>de</strong>m X Window<br />
System basiert, spielen grundsätzlich drei Komponenten zusammen: X-Server, X-Client und Windowmanager.<br />
Der X-Server läuft als eigener Prozess auf <strong>de</strong>m Darstellungssystem und verarbeitet <strong>de</strong>n Input <strong>von</strong> Devices<br />
wie Tastatur und Maus. Auch <strong>de</strong>r Input vom X-Client wird für die Darstellung verwen<strong>de</strong>t.<br />
Der X-Client ist die eigentliche Anwendung (z.B. xclock, xterm, xmaple) und kommuniziert mit <strong>de</strong>m X-<br />
Server über das standardisierte X11-Protokoll.<br />
Der Windowmanager ist verantwortlich für Fensterrahmen, Verschieben, Vergrößern und Verkleinern und<br />
Iconisiern <strong>von</strong> Fenstern. Je nach verwen<strong>de</strong>tem Windowmanager sieht das Layout auf <strong>de</strong>m Desktop etwas<br />
unterschiedlich aus. Das sog. ”Look and Feel” wird also vom Windowmanager bestimmt. Bekannte Windowmanager<br />
sind z.B. twm, mwm (Motif Window Manager), fvwm und dtwm (<strong>de</strong>r Windowmanager unter<br />
CDE). Bei <strong>Linux</strong>-Systemen sind außer<strong>de</strong>m die Windowmanager kwin unter KDE und icewm-gnome unter<br />
Gnome weit verbreitet.<br />
Durch die Aufteilung <strong>de</strong>r bei<strong>de</strong>n Funktionen Anwendung und Darstellung ist es möglich, X-Client und<br />
X-Server auf unterschiedlichen Rechnern ablaufen zu lassen. So kann <strong>de</strong>r X-Client z.B. auf einer Sun<br />
Workstation laufen, als Darstellungssystem wird aber ein PC mit X-Server- Software verwen<strong>de</strong>t. Dadurch<br />
kann die gleiche Benutzeroberfläche, die man unmittelbar an <strong>de</strong>r Workstation zur Verfügung hat, auch auf<br />
<strong>de</strong>m PC verwen<strong>de</strong>t wer<strong>de</strong>n.<br />
Für die individuelle Gestaltung <strong>de</strong>s Desktops kommen grundsätzlich zwei Möglichkeiten in Frage: Das<br />
interaktive Verän<strong>de</strong>rn <strong>de</strong>s Layouts mit anschließen<strong>de</strong>m Abspeichern und das Modifizieren <strong>von</strong> speziellen<br />
Dateien. Je nach<strong>de</strong>m, welcher Windowmanager eingestellt ist, muss entwe<strong>de</strong>r nach <strong>de</strong>r ersten o<strong>de</strong>r <strong>de</strong>r<br />
zweiten Metho<strong>de</strong> vorgegangen wer<strong>de</strong>n.<br />
Erfolgte das Login unter CDE, KDE o<strong>de</strong>r Gnome, so können mittels kleiner Hilfsprogramme (StyleManager,<br />
ControlCenter) vielfältige Modifikationen <strong>de</strong>s Desktops interaktiv vorgenommen wer<strong>de</strong>n (Hintergrundfarbe,<br />
Fensterrahmen, Mausverhalten usw.). Beim Ausloggen wird dann das aktuell vorhan<strong>de</strong>ne Desktop-<br />
Layout automatisch abgespeichert.
2. Erste Schritte 15<br />
Etwas schwieriger stellt sich die Modifikation <strong>de</strong>s Layouts unter <strong>de</strong>n Windowmanagern twm und fvwm dar.<br />
Für eine individuelle Gestaltung müssen hier diverse Dateien editiert wer<strong>de</strong>n. Im einzelnen han<strong>de</strong>lt es sich<br />
um die Dateien .xinitrc, .twmrc bzw. .fvwmrc und .X<strong>de</strong>faults bzw. .Xresources. Um zu<br />
erreichen, dass das Programm xterm (Terminalemulation) immer mit bestimmten gewünschten Einstellungen<br />
gestartet wird, können z.B. folgen<strong>de</strong> Definitionen in die Dateien .X<strong>de</strong>faults und .Xresources<br />
eingetragen wer<strong>de</strong>n.<br />
XTerm.VT100.Background: gray90<br />
XTerm.VT100.Foreground: black<br />
XTerm.VT100.font: 8x13<br />
XTerm*saveLines: 200<br />
Die erste Zeile legt die Hintergrundfarbe (Background) <strong>de</strong>r Terminalemulation auf einen bestimmten<br />
Grau-Ton fest (gray90). Die zweite Zeile <strong>de</strong>finiert die Vor<strong>de</strong>rgrundfarbe, also die Schrift (black). In <strong>de</strong>r<br />
dritten Zeile steht die Größe <strong>de</strong>s verwen<strong>de</strong>ten Fonts und die vierte Zeile legt fest, wieviel Zeilen (200) <strong>de</strong>r<br />
Text im Fenster zurückgescrollt wer<strong>de</strong>n kann. Derartige Modifikationen erfor<strong>de</strong>rn eine gewisse Erfahrung<br />
im Umgang mit <strong>de</strong>m X Window System. Gute Hilfen bieten hier die entsprechen<strong>de</strong>n Dokumentationen und<br />
die online manual-pages.<br />
Im folgen<strong>de</strong>n wird eine kurze Übersicht über die drei am häufigsten verwen<strong>de</strong>ten Desktop-Systeme KDE,<br />
Gnome und CDE gegeben.<br />
KDE-Desktop
2. Erste Schritte 16<br />
KDE ist im Prinzip in je<strong>de</strong>r <strong>Linux</strong>-Distribution enthalten und bietet eine Fülle <strong>von</strong> Anwen<strong>de</strong>rprogrammen.<br />
Augenfälliges Merkmal <strong>de</strong>s Desktops ist <strong>de</strong>r Session-Manager an <strong>de</strong>r Unterkante <strong>de</strong>s Bildschirms. Dieser<br />
Session-Manager ist quasi die Schaltzentrale für <strong>de</strong>n Desktop. Ungefähr in <strong>de</strong>r Mitte <strong>de</strong>s Session-Managers<br />
befin<strong>de</strong>n sich vier Schaltknöpfe (One - Four) für die Wahl <strong>de</strong>s virtuellen Bildschirms. Links daneben<br />
sind zwei Knöpfe zu sehen, die für das Logout und für <strong>de</strong>n LockScreen (Schloss) verantwortlich sind.<br />
Alle weiteren Icons ermöglichen entwe<strong>de</strong>r <strong>de</strong>n Start <strong>von</strong> Anwendungen (z.B. Editor) o<strong>de</strong>r <strong>de</strong>n Aufruf <strong>von</strong><br />
Popup-Menüs (erkenntlich an <strong>de</strong>n kleinen schwarzen Pfeilen).<br />
Gnome-Desktop<br />
Auch unter <strong>de</strong>m Gnome-Desktop gibt es in <strong>de</strong>r Standard-Konfiguration einen Session-Manager am unteren<br />
Bildschirmrand. Dieses ”Panel” enthält einige Icons für <strong>de</strong>n Start <strong>von</strong> Anwendungen (mit linker Maustaste<br />
nur einmal klicken) und dient auch als Ablageort für laufen<strong>de</strong> Anwendungen, die iconisiert wur<strong>de</strong>n. Zusätzlich<br />
befin<strong>de</strong>t sich am oberen Bildschirmrand eine weitere Leiste. In dieser Leiste lassen sich zum einen<br />
diverse Popup-Menüs aufrufen, zum an<strong>de</strong>ren befin<strong>de</strong>n sich dort die Schaltflächen für die Wahl <strong>de</strong>s virtuellen<br />
Bildschirms. Auf <strong>de</strong>r restlichen freien Bildschirmfläche wer<strong>de</strong>n gewöhnlich die graphischen Anwendungen<br />
plaziert. In obigem Beispiel sind dies xclock, xconsole, gnome-terminal und Control Center.<br />
Das Programm Contol Center bietet die Möglichkeit, <strong>de</strong>n Desktop individuell nach eigenen<br />
Wünschen einzustellen.
2. Erste Schritte 17<br />
CDE-Desktop<br />
Die CDE-Oberfläche (Common Desktop Environment) ist eine graphische Benutzeroberfläche, die architekurunabhängig<br />
auf <strong>Unix</strong>-Rechnern <strong>von</strong> Sun, HP, IBM und Digital zur Verfügung steht. Wie alle an<strong>de</strong>ren<br />
Benutzeroberflächen, basiert auch CDE auf <strong>de</strong>m X11-Protokoll-Standard. Kennzeichen <strong>de</strong>r CDE-<br />
Oberfläche ist wie auch bei KDE und Gnome ein Session-Manager am unteren Bildschirmrand. Dieser<br />
Session-Manager besitzt eine Reihe <strong>von</strong> Grundfunktionen, die individuell noch erweitert wer<strong>de</strong>n können.<br />
Uhr<br />
Lock Screen<br />
Default<br />
Printer<br />
Desktop<br />
Customizing<br />
Desktop-Hilfen<br />
Kalen<strong>de</strong>r<br />
Manager<br />
File Editor<br />
Manager<br />
Graphisches<br />
Mailtool<br />
Vier virtuelle<br />
Bildschirme<br />
Logout<br />
Application<br />
Manager<br />
Abfalleimer<br />
Befin<strong>de</strong>t sich oberhalb eines Symbols im Session-Manager ein kleiner Pfeil, so kann hier ein Popup-Menü<br />
mit weiteren Funktionen aktiviert wer<strong>de</strong>n (in obigem Bild z.B. über <strong>de</strong>m Editor-Symbol). <strong>Eine</strong> gute <strong>Einführung</strong><br />
in die Handhabung <strong>de</strong>s Desktops erhält man über das Symbol Desktop-Help im Session-Manager-<br />
Window (das Symbol mit <strong>de</strong>m Fragezeichen).
2. Erste Schritte 18<br />
Die drei gezeigten Desktop-Varianten dürften wohl <strong>de</strong>n Hauptteil aller weltweit eingesetzten graphischen<br />
Benutzeroberflächen auf <strong>Unix</strong>/<strong>Linux</strong>-Systemen ausmachen. Als gemeinsames Element tritt hierbei <strong>de</strong>r<br />
Session-Manager hervor. Auch im gesamten läßt sich eine Ähnlichkeit in <strong>de</strong>r Handhabung feststellen, was<br />
das abwechseln<strong>de</strong> Arbeiten auf verschie<strong>de</strong>nen Systemen vereinfacht. Die Wahl eines bestimmten Desktops<br />
bzw. Desktop-Layouts wird sich sicherlich aus <strong>de</strong>m persönlichen Geschmacksempfin<strong>de</strong>n <strong>de</strong>s Benutzers<br />
ergeben. Die Funktionalität ist überall gleich.<br />
Die Benutzerumgebung wird nicht alleine durch die graphische Benutzeroberfläche bestimmt. Beim Login<br />
nimmt das System eine ganze Reihe <strong>von</strong> Definitionen vor, die aus sog. Setup-Dateien gelesen wer<strong>de</strong>n.<br />
Diese Definitionen wer<strong>de</strong>n meist in globalen Variablen abgelegt. So kennt CDE z.B. Variable wie<br />
DTXSERVERLOCATION o<strong>de</strong>r DTDATABASESEARCHPATH, Gnome setzt eine Variable namens GNO-<br />
ME_SESSION_NAME und KDE kennt Definitionen wie GTK_RC_FILES und KDE_MULTIHEAD. Zusätzlich<br />
kommen auch noch die Definitionen aus <strong>de</strong>n Login-Setup-Dateien hinzu, die beispielsweise die<br />
Wirkungsweise <strong>von</strong> bestimmten ctrl-keys regeln o<strong>de</strong>r die bevorzugte Terminalemulation festlegen (siehe<br />
Kapitel ”Der Login-Prozess”).<br />
2.4. <strong>Unix</strong>-Dokumentation<br />
Der Nutzen je<strong>de</strong>r Software hängt entschei<strong>de</strong>nd <strong>von</strong> <strong>de</strong>r Qualität <strong>de</strong>r verfügbaren Software-Dokumentation<br />
ab. Die Dokumentation <strong>von</strong> <strong>Unix</strong>/<strong>Linux</strong>-Betriebssystemen kann in unterschiedlichem Umfang und unterschiedlicher<br />
Form erfolgen. Neben <strong>de</strong>r <strong>Unix</strong>-Dokumentation in Buchform (je nach System 10 - 20 Ordner)<br />
stehen <strong>de</strong>m Benutzer auch on-line-Hilfen zur Verfügung.<br />
Manual-Pages geben einen kompakten Überblick über die wichtigsten Kommandos und Themen.<br />
Desktop-Hilfen bieten eine Art <strong>Einführung</strong> zur Handhabung <strong>de</strong>r graphischen Benutzeroberfläche.<br />
Hypertext-Systeme stellen die umfassendste Dokumentation <strong>de</strong>s Systems dar. Die gesamte System-<br />
Dokumentation ist als Web-Dokument verfügbar.<br />
Die klassische Form <strong>de</strong>r Dokumentation bil<strong>de</strong>n die Manual-Pages. Sie sind in je<strong>de</strong>r System-Distribution<br />
vorhan<strong>de</strong>n und glie<strong>de</strong>rn sich thematisch in acht Teile (sections):<br />
1 User Commands<br />
2 System Calls<br />
3 Subroutines<br />
4 Special files<br />
5 File formats, conventions<br />
6 Games<br />
7 Macro packages and language conventions<br />
8 Maintenance, commands and procedures<br />
Innerhalb dieser acht Sektionen wird eine alphabetische Reihenfolge eingehalten. Die Dokumentation <strong>de</strong>r<br />
einzelnen Themen ist maximal komprimiert.
2. Erste Schritte 19<br />
Ein Dokumentationseintrag besteht meist aus folgen<strong>de</strong>n Teilen:<br />
NAME<br />
SYNOPSIS<br />
DESCRIPTION<br />
OPTIONS<br />
FILES<br />
SEE ALSO<br />
DIAGNOSTICS<br />
BUGS<br />
EXAMPLES<br />
Name und Kurzbeschreibung <strong>de</strong>s Themas<br />
Syntax <strong>de</strong>s Kommandos mit Optionen und Argumenten<br />
”Detaillierte Beschreibung”<br />
Beschreibung aller wählbaren Optionen<br />
mit <strong>de</strong>m Thema zusammenhängen<strong>de</strong> Dateien<br />
Hinweise auf verwandte Themen<br />
Erklärung <strong>von</strong> stark verkürzten Fehlermeldungen<br />
bekannte Fehler<br />
Verwendungsbeispiele (nicht immer vorhan<strong>de</strong>n)<br />
Die Anzahl und Art <strong>de</strong>r Unterpunkte eines Dokumentationseintrages können <strong>von</strong> Fall zu Fall unterschiedlich<br />
sein. So kann durchaus einmal <strong>de</strong>r Abschnitt DIAGNOSTICS fehlen, während dafür Punkte wie USAGE<br />
und NOTES erwähnt wer<strong>de</strong>n. Auch <strong>de</strong>r Umfang <strong>de</strong>r DESCRIPTION kann sehr verschie<strong>de</strong>n sein. Oft ist die<br />
DESCRIPTION ausreichend, manchmal wünscht man sich aber eine ausführlichere Beschreibung.<br />
Der wichtigste Teil <strong>de</strong>r Doku-Einträge ist die Synopsis, wobei bei Kommandos folgen<strong>de</strong>s gilt:<br />
kommando ist wörtlich zu übernehmen<br />
[...] alles in eckigen Klammern ist optional<br />
file Dateiname<br />
... eine Wie<strong>de</strong>rholung <strong>de</strong>s vorherigen Arguments ist möglich<br />
Die Einträge <strong>de</strong>r Manual-Pages können mit <strong>de</strong>m Kommando man kommando abgerufen wer<strong>de</strong>n. <strong>Eine</strong><br />
<strong>Einführung</strong> in die Handhabung <strong>de</strong>s man-Kommandos erhält man durch <strong>de</strong>n Befehl man man.<br />
rechner> man ls<br />
User Commands<br />
ls(1)<br />
NAME<br />
ls - list contents of directory<br />
SYNOPSIS<br />
/usr/bin/ls [-aAbcCdfFghilLmnopqrRstux1@] [file...]<br />
/usr/xpg4/bin/ls [-aAbcCdfFghilLmnopqrRstux1@] [file...]<br />
DESCRIPTION<br />
For each file that is a directory, ls lists the contents of<br />
the directory. For each file that is an ordinary file, ls<br />
repeats its name and any other information requested. The<br />
output is sorted alphabetically by <strong>de</strong>fault. When no argument<br />
is given, the current directory is listed. When several<br />
arguments are given, the arguments are first sorted<br />
appropriately, but file arguments appear before directories<br />
and their contents.<br />
...<br />
Obiges Listing zeigt <strong>de</strong>n Bildschirm-Output <strong>de</strong>s Kommandos man ls auf einem <strong>Unix</strong>-System (Sun).
2. Erste Schritte 20<br />
Das gleiche Kommando auf einem <strong>Linux</strong>-System ausgeführt zeigt folgen<strong>de</strong>n Output.<br />
rechner> man ls<br />
VDIR(1) FSF VDIR(1)<br />
NAME<br />
ls - zeigt Verzeichnisinhalt an<br />
ÜBERSICHT<br />
ls [OPTION]... [DATEI]...<br />
BESCHREIBUNG<br />
Auflistung <strong>von</strong> Informationen <strong>de</strong>r DATEIen (Standardvorgabe<br />
ist das momentane Verzeichnis). Alphabetisches Sortieren<br />
<strong>de</strong>r Einträge, falls we<strong>de</strong>r -cftuSUX noch --sort angegeben.<br />
-a, --all<br />
Einträge, die mit . beginnen, nicht verstecken.<br />
-A, --almost-all<br />
Keine Anzeige implizierter . und ..<br />
...<br />
Da auf <strong>Linux</strong>-Rechnern meist ”Deutsch” als Sprachumgebung eingestellt ist, wird bei <strong>de</strong>n manual-pages<br />
auch <strong>de</strong>utscher Text angezeigt. Aber noch an<strong>de</strong>re Unterschie<strong>de</strong> zeigen sich. Der Beschreibungstext bei<br />
<strong>de</strong>r <strong>Linux</strong>-Dokumentation ist sehr kurz, während unter <strong>Unix</strong> doch eine ausführlichere Beschreibung <strong>de</strong>s<br />
Kommandos wi<strong>de</strong>rgegeben wird. Oft wird man auch feststellen können, dass sich die Optionen für das<br />
gleiche Kommando auf <strong>de</strong>n verschie<strong>de</strong>nen <strong>Unix</strong>- bzw. <strong>Linux</strong>-Varianten etwas unterschei<strong>de</strong>n.<br />
Zwei weitere Anwendungsmöglichkeiten <strong>de</strong>s man-Kommandos sind die Schlüsselwortsuche und <strong>de</strong>r gezielte<br />
Zugriff auf Themen in speziellen Sektionen.<br />
rechner> man -k key<br />
Schlüsselwortsuche in <strong>de</strong>n manual-pages; als key kann je<strong>de</strong>r beliebige Begriff<br />
verwen<strong>de</strong>t wer<strong>de</strong>n, <strong>de</strong>r in irgen<strong>de</strong>iner Weise in <strong>de</strong>r Dokumentation steht.<br />
rechner> man -f key<br />
Konkrete Suche nach einem bestimmten Begriff (key); es wer<strong>de</strong>n aus <strong>de</strong>n<br />
kompletten manual-pages nur die Einträge herausgesucht, die <strong>de</strong>m gesuchten<br />
Begriff korrekt entsprechen.<br />
rechner> man -k mount<br />
Alle mit mount zusammenhängen<strong>de</strong> Themen samt Kurzbeschreibung wer<strong>de</strong>n<br />
aufgelistet.<br />
rechner> man -f mount<br />
Es wer<strong>de</strong>n nur Einträge, die <strong>de</strong>n korrekten Begriff mount im NAME-Feld<br />
besitzen, angezeigt.<br />
Über eine Schlüsselwortsuche können zu einem bestimmten Begriff manchmal mehrere Einträge erscheinen.<br />
Hinter <strong>de</strong>n Einträgen stehen in Klammern die Sektionen, in <strong>de</strong>nen die Begriffe dokumentiert wer<strong>de</strong>n. Mit
2. Erste Schritte 21<br />
Hilfe dieser Sektionsnummern kann dann gezielt auf <strong>de</strong>n gewünschten Dokumentationseintrag zugegriffen<br />
wer<strong>de</strong>n. Unter <strong>Linux</strong> erfolgt dies mit <strong>de</strong>r Option -S und unter Sun Solaris mit <strong>de</strong>r Option -s.<br />
rechner> man -f autofs<br />
autofs (8)<br />
autofs (5)<br />
- Control Script for automounter<br />
- Format of the automounter maps<br />
rechner> man -S 8 autofs<br />
rechner> man -s 2 mount<br />
Die Manual-Pages stellen die grundlegen<strong>de</strong> online-Dokumentation auf je<strong>de</strong>m <strong>Unix</strong>/<strong>Linux</strong>-System dar. Trotz<br />
<strong>de</strong>r manchmal etwas knappen Beschreibung sind sie eine gute Hilfe bei <strong>de</strong>r täglichen Arbeit. <strong>Eine</strong> Vertiefung<br />
in ein spezielles Thema erlauben die Manual-Pages allerdings nicht. Umfangreichere Dokumentationen<br />
bieten entwe<strong>de</strong>r gedruckte Medien o<strong>de</strong>r sog. Dokumentations-Server. Aufgrund <strong>de</strong>r besseren<br />
Aktualität sind Dokumentations-Server vorzuziehen. Sie enthalten die komplette gedruckte Dokumentation<br />
und unterstützen die themenbezogene Suche. <strong>Eine</strong> gute Dokumentation <strong>von</strong> Sun Solaris ist unter<br />
<strong>de</strong>r Web-Adresse docs.sun.com zu fin<strong>de</strong>n. Zahlreiche <strong>Linux</strong>-Dokumentationen sind nicht nur als<br />
gedruckte Bücher im Buchhan<strong>de</strong>l, son<strong>de</strong>rn auch als Web-Dokumente im Internet vertreten. Die Adresse<br />
www.tldp.org/gui<strong>de</strong>s.html soll hier nur als Beispiel genannt wer<strong>de</strong>n.<br />
2.5. Spezialzeichen und reguläre Ausdrücke<br />
Beim interaktiven Arbeiten auf Kommandozeilenebene gibt es eine Reihe <strong>von</strong> Zeichen, die für die Interpretation<br />
<strong>de</strong>r Eingabe eine spezielle Be<strong>de</strong>utung haben.<br />
* expandiert zu einem beliebigen String<br />
? expandiert zu genau einem Zeichen<br />
[...] expandiert zu genau einem Zeichen aus <strong>de</strong>r angegebenen Zeichenliste<br />
~ expandiert zum HOME-Directory<br />
{...} expandiert zu <strong>de</strong>n angegebenen Strings<br />
$ Zeichen für die Referenz auf eine shell-Variable<br />
\ maskiert das nachfolgen<strong>de</strong> Son<strong>de</strong>rzeichen, Fortsetzung einer Zeile<br />
’...’ maskiert <strong>de</strong>n in Hochkommas eingschlossenen Text<br />
"..." maskiert <strong>de</strong>n in <strong>de</strong>n doppelten Hochkommas eingeschlossenen Text<br />
ausser <strong>de</strong>n Zeichen $ \ ‘<br />
Unter <strong>de</strong>r Maskierung <strong>von</strong> Zeichen versteht man das Verbergen vor einer Interpretation seitens <strong>de</strong>r loginshell.<br />
Dies ist vor allem dann erfor<strong>de</strong>rlich, wenn eine Zeichenkette (string) mit Son<strong>de</strong>rzeichen an ein externes<br />
Kommando weitergegeben wer<strong>de</strong>n soll.<br />
Einige <strong>de</strong>r oben erwähnten Spezialzeichen wer<strong>de</strong>n auch bei <strong>de</strong>r Beschreibung regulärer Ausdrücke verwen<strong>de</strong>t.<br />
Ein regulärer Ausdruck ist eine Folge <strong>von</strong> Textzeichen und/o<strong>de</strong>r Spezialzeichen. Die Spezialzeichen<br />
stellen Operatoren dar, mit <strong>de</strong>ren Hilfe komplexe Textmuster beschrieben wer<strong>de</strong>n können. Derartige Muster<br />
können in verschie<strong>de</strong>nen Kommandos als Textfilter verwen<strong>de</strong>t wer<strong>de</strong>n.
2. Erste Schritte 22<br />
Die Operatoren in regulären Ausdrücken haben folgen<strong>de</strong> Be<strong>de</strong>utung:<br />
. Platzhalter für ein beliebiges Zeichen<br />
[...] Platzhalter für genau ein Zeichen aus <strong>de</strong>r angegebenen Menge<br />
a* a kann nullmal o<strong>de</strong>r öfter hintereinan<strong>de</strong>r vorkommen<br />
a? a kann nullmal o<strong>de</strong>r einmal vorkommen<br />
a+ a kann einmal o<strong>de</strong>r öfter hintereinan<strong>de</strong>r vorkommen<br />
^ Vorkommen am Zeilenanfang<br />
$ Vorkommen am Zeilenen<strong>de</strong><br />
| o<strong>de</strong>r-Verknüpfung<br />
Reguläre Ausdrücke wer<strong>de</strong>n bei <strong>de</strong>r Verwendung mit <strong>de</strong>n Kommandos grep und egrep in einfache<br />
Hochkommas eingeschlossen, bei <strong>de</strong>r Verwendung mit awk stehen sie zwischen Schrägstrichen (/).<br />
rechner> egrep ’^....[km]’ .mailrc<br />
set keep<br />
set keepsave<br />
set metoo<br />
set keepmovedialog=’0’<br />
set keepaddattachdialog=’0’<br />
In obigem Beispiel wer<strong>de</strong>n mit <strong>de</strong>m Kommando egrep aus <strong>de</strong>r Datei .mailrc alle Zeilen herausgefiltert,<br />
die <strong>de</strong>m angegebenen Textmuster entsprechen (die ersten vier Zeichen können beliebig aussehen, das<br />
fünfte Zeichen darf aus einem k o<strong>de</strong>r m bestehen und das Muster muss am Zeilenanfang erscheinen).<br />
Für die Interaktion auf Kommandozeilenebene sind noch einige Control-Tastensequenzen relevant. So<br />
löscht u <strong>de</strong>n Text in <strong>de</strong>r aktuellen Eingabezeile, c bricht das laufen<strong>de</strong> Programm<br />
ab, z suspendiert ein laufen<strong>de</strong>s Programm und d been<strong>de</strong>t eine Eingabe auf Standard-<br />
Input. Die Eingabe <strong>von</strong> q been<strong>de</strong>t bei Auflistungen durch die Kommandos man und more die Ausgabe.
3. Kommandos und Prozesse<br />
Beim Hochfahren (Booten) eines <strong>Unix</strong>/<strong>Linux</strong>-Systems wird eine Reihe <strong>von</strong> Prozessen gestartet. Ausgehend<br />
<strong>von</strong> einem Wurzel-Prozess wird so nach und nach eine baumartige, hierarchische Struktur <strong>von</strong> Prozessen<br />
erzeugt.<br />
PID 1<br />
Vater-Prozess<br />
PID 23 PID 34<br />
Kind-Prozesse<br />
PID 45 PID 47 PID 52<br />
Enkelkind-Prozesse<br />
Abbildung 3.1.: Hierarchische Prozess-Struktur<br />
Ein Prozess ist ein in einem <strong>de</strong>finierten Hard- und Software-Kontext laufen<strong>de</strong>s Programm. Innerhalb eines<br />
Prozesses können mehrere Programme abgearbeitet wer<strong>de</strong>n, an<strong>de</strong>rerseits kann ein Prozess auch weitere<br />
untergeordnete sog. Kindprozesse erzeugen. Je<strong>de</strong>r Prozess besitzt eine einein<strong>de</strong>utige Prozessi<strong>de</strong>ntifikationsnummer<br />
(PID) und ist einem ein<strong>de</strong>utigen Benutzer zugeordnet (UID). Neue Prozesse können nur <strong>von</strong><br />
einem bereits laufen<strong>de</strong>n Prozess gestartet wer<strong>de</strong>n, so dass daraus eine gesamte Prozess-Hierarchie entsteht.<br />
Der Urvater aller Prozesse ist <strong>de</strong>r init-Prozess. Er besitzt die PID 1. Wie aus <strong>de</strong>r Prozess-Hierarchie zu<br />
erkennen ist, sind die Prozesse <strong>von</strong>einan<strong>de</strong>r abhängig. Da ein übergeordneter Prozess in <strong>de</strong>r Regel einen<br />
untergeordneten Prozess kontrolliert, be<strong>de</strong>utet eine Termination eines Prozesses auch ein Sterben aller <strong>von</strong><br />
ihm abhängigen untergeordneten Prozesse.<br />
Unter <strong>Unix</strong>/<strong>Linux</strong> wird zwischen Vor<strong>de</strong>rgrund- und Hintergrundprozessen unterschie<strong>de</strong>n. Vor<strong>de</strong>rgrundprozesse<br />
sind interaktive Prozesse, die über ein Gerät (Device) kontrolliert wer<strong>de</strong>n (z.B. Login-shell). Die<br />
Klasse <strong>de</strong>r Hintergrundprozesse wird eingeteilt in interaktive Hintergrundprozesse und in sog. Daemon-<br />
Prozesse. Daemon-Prozesse sind Endlosprozesse, die auf ein bestimmtes Ereignis warten und keinem<br />
Device zugeordnet sind. Der Prozess nfsd ist ein solcher Daemon-Prozess. Er ist dafür zuständig, ein<br />
Filesystem remote über das Datennetz zur Verfügung zu stellen.
3. Kommandos und Prozesse 24<br />
3.1. Der Login-Prozess<br />
Beim Login wird ebenfalls ausgehend vom init-Prozess eine Hierarchie <strong>von</strong> Benutzer-Prozessen aufgebaut,<br />
an <strong>de</strong>ren En<strong>de</strong> <strong>de</strong>r Start aller Anwendungen steht. Während <strong>de</strong>s Login-Vorgangs wer<strong>de</strong>n, abhängig <strong>von</strong><br />
<strong>de</strong>r Login-shell und <strong>de</strong>m zu starten<strong>de</strong>n Desktop, verschie<strong>de</strong>ne Dateien ausgelesen und die dort befindlichen<br />
Definitionen aktiviert. Diese Dateien wer<strong>de</strong>n auch setup-Dateien genannt.<br />
init login passwd- und group-Daten<br />
/etc/csh.cshrc<br />
/etc/csh.login<br />
$HOME/.cshrc<br />
$HOME/.login<br />
<strong>de</strong>sktopsetup<br />
shell<br />
Start <strong>von</strong> Anwendungen<br />
Abbildung 3.2.: Login-Vorgang beim tcsh-Login<br />
Je<strong>de</strong>r Login-Vorgang beginnt mit <strong>de</strong>r I<strong>de</strong>ntitäts-Prüfung <strong>de</strong>s Benutzers (passwd, group). Mit <strong>de</strong>n Dateien<br />
/etc/csh.cshrc und /etc/csh.login wer<strong>de</strong>n zunächst globale Einstellungen vorgenommen, die<br />
für je<strong>de</strong>n Benutzer gelten, <strong>de</strong>r sich auf <strong>de</strong>m System einloggt. Alle weiteren Dateien befin<strong>de</strong>n sich im HOME-<br />
Verzeichnis <strong>de</strong>s Benutzers und sind für die individuellen Einstellungen verantwortlich.<br />
/etc/csh.cshrc<br />
/etc/csh.login<br />
$HOME/.cshrc<br />
In dieser Datei wer<strong>de</strong>n globale Pfa<strong>de</strong>, Variable und aliases gesetzt.<br />
set path = ( /usr/local/bin /usr/bin )<br />
setenv MAIL ${HOME}/Mail/Inbox<br />
setenv EDITOR vi<br />
alias rm ’rm -i’<br />
Hier befin<strong>de</strong>n sich meist globale Einstellungen zum Terminaltyp.<br />
/usr/bin/stty -istrip<br />
setenv TERM vt100<br />
Individuelle Erweiterungen zu <strong>de</strong>n globalen Einstellungen.<br />
set path = ( $path $HOME/bin )<br />
source ~/.myalias
3. Kommandos und Prozesse 25<br />
$HOME/.login<br />
Individuelle Terminal-Settings. Definitionen für spezielle Anwendungen.<br />
setenv ENVIRONMENT ’NOBATCH’<br />
All diese Dateien legen mit ihren Definitionen die gesamte Benutzerumgebung fest. Je nach<strong>de</strong>m, welche<br />
Login-shell für einen Benutzer eingetragen ist, wer<strong>de</strong>n die für diese Login-shell relevanten Dateien<br />
ausgelesen und die dort vorhan<strong>de</strong>nen Einstellungen aktiviert. Die oben erwähnten Dateien sind für die<br />
tcsh als Login-shell gültig. Wird die bash als Login-shell benutzt, so wer<strong>de</strong>n für die Definitionen<br />
beim Login die Dateien /etc/profile, $HOME/.bash_profile, $HOME/.bash_login und<br />
$HOME/.profile benutzt. Für das Desktop-Setup sind je nach gewählter Oberfläche die im HOME-<br />
Verzeichnis vorhan<strong>de</strong>nen Unterverzeichnisse .dt ( für CDE), .k<strong>de</strong> bzw. .k<strong>de</strong>2 ( für KDE) und<br />
.gnome... (für Gnome) sowie die setup-Dateien .dtprofile und .k<strong>de</strong>rc verantwortlich.<br />
3.2. Kommandoeingabe<br />
Kommandos sind Bildschirm-Eingaben (meist in einem Terminal-Fenster), die <strong>von</strong> <strong>de</strong>r aktuell laufen<strong>de</strong>n<br />
shell (Kommandointerpreter) abgearbeitet wer<strong>de</strong>n. Unter <strong>Unix</strong>/<strong>Linux</strong> existieren drei verschie<strong>de</strong>ne Typen<br />
<strong>von</strong> Kommandos:<br />
shell-interne Kommandos (z.B. cd, echo); diese Kommandos wer<strong>de</strong>n innerhalb <strong>de</strong>r shell abgewickelt;<br />
es wird kein eigener Sub-Prozess gestartet<br />
externe Kommandos; die Abarbeitung erfolgt in einem untergeordneten Prozess<br />
Benutzerprogramme und -prozeduren<br />
Das einfache Kommando<br />
command [ arguments ]<br />
rechner> date<br />
rechner> id<br />
rechner> finger<br />
rechner> logname<br />
rechner> mkdir text<br />
Ausgabe <strong>de</strong>s aktuellen Datums<br />
Ausgabe <strong>de</strong>r eigenen Benutzeri<strong>de</strong>ntität<br />
Auflisten aller eingeloggten Benutzer<br />
Ausgabe <strong>de</strong>s Login-Namens<br />
Anlegen eines Subdirectories namens text<br />
Die Kommandofolge<br />
command1; command2; command3; ...<br />
rechner> date; finger; ls /tmp<br />
Ausgabe <strong>de</strong>s aktuellen Datums, <strong>de</strong>r eingeloggten Benutzer und Auflisten <strong>de</strong>s<br />
Verzeichnisses /tmp<br />
Die Kommandofolge besteht also aus mehreren einzelnen Kommandos, die jeweils durch ein Semikolon<br />
getrennt <strong>von</strong> links nach rechts abgearbeitet wer<strong>de</strong>n. Als Argumente können Dateinamen, Optionen und<br />
Ausdrücke verwen<strong>de</strong>t wer<strong>de</strong>n. Argumente wer<strong>de</strong>n durch Leerzeichen <strong>von</strong>einan<strong>de</strong>r getrennt.
3. Kommandos und Prozesse 26<br />
Die Kommandogruppe<br />
( command1; command2; command3; ... )<br />
rechner> ( date; finger; ls /tmp )<br />
Ausgabe <strong>de</strong>s aktuellen Datums, <strong>de</strong>r eingeloggten Benutzer und Auflisten <strong>de</strong>s<br />
Verzeichnisses /tmp<br />
Die Gruppierung erfolgt durch Einschluss einer Kommandofolge in run<strong>de</strong> Klammern. Im Gegensatz zur<br />
Kommandofolge wer<strong>de</strong>n die Anweisungen in <strong>de</strong>r Kommandogruppe in einem separaten untergeordneten<br />
Prozess abgearbeitet.<br />
Das Pipelining<br />
command1 | command2 | command3 | ...<br />
rechner> ps -ef | grep root | head -10<br />
Das Kommando ps -ef gibt alle laufen<strong>de</strong>n Prozesse aus, grep root filtert<br />
aus <strong>de</strong>r gesamten Liste nur die Prozesse heraus, die <strong>de</strong>m Benutzer root<br />
gehören und head -10 gibt <strong>von</strong> <strong>de</strong>r verbleiben<strong>de</strong>n Liste die ersten 10 Zeilen<br />
am Bildschirm aus.<br />
rechner> ( ls -l /tmp; ls -l /var ) | wc -l<br />
Übergabe <strong>de</strong>s gesammelten Outputs bei<strong>de</strong>r ls-Kommandos an das Kommando<br />
wc<br />
Der Output <strong>von</strong> command1 wird unmittelbar als Input für command2 verwen<strong>de</strong>t, <strong>de</strong>r Output <strong>von</strong> command2<br />
als Input für command3 usw. Im zweiten Beispiel wird die Be<strong>de</strong>utung <strong>de</strong>r Kommandogruppe<br />
<strong>de</strong>utlich. Wür<strong>de</strong>n die run<strong>de</strong>n Klammern wegfallen, so wür<strong>de</strong> das wc-Kommando nur <strong>de</strong>n Output vom unmittelbar<br />
davor stehen<strong>de</strong>n ls-Kommando erhalten.<br />
3.3. Prozesskontrolle<br />
Ein laufen<strong>de</strong>s <strong>Unix</strong>/<strong>Linux</strong>-System besteht aus einer Vielzahl <strong>von</strong> Prozessen, die entwe<strong>de</strong>r beim Booten <strong>de</strong>s<br />
Systems o<strong>de</strong>r durch Benutzer-Aktivitäten (Login, Programmaufruf) erzeugt wer<strong>de</strong>n. Je<strong>de</strong>r Prozess ist einem<br />
Benutzer zugeordnet und kann daher auch <strong>von</strong> diesem Benutzer kontrolliert wer<strong>de</strong>n. Viele Prozesse gehören<br />
z.B. <strong>de</strong>m Benutzer root und können nur vom Benutzer root, also <strong>de</strong>m Systemadministrator, beeinflußt<br />
wer<strong>de</strong>n. Auf alle Prozesse, die einem Benutzer gehören, hat dieser Benutzer selbst administrativen Einfluß.<br />
Für das Auflisten <strong>de</strong>r Prozess-Tabelle wird das Kommando ps verwen<strong>de</strong>t. Immer wenn Informationen über<br />
laufen<strong>de</strong> Prozesse benötigt wer<strong>de</strong>n, sollte dieses Kommando benutzt wer<strong>de</strong>n. Je nach gewählter Option<br />
liefert ps Informationen über alle Prozesse o<strong>de</strong>r nur über Prozesse, die <strong>von</strong> <strong>de</strong>r aktuellen Position in <strong>de</strong>r<br />
Prozess-Hierarchie erzeugt wur<strong>de</strong>n.<br />
rechner> ps -f<br />
UID PID PPID C STIME TTY TIME CMD<br />
puw09523 10005 9997 0 Oct 02 pts/4 0:01 tcsh<br />
puw09523 13853 10005 0 08:24:44 pts/4 0:02 xdvi -bg white in<strong>de</strong>x<br />
puw09523 13855 13853 0 08:25:01 pts/4 0:03 gs -sDEVICE=x11 -dNOPAUSE<br />
puw09523 13848 10005 0 08:15:18 pts/4 0:01 /usr/openwin/bin/textedit
3. Kommandos und Prozesse 27<br />
rechner> ps -l<br />
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD<br />
8 S 9523 10005 9997 0 41 20 f5bb2cc0 325 f5bb2e90 pts/4 0:01 tcsh<br />
8 S 9523 13853 10005 0 57 20 f6000010 775 f5e64066 pts/4 0:02 xdvi<br />
8 S 9523 13855 13853 0 67 20 f60a4980 1213 f606f8d4 pts/4 0:03 gs<br />
8 S 9523 13848 10005 0 51 20 f60a3cc0 1070 f5e6430e pts/4 0:01 textedit<br />
Mit <strong>de</strong>n oben gezeigten Kommandos sieht man alle eigenen Prozesse, die <strong>von</strong> <strong>de</strong>r aktuellen Position <strong>de</strong>r<br />
Prozess-Hierarchie erzeugt wur<strong>de</strong>n. Dabei kann auch an Hand <strong>de</strong>r PID- und PPID-Nummern das Abhängigkeitsverhältnis<br />
in <strong>de</strong>r Prozess-Hierarchie nachvollzogen wer<strong>de</strong>n. Sollen alle Prozesse angezeigt wer<strong>de</strong>n,<br />
die auf <strong>de</strong>m System laufen, so erfolgt dies mit <strong>de</strong>m Kommando ps -ef | more.<br />
Die vom ps-Kommando gelieferten Daten haben im einzelnen folgen<strong>de</strong> Be<strong>de</strong>utung:<br />
UID<br />
PID<br />
PPID<br />
STIME<br />
TIME<br />
TTY<br />
ADDR<br />
WCHAN<br />
CMD<br />
PRI<br />
NI<br />
SZ<br />
C<br />
F<br />
S<br />
Benutzer-I<strong>de</strong>ntifikation <strong>de</strong>s Prozesseigentümers<br />
einein<strong>de</strong>utige Prozess-Nummer<br />
Prozess-Nummer <strong>de</strong>s Eltern-Prozesses (Parent PID)<br />
Uhrzeit, wann <strong>de</strong>r Prozess gestartet wur<strong>de</strong><br />
bisher vom Prozess verbrauchte CPU-Zeit<br />
das <strong>de</strong>m Prozess zugeordnete Pseudo-Terminal<br />
Hauptspeicher- o<strong>de</strong>r Plattenadresse <strong>de</strong>s Prozesses<br />
Adresse eines Events, auf <strong>de</strong>n <strong>de</strong>r Prozess wartet<br />
Name <strong>de</strong>s Kommandos, das <strong>de</strong>n Prozess gestartet hat<br />
aktuelle Priorität <strong>de</strong>s Prozesses (je kleiner <strong>de</strong>sto grösser die Priorität)<br />
nice-Parameter für die Prioritätsberechnung<br />
Grösse <strong>de</strong>s Prozesses im Hauptspeicher in kByte<br />
systeminterner Scheduling-Parameter<br />
systeminterne flags (hat nur noch historische Be<strong>de</strong>utung)<br />
Status (S=sleeping, O=running, R=runnable, Z=zombie, T=stopped)<br />
Das ps-Kommando stellt ein wichtiges Hilfsmittel zur Prozess-Überwachung dar. Kombiniert mit <strong>de</strong>n<br />
Kommandos grep und sort ermöglicht es verschie<strong>de</strong>ne Selektionen aus <strong>de</strong>r kompletten Prozess-Liste.<br />
rechner> ps -ef | grep ssh<br />
Selektion aller ssh-Prozesse<br />
Es gibt noch weitere Kommandos, die Informationen über laufen<strong>de</strong> Prozesse liefern. So geben die Befehle<br />
ptree unter Sun Solaris und pstree unter <strong>Linux</strong> alle Prozesse in hierarchischer Struktur aus.<br />
rechner> ptree $LOGNAME | more<br />
rechner> pstree -p $LOGNAME | more<br />
Prozess-Hierarchie unter Solaris<br />
Prozess-Hierarchie unter <strong>Linux</strong><br />
Bei<strong>de</strong> Kommandos listen die Prozess-Struktur <strong>de</strong>s eingeloggten Benutzers auf.<br />
Das Verhalten <strong>de</strong>r eigenen Prozesse kann vom Prozesseigentümer gesteuert wer<strong>de</strong>n. So ist es möglich,<br />
Prozesse zu suspendieren, zu terminieren und mit vermin<strong>de</strong>rter Priorität zu starten. Auch das Absetzen <strong>von</strong><br />
Hintergrundprozessen und die Beobachtung <strong>de</strong>r Prozess-Aktivität wird in diesem Zusammenhang erwähnt.<br />
Prozess als Hintergrund-Prozess starten<br />
command [ arguments ] &<br />
nohup command [ arguments ] &
3. Kommandos und Prozesse 28<br />
Ein Prozess wird durch Anfügen <strong>de</strong>s Zeichens & in <strong>de</strong>n Hintergrund versetzt. Als Information erhält man<br />
vom System eine relative [jobid] in eckigen Klammern und eine einein<strong>de</strong>utige Prozessi<strong>de</strong>ntifikationsnummer<br />
(PID). Standardausgabe- und Standardfehlerausgabe-Medium bleibt weiterhin das Pseudoterminal,<br />
<strong>von</strong> <strong>de</strong>m aus <strong>de</strong>r Hintergrundprozess gestartet wur<strong>de</strong>. Das Starten eines Hintergrundprozesses mit <strong>de</strong>m<br />
Kommando nohup verhin<strong>de</strong>rt ein Terminieren <strong>de</strong>s Prozesses beim Ausloggen aus <strong>de</strong>m System. Der Sinn<br />
<strong>von</strong> Hintergrundprozessen ist <strong>de</strong>r, dass zum einen die interaktive Terminal-Eingabe nicht blockiert wird,<br />
und zum an<strong>de</strong>ren ein Logout aus <strong>de</strong>m System möglich ist, ohne einen Abbruch <strong>de</strong>s Hintergrundprozesses<br />
zu bewirken (beim Start mit nohup). Der Prozess wird mit nohup quasi aus <strong>de</strong>r Hierarchie entkoppelt.<br />
Mit <strong>de</strong>m Kommando jobs -l wer<strong>de</strong>n alle gestarteten Hintergrundprozesse mit ihrem Status aufgelistet.<br />
rechner> xclock &<br />
[1] 22656<br />
rechner> xterm &<br />
[2] 22660<br />
rechner> jobs -l<br />
[1] + 22656 Läuft xclock<br />
[2] - 22660 Läuft xterm<br />
In vorliegen<strong>de</strong>m Beispiel wer<strong>de</strong>n zwei graphische Anwendungen (xclock, xterm) als Hintergrundprozesse<br />
gestartet. In <strong>de</strong>r Job-Liste wer<strong>de</strong>n die entsprechen<strong>de</strong>n jobids und PIDs wi<strong>de</strong>rgegeben. Ein Prozess<br />
kann auch noch nachträglich in <strong>de</strong>n Hintergrund versetzt wer<strong>de</strong>n, in<strong>de</strong>m nach <strong>de</strong>r Kommandoeingabe die<br />
Tastensequenz z gedrückt wird und anschließend die Anweisung bg (für background) abgesetzt<br />
wird. Durch das z wird <strong>de</strong>r Vor<strong>de</strong>rgrundprozess suspendiert, also in einen Wartezustand<br />
versetzt.<br />
Prozess in <strong>de</strong>n Vor<strong>de</strong>rgrund holen<br />
%jobid<br />
fg %jobid<br />
Die jobid kann dazu benutzt wer<strong>de</strong>n, einen im Hintergrund laufen<strong>de</strong>n Prozess in <strong>de</strong>n Vor<strong>de</strong>rgrund zurückzuholen.<br />
Danach steht aber das Terminal für weitere Eingaben nicht mehr zur Verfügung. Allerdings kann<br />
mit z eine Suspendierung erfolgen, mit <strong>de</strong>r Alternative, <strong>de</strong>n Prozess erneut in <strong>de</strong>n Hintergrund<br />
schicken zu können.<br />
%jobid &<br />
bg %jobid<br />
Prozess suspendieren<br />
stop %jobid<br />
stop PID<br />
rechner> stop 22656<br />
rechner> jobs -l<br />
[1] + 22656 Angehalten (Signal) xclock<br />
[2] - 22660 Läuft xterm<br />
Für die Suspendierung <strong>von</strong> Prozessen kann neben <strong>de</strong>r oben beschriebenen Tastensequenz z auch<br />
das Kommando stop verwen<strong>de</strong>t wer<strong>de</strong>n. Dabei kann man wahlweise die jobid o<strong>de</strong>r die PID angeben.
3. Kommandos und Prozesse 29<br />
Prozess terminieren<br />
kill PID<br />
kill -9 PID<br />
rechner> kill 22656<br />
rechner> jobs -l<br />
[1] 22656 Been<strong>de</strong>t xclock<br />
[2] + 22660 Läuft xterm<br />
Das vollständige Been<strong>de</strong>n eines Prozesses wird mit <strong>de</strong>m Kommando kill erreicht. Mit <strong>de</strong>r Option -9 wird<br />
<strong>de</strong>r Prozess bedingungslos abgebrochen, ohne diese Option versucht das System möglicherweise geöffnete<br />
Dateien noch ordnungsgemäß zu schließen. In <strong>de</strong>r Job-Liste wird <strong>de</strong>r entsprechen<strong>de</strong> Prozess als ”Been<strong>de</strong>t”<br />
markiert.<br />
Prozess-Priorität vermin<strong>de</strong>rn<br />
nice [ +n|-n ] [ command ]<br />
renice n PID<br />
rechner> ps -l | egrep ’(UID|22660)’<br />
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD<br />
000 S 9523 22660 1244 0 69 0 - 1172 select pts/2 00:00:00 xterm<br />
rechner> renice 5 22660<br />
22660: Alte Priorität: 0, neue Priorität: 5<br />
rechner> ps -l | egrep ’(UID|22660)’<br />
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD<br />
000 S 9523 22660 1244 0 72 5 - 1172 select pts/2 00:00:00 xterm<br />
Das nice-Kommando startet einen Prozess mit vermin<strong>de</strong>rter Priorität. Ohne die Angabe eines Wertes n<br />
wird standardmäßig 4 gesetzt. Das renice-Kommando vermin<strong>de</strong>rt die Priorität eines bereits laufen<strong>de</strong>n<br />
Prozesses. Es ist nur eine Reduzierung <strong>de</strong>r Prozess-Priorität möglich. Je höher <strong>de</strong>r Wert n, <strong>de</strong>sto niedriger<br />
ist die Priorität. In <strong>de</strong>r Prozess-Liste kann <strong>de</strong>r gesetzte Prioritätswert in <strong>de</strong>r Spalte NI abgelesen wer<strong>de</strong>n.<br />
<strong>Eine</strong> Vermin<strong>de</strong>rung <strong>de</strong>r Priorität ist immer dann sinnvoll, wenn verhin<strong>de</strong>rt wer<strong>de</strong>n soll, dass langlaufen<strong>de</strong><br />
Programme die gleichzeitige interaktive Arbeit zu sehr behin<strong>de</strong>rn. Unter Sun Solaris wird die Priorität in<br />
<strong>de</strong>r Spalte NI vom Ausgangswert 20 hochgezählt.<br />
Prozess-Aktivität beobachten<br />
strace command [ arguments ]<br />
strace -p PID<br />
truss command [ arguments ]<br />
truss -p PID
3. Kommandos und Prozesse 30<br />
Das Kommando strace wird unter <strong>Linux</strong>, das Kommando truss unter Sun Solaris verwen<strong>de</strong>t. Bei<strong>de</strong><br />
liefern als Output die vom System benutzten System-Calls.<br />
Es existieren noch weitere Hilfsprogramme, mit <strong>de</strong>nen die Prozess-Aktivität auf <strong>de</strong>m gesamten System<br />
beobachtet wer<strong>de</strong>n kann. Ein weit verbreitetes Tool ist das Programm top. top stellt alle Prozesse als<br />
dynamische Tabelle dar, die alle 5 bis 10 Sekun<strong>de</strong>n aktualisiert wird.<br />
Abbildung 3.3.: Das Programm top zur Prozess-Beobachtung<br />
Die Prozesse wer<strong>de</strong>n sortiert nach ihrem CPU-Verbrauch wi<strong>de</strong>rgegeben, d.h. <strong>de</strong>r Prozess, <strong>de</strong>r am meisten<br />
CPU-Zeit verbraucht, steht ganz oben. Außer<strong>de</strong>m sind <strong>de</strong>r Tabelle noch Angaben über Memory- und Swap-<br />
Ausnutzung zu entnehmen. Das Programm wird einfach durch Eingabe <strong>von</strong> q been<strong>de</strong>t.<br />
Meist enthalten die graphischen Benutzeroberflächen auch noch Programme, die eine Beobachtung <strong>de</strong>r<br />
Prozess-Aktivität zulassen. Unter Sun Solaris und CDE ist dies das Programm sdtprocess, unter <strong>Linux</strong><br />
sind dies die Tools gtop und kpm.
4. Das Dateisystem<br />
Das Dateisystem unter <strong>Unix</strong>/<strong>Linux</strong> ist hierarchisch geglie<strong>de</strong>rt. Ausgehend vom root directory / verzweigen<br />
sich Unterverzeichnisse mit System- und Benutzerdaten. Unter einem Dateisystem wird grundsätzlich eine<br />
komplette Hierarchie <strong>von</strong> Verzeichnissen und Dateien auf einer Festplatte o<strong>de</strong>r einem Festplatten-Array<br />
verstan<strong>de</strong>n. Meist kommen heute Festplatten-Arrays zum Einsatz, die aufgrund ihrer Konfiguration (RAID)<br />
eine hohe Fehlertoleranz aufweisen.<br />
/<br />
bin <strong>de</strong>v etc usr home<br />
rar12345<br />
Mail<br />
text<br />
Abbildung 4.1.: Hierarchisches Dateisystem<br />
Im Verzeichnis /etc stehen u.a. Konfigurationsdateien für das System, das Directory /<strong>de</strong>v enthält spezielle<br />
Dateien für die Kommunikation mit Geräten und im Verzeichnis /bin stehen ausführbare Programme.<br />
Benutzerdaten wer<strong>de</strong>n in <strong>de</strong>r Regel auf geson<strong>de</strong>rten Platten abgelegt (/home). Die Informationen über<br />
die Struktur <strong>de</strong>s gesamten Dateisystems ist auf je<strong>de</strong>r Platte in speziellen Blöcken und in <strong>de</strong>n sog. I-No<strong>de</strong>-<br />
Tabellen gespeichert.<br />
Je<strong>de</strong>s HOME-Verzeichnis ist ein Unterverzeichnis in einem großen Dateisystem (in obigem Beispiel wäre<br />
dies /home/rar12345 auf <strong>de</strong>m Dateisystem /home). Alle <strong>Unix</strong>/<strong>Linux</strong>-Benutzer an <strong>de</strong>r Uni Regensburg<br />
besitzen aber noch weitere Verzeichnisse in an<strong>de</strong>ren Dateisystemen (/temp, /secure), die sie zur Speicherung<br />
ihrer Daten verwen<strong>de</strong>n können. Das secure-Verzeichnis kann allerdings nur nach einem Login<br />
auf einem Sun Solaris System genutzt wer<strong>de</strong>n. Die Daten auf <strong>de</strong>n Dateisystemen /home und /secure<br />
wer<strong>de</strong>n täglich gesichert. Das Dateisystem /temp sollte nur zur temporären Speicherung <strong>von</strong> Daten verwen<strong>de</strong>t<br />
wer<strong>de</strong>n, da da<strong>von</strong> keine Sicherung erfolgt. Je<strong>de</strong>r Benutzer kann in seinen Verzeichnissen bis zu<br />
einer Maximal-Grenze (diskquota) Daten ablegen.
4. Das Dateisystem 32<br />
4.1. Dateiarten und Dateinamen<br />
Unter <strong>Unix</strong> existieren drei Dateiarten:<br />
Directories d Inhaltsverzeichnisse<br />
Normale Dateien - können Daten aller Art enthalten<br />
Spezielle Dateien c charakter-orientierte Gerätedateien<br />
b block-orientierte Gerätedateien<br />
p named pipes für die Prozesskommunikation<br />
Die mittlere Spalte zeigt für <strong>de</strong>n entsprechen<strong>de</strong>n Dateityp <strong>de</strong>n Kennbuchstaben, <strong>de</strong>r bei einem ausführlichen<br />
Directory-Listing mit <strong>de</strong>m Kommando ls -l ausgegeben wird.<br />
rechner> ls -l<br />
-rw-r----- 1 rar12345 stud 19 Sep 9 08:56 else<br />
-rw-r----- 2 rar12345 stud 63 Sep 9 08:58 franz<br />
-rw-r----- 1 rar12345 stud 0 Sep 9 08:55 hugo<br />
-rw-r----- 2 rar12345 stud 63 Sep 9 08:58 ina<br />
lrwxrwxrwx 1 rar12345 stud 4 Sep 9 08:59 sara -> else<br />
drwxr-x--x 2 rar12345 stud 117 Sep 9 09:27 text<br />
Die einzelnen Spalten <strong>de</strong>r Ausgabe haben folgen<strong>de</strong> Be<strong>de</strong>utung:<br />
-rw-r----- das erste Bit dokumentiert <strong>de</strong>n Typ <strong>de</strong>r Datei, in <strong>de</strong>n neun<br />
folgen<strong>de</strong>n Bits ist <strong>de</strong>r Zugriffsschutz gespeichert<br />
2 Anzahl <strong>de</strong>r Hardlinks auf die Datei<br />
rar12345 Datei-Eigentümer<br />
stud Zuordnung zu einer Gruppe (i.d.R. die Login-group)<br />
63 Größe <strong>de</strong>r Datei in Bytes<br />
Sep 9 08:58 Datum <strong>de</strong>r letzten Modifikation<br />
franz Dateiname<br />
In obigem Directory-Listing sind zwei Beson<strong>de</strong>rheiten zu sehen. Die Datei ina ist ein sog. Hardlink auf<br />
die Datei franz (erkennbar an <strong>de</strong>r Zahl 2 in <strong>de</strong>r Spalte <strong>de</strong>r Hardlinks) und die Datei sara ist ein sog.<br />
Symbolic Link auf die Datei else.<br />
Als Hardlink versteht man einen Verweis <strong>von</strong> einer Datei auf eine an<strong>de</strong>re Datei. Die Dateinamen können<br />
unterschiedlich sein, <strong>de</strong>r Inhalt dagegen ist i<strong>de</strong>ntisch. Hardlinks können nur zwischen Dateien <strong>de</strong>s gleichen<br />
Dateisystems geschlossen wer<strong>de</strong>n. Zeigt kein Verweis auf eine Datei, so ist die Anzahl <strong>de</strong>r Hardlinks<br />
dieser Datei gleich 1. Hardlinks wer<strong>de</strong>n mit <strong>de</strong>m Kommando ln vorhan<strong>de</strong>ne_Datei neue_Datei<br />
angelegt.<br />
Bei Symbolic Links erscheint als Typkennzeichnung ein l im Directory-Listing (siehe oben). Mit Symbolic<br />
Links können sowohl Verweise zu Dateien als auch zu Directories geschlossen wer<strong>de</strong>n. Im Gegensatz zu<br />
<strong>de</strong>n Hardlinks können Symbolic Links auch über die Grenzen <strong>von</strong> Filesystemen hinausreichen. Symbolic<br />
Links wer<strong>de</strong>n erzeugt mit <strong>de</strong>m Kommando ln -s vorhan<strong>de</strong>ne_Datei neue_Datei.<br />
Dateinamen dürfen unter <strong>Unix</strong> aus maximal 256 Zeichen bestehen. Es sind grundsätzlich alle Zeichen<br />
erlaubt auch Son<strong>de</strong>r- und Kontrollzeichen. Auf Dateinamen mit nicht darstellbaren Zeichen sollte allerdings<br />
verzichtet wer<strong>de</strong>n.
4. Das Dateisystem 33<br />
Beispiele für gültige Dateinamen:<br />
’1 2 345’<br />
’Heute ist Dienstag’<br />
’X’<br />
’g*:8’<br />
’ha.ha.ha.ha’<br />
’programm’<br />
In obiger Liste ist <strong>de</strong>r Dateiname jeweils <strong>von</strong> Hochkommas eingeschlossen. <strong>Eine</strong> Aufteilung in Dateiname<br />
und Dateiextension, wie unter DOS, gibt es nicht.<br />
Achtung: Auch bei Dateinamen gilt: UNIX unterschei<strong>de</strong>t Gross- und Kleinschreibung !!!<br />
Die freie Wahl <strong>von</strong> Dateinamen hat natürlich dort seine Grenzen, wo für bestimmte Zwecke Dateinamen-<br />
Konventionen bestehen. So wer<strong>de</strong>n z.B. C-Quelldateien mit <strong>de</strong>r Endung .c gekennzeichnet, Fortran-<br />
Quellen en<strong>de</strong>n mit .f und Objektdateien mit .o. Ferner gibt es unter <strong>Unix</strong> eine Reihe <strong>von</strong> Dateien, die<br />
mit einem Punkt beginnen (sog. Dot-files). Diese Dot-files wer<strong>de</strong>n auch ”hid<strong>de</strong>n files” genannt und fungieren<br />
primär als setup-files (.login, .cshrc). Sie sind mit <strong>de</strong>m Kommando ls -a aufzulisten.<br />
Der Datei- bzw. Directory-Name dokumentiert nur <strong>de</strong>n letzten Teil in <strong>de</strong>r Bezeichnung <strong>de</strong>r kompletten<br />
Hierarchie im Dateisystem. Strenggenommen setzt sich ein Datei- bzw. Directory-Name auch aus <strong>de</strong>n<br />
davor befindlichen Verzeichnisnamen zusammen. Hat sich z.B. <strong>de</strong>r Benutzer rar12345 eingeloggt und<br />
danach mit <strong>de</strong>m Kommando cd briefe in das Unterverzeichnis briefe gesetzt, so lautet die komplette<br />
Bezeichnung <strong>de</strong>s Unterverzeichnisses /home/rar12345/briefe. Auf Dateien, die sich in diesem<br />
Unterverzeichnis befin<strong>de</strong>n, kann <strong>de</strong>r Benutzer nun entwe<strong>de</strong>r mit <strong>de</strong>r absoluten o<strong>de</strong>r relativen Pfadangabe<br />
Bezug nehmen.<br />
rechner> ls -l /home/rar12345/briefe/einladung.txt<br />
rechner> ls -l ./einladung.txt<br />
rechner> ls -l einladung.txt<br />
absolute Referenz<br />
relative Referenz<br />
relative Referenz<br />
An dieser Stelle soll die mit <strong>de</strong>n bereits besprochenen Spezialzeichen zusammenhängen<strong>de</strong> Dateinamen-<br />
Expandierung dokumentiert wer<strong>de</strong>n. Als Ausgangspunkt wird ein Unterverzeichnis namens text verwen<strong>de</strong>t<br />
mit <strong>de</strong>n darin befindlichen Dateien alfred, berta, c1, c2, c3, christa, g*:8 und zorro.<br />
Zum Auflisten wird das Kommando ls -l verwen<strong>de</strong>t.<br />
rechner> ls -l c*<br />
rechner> ls -l ??r*<br />
rechner> ls -l ?????<br />
rechner> ls -l [ab]*<br />
rechner> ls -l c[13]*<br />
rechner> ls -l [c-z]*<br />
rechner> ls -l ?[e-h]*<br />
rechner> ls -l ?[*]*<br />
rechner> ls -l ?\**<br />
rechner> ls -l ~<br />
rechner> ls -l *{red,sta}<br />
rechner> ls -l .<br />
rechner> ls -l ..<br />
alle Dateien, die mit c beginnen<br />
alle Dateien, die als dritten Buchstaben ein r besitzen<br />
alle Dateien, die genau aus 5 Zeichen bestehen<br />
alle Dateien, die mit a o<strong>de</strong>r b beginnen<br />
die Dateien c1 und c3<br />
alle Dateien, <strong>de</strong>ren erster Buchstabe zwischen c und z liegt<br />
alle Dateien, <strong>de</strong>ren zweiter Buchstabe zwischen e und h<br />
liegt<br />
alle Dateien, <strong>de</strong>ren zweites Zeichen ein * ist<br />
alle Dateien, <strong>de</strong>ren zweites Zeichen ein * ist<br />
alle Dateien im HOME-Directory<br />
alle Dateien, die mit <strong>de</strong>n strings red und sta en<strong>de</strong>n<br />
alle Dateien im aktuellen Directory<br />
alle Dateien im übergeordneten Directory
4. Das Dateisystem 34<br />
4.2. Kommandos mit Dateien<br />
Das Kommando ls -l zum Auflisten <strong>von</strong> Inhaltsverzeichnissen haben wir bereits kennengelernt. Im folgen<strong>de</strong>n<br />
sollen die wichtigsten Kommandos besprochen wer<strong>de</strong>n, die in Verbindung mit Dateien Verwendung<br />
fin<strong>de</strong>n.<br />
Inhalt einer Datei am Bildschirm ausgeben<br />
cat [ -options ] [ filename ... ]<br />
rechner> cat .mailrc<br />
rechner> cat -n .mailrc<br />
zeigt Inhalt <strong>de</strong>r Datei .mailrc<br />
zeigt Inhalt <strong>de</strong>r Datei mit Zeilennummerierung<br />
Die Ausgabe einer Datei auf <strong>de</strong>m Bildschirm ist natürlich nur dann sinnvoll, wenn die Datei auch lesbaren<br />
Text enthält (ASCII-Datei).<br />
Inhalt einer Datei seitenweise am Bildschirm ausgeben<br />
more [ -options ] [ filename ... ]<br />
rechner> more .mailrc<br />
zeigt Inhalt <strong>de</strong>r Datei .mailrc seitenweise<br />
rechner> more +/record .mailrc beginnt die Auflistung 2 Zeilen vor <strong>de</strong>m<br />
Muster record<br />
rechner> more +15 .mailrc beginnt die Auflistung ab Zeile 15<br />
more ist ein mächtiges Kommando zum Auflisten <strong>von</strong> Textdateien. Während <strong>de</strong>s Auflistens kann vorwärts<br />
und rückwärts ( b) geblättert wer<strong>de</strong>n, es können Textmuster gesucht und Leerzeilen komprimiert<br />
wer<strong>de</strong>n. Durch Betätigung <strong>de</strong>r Leertaste wird immer um eine Seite bzw. Bildschirm weitergeblättert. Die<br />
Auflistung kann durch Eingabe <strong>von</strong> q vorzeitig abgebrochen wer<strong>de</strong>n.<br />
Ausgabe <strong>de</strong>s Dateianfangs<br />
head [ -n ] [ filename ... ]<br />
rechner> head .mailrc<br />
rechner> head -20 .mailrc<br />
zeigt die ersten 10 Zeilen <strong>de</strong>r Datei .mailrc<br />
zeigt die ersten 20 Zeilen <strong>de</strong>r Datei .mailrc<br />
Ausgabe <strong>de</strong>s Dateien<strong>de</strong>s<br />
tail [ -options ] [ filename ... ]<br />
rechner> tail .mailrc<br />
rechner> tail -3 .mailrc<br />
rechner> tail +7 .mailrc<br />
zeigt die letzten 10 Zeilen <strong>de</strong>r Datei .mailrc<br />
zeigt die letzten 3 Zeilen <strong>de</strong>r Datei .mailrc<br />
zeigt ab Zeile 7 <strong>de</strong>n gesamten Inhalt<br />
Zählen <strong>de</strong>s Inhalts einer Datei<br />
wc [ -clw ] [ filename ... ]<br />
rechner> wc .mailrc<br />
rechner> wc -l .mailrc<br />
gibt die Anzahl <strong>de</strong>r Zeilen, Wörter und Zeichen <strong>de</strong>r<br />
Datei .mailrc aus<br />
gibt die Anzahl <strong>de</strong>r Zeilen <strong>de</strong>r Datei .mailrc aus
4. Das Dateisystem 35<br />
Extrahieren <strong>von</strong> Zeilen mit bestimmten Textmustern<br />
grep [ -options ] [ pattern ... ] [ filename ... ]<br />
egrep [ -options ] [ pattern ... ] [ filename ... ]<br />
rechner> grep lia .cshrc<br />
rechner> grep path .cshrc<br />
rechner> grep ’^#’ .cshrc<br />
rechner> grep ’#$’ .cshrc<br />
rechner> grep ’^##$’ .cshrc<br />
alle Zeilen mit <strong>de</strong>m Muster lia<br />
alle Zeilen mit <strong>de</strong>m Muster path<br />
alle Zeilen, die mit <strong>de</strong>m Zeichen # beginnen<br />
alle Zeilen, die mit <strong>de</strong>m Zeichen # en<strong>de</strong>n<br />
alle Zeilen, die genau aus <strong>de</strong>n bei<strong>de</strong>n Zeichen<br />
## bestehen<br />
rechner> grep ’^.[fn]’ .cshrc<br />
alle Zeilen, die mit einem beliebigen Zeichen beginnen und <strong>de</strong>ren zweites Zeichen<br />
ein f o<strong>de</strong>r n ist<br />
rechner> grep ’^.[a-g]’ .cshrc<br />
alle Zeilen, die mit einem beliebigen Zeichen beginnen und <strong>de</strong>ren zweites Zeichen<br />
im Bereich a - g liegt<br />
rechner> egrep ’HOME|LINUX’ .cshrc<br />
alle Zeilen die <strong>de</strong>n string HOME o<strong>de</strong>r LINUX enthalten<br />
rechner> egrep ’e+l+’ .cshrc<br />
alle Zeilen, in <strong>de</strong>nen <strong>de</strong>r string el vorkommt, wobei sowohl das e als auch das<br />
l mehrfach hintereinan<strong>de</strong>r vorkommen können<br />
grep und egrep sind wichtige Werkzeuge, um aus ASCII-Dateien Zeilen mit beliebigen Textmustern<br />
herauszufiltern. Reguläre Ausdrücke wer<strong>de</strong>n dabei in einfachen Hochkommas eingeschlossen. Der Unterschied<br />
zwischen bei<strong>de</strong>n Kommandos liegt darin, dass grep nur eine eingeschränkte Auswahl an regulären<br />
Ausdrücken zulässt.<br />
Extrahieren <strong>von</strong> Spalten aus Dateien<br />
cut [ -options ] [ filename ... ]<br />
rechner> cut -b 1-2 .mailrc<br />
rechner> cut -f 1 -d’ ’ .mailrc<br />
gibt die ersten bei<strong>de</strong>n Bytes je<strong>de</strong>r Zeile <strong>de</strong>r<br />
Datei .mailrc aus<br />
gibt das erste Feld je<strong>de</strong>r Zeile <strong>de</strong>r Datei<br />
.mailrc aus<br />
Je nach Option können mit cut Bytes, Zeichen o<strong>de</strong>r Fel<strong>de</strong>r aus einer Datei ”ausgeschnitten” wer<strong>de</strong>n. Bei<br />
Verwendung <strong>von</strong> -f sollte immer mit <strong>de</strong>r Option -d das entsprechen<strong>de</strong> Feldtrennzeichen <strong>de</strong>finiert wer<strong>de</strong>n.<br />
In obigem Beispiel wird das Leerzeichen als Feldtrennzeichen angegeben.<br />
Dateien kopieren<br />
cp [ -fip ] file_old file_new<br />
cp [ -fip ] file directory<br />
Sollen die Zugriffsrechte <strong>de</strong>r ursprünglichen Datei beibehalten wer<strong>de</strong>n, so ist dies mit <strong>de</strong>r Option -p anzugeben.<br />
-f bewirkt ein unbedingtes Kopieren und -i gibt vor <strong>de</strong>m Kopieren eine Warnung aus, falls die<br />
Zieldatei bereits existiert (Schutz vor Überschreiben).
4. Das Dateisystem 36<br />
Dateien umbenennen<br />
mv [ -fi ] file_old file_new<br />
mv [ -fi ] file directory<br />
Im zweiten Fall wird die Datei in das bereits vorhan<strong>de</strong>ne Directory verschoben.<br />
Dateien löschen<br />
rm [ -fir ] file ...<br />
Um unbeabsichtigte Löschoperationen zu vermei<strong>de</strong>n, ist es sinnvoll, das rm-Kommando mit <strong>de</strong>r Option<br />
-i aufzurufen. Dies ist beson<strong>de</strong>rs dann zu empfehlen, wenn beim Löschen Metazeichen zur Dateinamen-<br />
Expandierung verwen<strong>de</strong>t wer<strong>de</strong>n.<br />
Dateien suchen<br />
find pathname expression<br />
rechner> find . -name christa -print<br />
Ausgehend vom aktuellen Verzeichnis wird die Datei christa gesucht.<br />
rechner> find . -name c\* -print<br />
Ausgehend vom aktuellen Verzeichnis wer<strong>de</strong>n alle Dateien und Directories<br />
gesucht, die mit c beginnen.<br />
rechner> find /usr -name \?\?r\* -print<br />
Das gesamte Verzeichnis /usr wird nach Dateien und Directories durchsucht,<br />
die im Namen als drittes Zeichen ein r besitzen.<br />
rechner> find . -name christa -exec rm {} \;<br />
Wenn die Datei christa gefun<strong>de</strong>n wird, wird sie durch das rm-Kommando<br />
gelöscht.<br />
Das Kommando find durchsucht ausgehend vom angegebenen Directory rekursiv alle darunter liegen<strong>de</strong>n<br />
Verzeichnisse nach Dateien, die <strong>de</strong>n gewünschten Kriterien entsprechen. Son<strong>de</strong>rzeichen wie [ ] ?<br />
* ( ) müssen mit <strong>de</strong>m Zeichen \ maskiert wer<strong>de</strong>n.<br />
Weitere nützliche Kommandos<br />
rechner> diff file1 file2<br />
rechner> sort [ -options ] file<br />
rechner> quota -v<br />
rechner> du -sk *<br />
rechner> du -sk .??*<br />
rechner> file filename<br />
vergleicht zwei Dateien<br />
sortiert eine Datei<br />
gibt die aktuelle Plattenplatzbelegung aus<br />
gibt die Größe <strong>von</strong> Dateien und Directories<br />
aus<br />
gibt die Größe <strong>von</strong> hid<strong>de</strong>n Dateien und Directories<br />
aus<br />
gibt <strong>de</strong>n Typ einer Datei aus<br />
Da man ja unter <strong>Unix</strong>/<strong>Linux</strong> <strong>von</strong> <strong>de</strong>n Dateinamen nicht auf <strong>de</strong>n Inhalt <strong>de</strong>r Dateien schließen kann, ist ein<br />
Programm wie file, das <strong>de</strong>n Datei-Inhalt analysiert, sehr hilfreich. Je nach<strong>de</strong>m, <strong>von</strong> welcher Art <strong>de</strong>r Inhalt<br />
ist, wer<strong>de</strong>n z.B. Meldungen wie ”ASCII-file”, ”Postscript-file” usw. ausgegeben.
4. Das Dateisystem 37<br />
4.3. Kommandos mit Directories<br />
Directories sind im Grun<strong>de</strong> Dateien, die die Informationen über die in ihnen vorhan<strong>de</strong>nen Dateien und<br />
Directories enthalten.<br />
In Directories wechseln<br />
cd dirname<br />
rechner> cd text<br />
rechner> cd /tmp<br />
rechner> cd ..<br />
rechner> cd<br />
Wechsel in das Verzeichnis text<br />
Wechsel in das Verzeichnis /tmp<br />
<strong>von</strong> <strong>de</strong>r aktuellen Position ein Directory nach oben<br />
zurück ins HOME-Verzeichnis wechseln<br />
Beim Verzeichniswechsel kann sowohl die absolute als auch die relative Directory-Notation verwen<strong>de</strong>t wer<strong>de</strong>n.<br />
Aktuelles Directory anzeigen<br />
pwd<br />
Directories erzeugen<br />
mkdir [ -options ] dirname ...<br />
rechner> mkdir text<br />
im aktuellen Verzeichnis wird das Directory text angelegt<br />
Directories kopieren<br />
cp -r [ -ip ] quell_directory<br />
ziel_directory<br />
rechner> cp -r text text2<br />
rekursives Kopieren <strong>de</strong>s Directories text nach<br />
text2<br />
Das in obigem Beispiel erwähnte Ziel-Verzeichnis text2 sollte vor <strong>de</strong>m Kopieren noch nicht existieren.<br />
Falls dies doch <strong>de</strong>r Fall ist, wird das komplette Quell-Verzeichnis text unter <strong>de</strong>m Directory text2 angelegt.<br />
Beim Kopieren ganzer Verzeichnisse muss auf symbolic links geachtet wer<strong>de</strong>n. Symbolic links wer<strong>de</strong>n<br />
beim Kopieren aufgelöst und die entsprechen<strong>de</strong>n Dateien sind dann mehrfach vorhan<strong>de</strong>n. Soll daher die<br />
Link-Struktur beibehalten wer<strong>de</strong>n, ist folgen<strong>de</strong> Vorgehensweise besser.<br />
mkdir ziel_directory<br />
cd quell_directory<br />
tar -cvf - . | ( cd ziel_directory; tar -xpvf - )<br />
Das Programm tar ist ein Tool zum Sichern <strong>von</strong> Dateien und Verzeichnissen in einer Archiv-Datei. Dabei<br />
wird die originale Struktur beibehalten.<br />
Directories umbenennen<br />
mv [ -options ] old_directory<br />
new_directory<br />
Das Umbenennen <strong>von</strong> Directories erfolgt auf die gleiche Weise wie das Umbenennen <strong>von</strong> Dateien.
4. Das Dateisystem 38<br />
Directories löschen<br />
rmdir dirname ...<br />
rm -r dirname ...<br />
löscht leeres Directory<br />
löscht rekursiv <strong>de</strong>n ganzen Verzeichnis-Baum<br />
Auch beim rm-Kommando können die Zeichen zur Dateinamens-Expandierung verwen<strong>de</strong>t wer<strong>de</strong>n (aber<br />
Vorsicht bei <strong>de</strong>r Verwendung <strong>von</strong> *).<br />
4.4. Dateischutz<br />
Der Zugriff auf Dateien und Directories wird über die sog. accessrights bzw. Filemodi geregelt. Über<br />
die aktuellen accessrights einer Datei o<strong>de</strong>r eines Directories gibt das Kommando ls -l Auskunft (z.B.<br />
-rw-r--r--).<br />
Es gibt bzgl. je<strong>de</strong>r Datei bzw. je<strong>de</strong>s Directories drei Benutzergruppen:<br />
<strong>de</strong>r Eigentümer ( user=u ), die Gruppe ( group=g ) und alle an<strong>de</strong>ren ( other=o ).<br />
Für je<strong>de</strong> Benutzergruppe kann bestimmt wer<strong>de</strong>n, ob sie die Datei<br />
lesen ( read=r ), schreiben ( write=w ), ausführen ( execute=x ) darf.<br />
<strong>Eine</strong> Protection-mask kann z.B. so aussehen:<br />
-rw-|r--|r-- entspricht binär 110|100|100 entspricht oktal 644<br />
Die ersten drei Bits symbolisieren <strong>de</strong>n Zugriff für <strong>de</strong>n Datei-Eigentümer, die nächsten drei Bits <strong>de</strong>n Zugriff<br />
für die Gruppe und die letzten drei Bits <strong>de</strong>n Zugriff für alle an<strong>de</strong>ren. Bei obigem Beispiel darf <strong>de</strong>r Datei-<br />
Eigentümer die Datei lesen und schreiben, die Gruppe und alle an<strong>de</strong>ren besitzen nur lesen<strong>de</strong>n Zugriff. Das<br />
erste Bit <strong>de</strong>r Filemodi bezeichnet die Art <strong>de</strong>r Datei (d = Directory, - = normales file, l = symbolischer Link,<br />
b,c = spezielle Gerätedateien, p = named pipe).<br />
Standardmäßig wird die Protection-mask neu erstellter Dateien komplementär zum sog. umask-Wert gebil<strong>de</strong>t.<br />
Mit <strong>de</strong>m Kommando umask kann <strong>de</strong>r aktuelle umask-Wert angezeigt o<strong>de</strong>r auch verän<strong>de</strong>rt wer<strong>de</strong>n. Das<br />
x-Bit bleibt in <strong>de</strong>r Regel vom eingestellten umask-Wert unbeeinflusst. Ein umask-Wert <strong>von</strong> 022 bewirkt<br />
beispielsweise eine Protection-mask <strong>von</strong> 644 bzw. -rw-r--r--. Das x-Bit wird nur dann automatisch<br />
gesetzt, wenn die Datei durch eine Kompilation gebil<strong>de</strong>t wur<strong>de</strong>.<br />
Än<strong>de</strong>rn <strong>de</strong>r Zugriffsrechte<br />
chmod [ -options ] mo<strong>de</strong><br />
filename<br />
Die Modifikation <strong>de</strong>r Zugriffsrechte erfolgt mit <strong>de</strong>m Kommando chmod. Dabei kann <strong>de</strong>r einzustellen<strong>de</strong><br />
mo<strong>de</strong> entwe<strong>de</strong>r oktal (z.B. 775) o<strong>de</strong>r symbolisch (u=rwx,g=r) angegeben wer<strong>de</strong>n.<br />
rechner> chmod 777 berta<br />
rechner> chmod 640 berta<br />
rechner> chmod g+x berta<br />
rechner> chmod g+w,o+x berta<br />
rechner> chmod g-wx berta<br />
rechner> chmod u=rw,go= berta<br />
Protection-mask: -rwxrwxrwx<br />
Protection-mask: -rw-r-----<br />
Protection-mask: -rw-r-x---<br />
Protection-mask: -rw-rwx--x<br />
Protection-mask: -rw-r----x<br />
Protection-mask: -rw-------
4. Das Dateisystem 39<br />
Bei <strong>de</strong>r symbolischen Einstellung <strong>de</strong>r filemo<strong>de</strong>s be<strong>de</strong>uten die Zeichen + Setzen <strong>von</strong> zusätzlichen Rechten,<br />
- Entzug <strong>von</strong> Rechten und = absolutes Setzen <strong>von</strong> Rechten.<br />
Preisfrage: Was passiert, wenn ein Benutzer einer Datei, die ihm gehört, sämtliche Rechte entzieht?<br />
Bei Directories besitzen die Protection-bits eine an<strong>de</strong>re Be<strong>de</strong>utung. Sie regeln hier <strong>de</strong>n Zugang über das<br />
Kommando cd sowie die Möglichkeit, Dateien zu erstellen bzw. zu löschen. Folgen<strong>de</strong> Übersicht soll dies<br />
ver<strong>de</strong>utlichen.<br />
drwxrwxrwx<br />
drwxr-xr-x<br />
drwxr--r--<br />
drwx--x--x<br />
drwx------<br />
ls, cd und file create/<strong>de</strong>lete für alle Benutzer möglich<br />
nur ls und cd möglich für alle Benutzer<br />
nur ls möglich für alle Benutzer<br />
nur cd möglich für alle Benutzer<br />
nur noch Rechte für <strong>de</strong>n Eigentümer <strong>de</strong>s Directories<br />
Durch die Zugriffsrechte, die für ein Directory gesetzt wer<strong>de</strong>n, können auch die darunterliegen<strong>de</strong>n Verzeichnisse<br />
geschützt wer<strong>de</strong>n.<br />
Neben <strong>de</strong>n oben beschriebenen Zugriffsregelungen gibt es noch drei weitere Ausprägungen:<br />
-rwsr-xr-x set user id bit (user-s-bit, oktal 4000)<br />
wenn dieses Programm aufgerufen wird, wird nur für die Zeit <strong>de</strong>r<br />
Ausführung die user-id <strong>de</strong>s file-owners übernommen<br />
-rwxr-sr-x set group id bit (group-s-bit, oktal 2000)<br />
wenn dieses Programm aufgerufen wird, wird nur für die Zeit <strong>de</strong>r<br />
Ausführung die group-id <strong>de</strong>s file-owners übernommen<br />
-rwxrwxrwT sticky bit (wirkt global, oktal 1000)<br />
Bei Programmen bleibt das aufgerufene Programm nach Beendigung<br />
im swap-Bereich (höhere Performance).<br />
Bei gemeinsam genutzten Directories regelt es <strong>de</strong>n Zugriff auf<br />
files <strong>von</strong> verschie<strong>de</strong>nen Benutzern.<br />
Zugriffsregelung über Access Control Lists<br />
Die oben besprochenen Zugriffsmechanismen funktionieren auf allen <strong>Unix</strong>-Systemen gleich. Einige <strong>Unix</strong>-<br />
Systeme bieten darüberhinaus weitere Möglichkeiten, <strong>de</strong>n Zugriffsschutz noch differenzierter zu gestalten.<br />
Erreicht wird dies durch sog. Zugriffslisten (ACL=Access Control List). In solchen Listen kann z.B. <strong>de</strong>m<br />
Benutzer A lesen<strong>de</strong>r, <strong>de</strong>m Benutzer B lesen<strong>de</strong>r und schreiben<strong>de</strong>r und <strong>de</strong>m Benutzer C ausführen<strong>de</strong>r Zugriff<br />
auf eine Datei gewährt wer<strong>de</strong>n. Unter Sun Solaris gibt es für die Verwaltung solcher ACLs die bei<strong>de</strong>n<br />
Kommandos setfacl und getfacl. Mit setfacl können ACLs <strong>de</strong>finiert wer<strong>de</strong>n, mit getfacl<br />
können die gesetzten Zugriffsrechte ausgelesen wer<strong>de</strong>n.<br />
-rw------- 1 otto stud 9 Mar 20 09:54 schatzkarte<br />
Benutzer otto hat eine Datei namens schatzkarte angelegt, die nur für ihn selbst les- und schreibbar<br />
ist. otto möchte nun nur <strong>de</strong>m Benutzer rudi Leserechte auf diese Datei geben.<br />
rechner> setfacl -m user:rudi:r--,mask:r-- schatzkarte<br />
Das Kommando ls -l schatzkarte liefert nun folgen<strong>de</strong>n<strong>de</strong>n Output. Die Existenz einer ACL wird<br />
durch ein + Zeichen unmittelbar hinter <strong>de</strong>n File-modi gekennzeichnet.<br />
-rw-------+ 1 otto stud 15 Mar 20 10:09 schatzkarte
4. Das Dateisystem 40<br />
Mit <strong>de</strong>m Kommando getfacl schatzkarte kann die gesamte ACL dieser Datei ausgegeben wer<strong>de</strong>n.<br />
# file: schatzkarte<br />
# owner: otto<br />
# group: stud<br />
user::rwuser:rudi:r--<br />
group::---<br />
mask:r--<br />
other:---<br />
#effective:r--<br />
#effective:---<br />
<strong>Eine</strong> nachträgliche Modifikation <strong>de</strong>r Zugriffsrechte mit <strong>de</strong>m Kommando chmod sollte nicht erfolgen, da<br />
dadurch auch die ACLs verän<strong>de</strong>rt wer<strong>de</strong>n.<br />
Lei<strong>de</strong>r ist <strong>de</strong>r Gebrauch <strong>von</strong> ACLs <strong>de</strong>rzeit noch etwas eingeschränkt. Unter <strong>Linux</strong> können zwar keine ACLs<br />
gesetzt wer<strong>de</strong>n, ACLs, die auf Sun Solaris <strong>de</strong>finiert wur<strong>de</strong>n, sind aber auch auf <strong>Linux</strong> wirksam (ls -l<br />
zeigt sie allerdings nicht an). Achtung: Beim sicheren Kopieren mit scp gehen alle ACLs verloren!<br />
Access Control Lists bieten für <strong>de</strong>n Benutzer eine komfortable Möglichkeit, <strong>de</strong>n Zugriffsschutz auf eigene<br />
Datenbestän<strong>de</strong> differenziert zu regeln ohne auf die Intervention eines Systemadministrators angewiesen zu<br />
sein.<br />
4.5. Drucken <strong>von</strong> Dateien<br />
Unter <strong>Unix</strong>/<strong>Linux</strong> sind <strong>de</strong>rzeit drei verschie<strong>de</strong>ne Drucksysteme verbreitet: BSD-basierte Drucksysteme,<br />
System-V-basierte Drucksysteme und Drucksysteme, die auf cups aufbauen. Der Ausdruck <strong>von</strong> Dateien<br />
kann entwe<strong>de</strong>r kommandoorientiert o<strong>de</strong>r über Anwendungen erfolgen. Beim kommandoorientierten Verfahren<br />
haben sich sowohl unter <strong>Unix</strong> als auch unter <strong>Linux</strong> die System-V-Kommandos durchgesetzt. Prinzipiell<br />
hat ein Ausdrucken an <strong>de</strong>r Uni Regensburg nur bei einem positiven Drucker-Kontostand Erfolg.<br />
lp file<br />
lp -d RIO_FIERY file<br />
lpstat -o printqueue<br />
lpstat -s<br />
lpstat -p -l<br />
cancel printjob-nr<br />
Ausdruck auf <strong>de</strong>fault Drucker<br />
Ausdruck auf die Queue RIO_FIERY (Farbdrucker)<br />
Anzeige aller Jobs in <strong>de</strong>r genannten printqueue<br />
Anzeige aller installierten Drucker-Queues<br />
Ausführliche Anzeige aller Drucker-Queues<br />
Eliminieren eines Printjobs<br />
Ohne Angabe einer speziellen Drucker-Queue wird <strong>de</strong>r Ausdruck auf <strong>de</strong>n installierten Standard-Drucker<br />
ausgegeben. Im <strong>Unix</strong>/<strong>Linux</strong>-Pool ist dies <strong>de</strong>r dort aufgestellte Drucker. Achtung: Bei einem remote Login<br />
<strong>von</strong> einem Windows-PC wird ein unter <strong>Unix</strong> abgesetzter Druckauftrag nicht auf <strong>de</strong>n Drucker im Windows-<br />
Pool umgeleitet!<br />
a2ps ist ein nützliches Hilfsprogramm, um ASCII-Dateien für <strong>de</strong>n Ausdruck vorzubereiten. Damit können<br />
auch Manual-Pages platzsparend ausgedruckt wer<strong>de</strong>n ( man item | a2ps -m | lp ).
5. Editoren<br />
Editoren sind Programme, die die Eingabe <strong>von</strong> Daten in Dateien ermöglichen. Die hier beschriebenen<br />
Editoren sind Text-Editoren für das Erstellen <strong>von</strong> ASCII/ANSI-Dateien, keine Textverarbeitungssysteme.<br />
Wie unter an<strong>de</strong>ren Betriebssystemen gibt es auch unter <strong>Unix</strong>/<strong>Linux</strong> eine Vielzahl verschie<strong>de</strong>ner Editoren.<br />
Manche Editoren können nur unter einer graphischen Benutzeroberfläche gestartet wer<strong>de</strong>n, an<strong>de</strong>re benötigen<br />
lediglich ein Kommando-Terminal. Aus <strong>de</strong>r Menge <strong>de</strong>r Editoren sollen hier nur die bei<strong>de</strong>n Editoren vi<br />
und emacs herausgegriffen wer<strong>de</strong>n.<br />
5.1. Der vi - Editor<br />
vi ist ein full-screen-Editor <strong>de</strong>r auf allen <strong>Unix</strong>/<strong>Linux</strong>-Systemen existiert und i<strong>de</strong>ntisch zu bedienen ist. Im<br />
vi sind die bei<strong>de</strong>n Modi command und insert zu unterschei<strong>de</strong>n. Im command-Modus können Positionier-,<br />
Lösch-, Such- und viele an<strong>de</strong>re Operationen vorgenommen wer<strong>de</strong>n. Das Editieren <strong>von</strong> Text ist nur im insert-<br />
Modus möglich. Das Umschalten vom insert- in <strong>de</strong>n command-Modus erfolgt immer mit <strong>de</strong>r ESC-Taste.<br />
Nach Aufruf <strong>de</strong>s vi befin<strong>de</strong>t man sich im command-Modus.<br />
Abbildung 5.1.: Terminal nach Aufruf <strong>von</strong> vi einladung
5. Editoren 42<br />
Nach <strong>de</strong>m Start <strong>de</strong>s vi ist grundsätzlich <strong>de</strong>r command-mo<strong>de</strong> <strong>de</strong>s Editors eingestellt. Für <strong>de</strong>n Aufruf <strong>de</strong>s<br />
Editors gibt es noch an<strong>de</strong>re Optionen.<br />
Aufruf-Varianten <strong>de</strong>s vi<br />
vi filename<br />
Editieren <strong>de</strong>r Datei filename<br />
vi +18 filename Editor positioniert gleich auf Zeile 18<br />
vi +/muster filename Editor positioniert gleich auf Zeile mit muster<br />
vi -r filename Wie<strong>de</strong>rherstellen <strong>de</strong>r Datei nach Systemabsturz<br />
view filename<br />
öffnet die Datei im read-only-mo<strong>de</strong><br />
Kommandos zum Umschalten in <strong>de</strong>n insert-Modus<br />
a<br />
i<br />
A<br />
I<br />
o<br />
O<br />
Einfügen nach <strong>de</strong>m Cursor<br />
Einfügen vor <strong>de</strong>m Cursor<br />
Einfügen am Zeilenen<strong>de</strong><br />
Einfügen am Zeilenanfang<br />
Einfügen einer neuen Zeile nach <strong>de</strong>r aktuellen Zeile<br />
Einfügen einer neuen Zeile vor <strong>de</strong>r aktuellen Zeile<br />
Positionieren <strong>de</strong>s Cursors und Scrolling im command-Modus<br />
h<br />
l<br />
j<br />
k<br />
w<br />
W<br />
b<br />
B<br />
e<br />
E<br />
ein Zeichen nach links<br />
ein Zeichen nach rechts<br />
eine Zeile nach unten<br />
eine Zeile nach oben<br />
zum nächsten Wort o<strong>de</strong>r Son<strong>de</strong>rzeichen<br />
zum nächsten Wort<br />
zum vorhergehen<strong>de</strong>n Wort o<strong>de</strong>r Son<strong>de</strong>rzeichen<br />
zum vorhergehen<strong>de</strong>n Wort<br />
zum En<strong>de</strong> <strong>de</strong>s aktuellen o<strong>de</strong>r nächsten Wortes o<strong>de</strong>r Son<strong>de</strong>rzeichens<br />
zum En<strong>de</strong> <strong>de</strong>s aktuellen o<strong>de</strong>r nächsten Wortes<br />
^ zum Anfang <strong>de</strong>r Zeile (erstes sichtbares Zeichen)<br />
0 zum Anfang <strong>de</strong>r Zeile (erstes Zeichen)<br />
$ zum En<strong>de</strong> <strong>de</strong>r Zeile<br />
) zum nächsten Satz<br />
( zum vorhergehen<strong>de</strong>n Satz<br />
} zum nächsten Absatz<br />
{ zum vorhergehen<strong>de</strong>n Absatz<br />
]] zum nächsten Abschnitt<br />
[[ zum vorhergehen<strong>de</strong>n Abschnitt<br />
G zum En<strong>de</strong> <strong>de</strong>r Datei<br />
1G zum Anfang <strong>de</strong>r Datei<br />
H zum Anfang <strong>de</strong>s Bildschirms<br />
M zur Mitte <strong>de</strong>s Bildschirms<br />
L zur letzten Zeile <strong>de</strong>s Bildschirms<br />
Mit <strong>de</strong>n Tastensequenzen f kann vorwärts, mit b kann rückwärts gescrollt wer<strong>de</strong>n.
5. Editoren 43<br />
Kommandos zum Löschen <strong>von</strong> Text<br />
x<br />
dw<br />
dd<br />
D<br />
d^<br />
dG<br />
löscht ein Zeichen unter <strong>de</strong>m Cursor<br />
löscht das aktuelle Wort<br />
löscht die ganze Zeile<br />
löscht <strong>de</strong>n Rest <strong>de</strong>r aktuellen Zeile<br />
löscht <strong>von</strong> <strong>de</strong>r Cursorposition bis zum Anfang <strong>de</strong>r Zeile<br />
löscht <strong>von</strong> <strong>de</strong>r Cursorposition bis zum Datei-En<strong>de</strong><br />
Been<strong>de</strong>n <strong>de</strong>s Editors<br />
:x Abspeichern <strong>de</strong>s eingegebenen Textes<br />
:wq Abspeichern <strong>de</strong>s eingegebenen Textes<br />
ZZ Abspeichern <strong>de</strong>s eingegebenen Textes<br />
:q Been<strong>de</strong>n ohne Abspeichern (falls Text nicht geän<strong>de</strong>rt wur<strong>de</strong>)<br />
:q! Been<strong>de</strong>n ohne Abspeichern<br />
Vor <strong>de</strong>m Verlassen <strong>de</strong>s Editors muss mit <strong>de</strong>r -Taste erst <strong>de</strong>r command-mo<strong>de</strong> eingestellt wer<strong>de</strong>n.<br />
Kommandos zum Suchen und Ersetzen<br />
/muster<br />
?muster<br />
n<br />
N<br />
c<br />
C<br />
s<br />
S<br />
Suche <strong>de</strong>s Textmusters vorwärts<br />
Suche <strong>de</strong>s Textmusters rückwärts<br />
Suche wie<strong>de</strong>rholen<br />
Suche in umgekehrter Richtung wie<strong>de</strong>rholen<br />
Ersetzen eines Objektes<br />
Ersetzen <strong>de</strong>s Rests <strong>de</strong>r Zeile<br />
Ersetzen <strong>de</strong>s aktuellen Zeichens<br />
Ersetzen <strong>de</strong>r ganzen Zeile<br />
Obige Ersetz-Operationen wer<strong>de</strong>n mit <strong>de</strong>r -Taste abgeschlossen. Für das Suchen nach Textmustern<br />
können auch reguläre Ausdrücke verwen<strong>de</strong>t wer<strong>de</strong>n.<br />
Für das Ersetzen <strong>von</strong> Textmustern gibt es noch eine an<strong>de</strong>re Möglichkeit.<br />
:s/muster_alt/muster_neu/<br />
:1,$s/muster_alt/muster_neu/g<br />
Ersetzen <strong>de</strong>s nächsten Textmusters<br />
Ersetzen aller Textmuster in <strong>de</strong>r Datei<br />
Objektbezogene Kommandos<br />
c Ersetze das Objekt durch neue Eingabe<br />
d Lösche Objekt<br />
y Sichere Objekt<br />
> Schiebe Objekt nach rechts<br />
< Schiebe Objekt nach links<br />
Als Objekte wer<strong>de</strong>n <strong>de</strong>finiert<br />
Wort (w,W,b,B)<br />
Satz ((,))<br />
Absatz ({,})<br />
Abschnitt (]],[[)<br />
Folge <strong>von</strong> Buchstaben o<strong>de</strong>r Ziffern ohne Zwischenraum<br />
Folge <strong>von</strong> Worten, die mit ’.’, ’!’ o<strong>de</strong>r ’?’ abgeschlossen wird<br />
nach je<strong>de</strong>r Leerzeile<br />
Begrenzung ist ein formfeed
5. Editoren 44<br />
Die in Klammern stehen<strong>de</strong>n Zeichen stellen die Charakterisierung <strong>de</strong>s Objektes dar, die in Verbindung mit<br />
<strong>de</strong>n objektbezogenen Kommandos benutzt wird.<br />
>} Schiebt <strong>de</strong>n nächsten Absatz eine Tab-Position nach rechts<br />
yw Sichert das aktuelle Wort<br />
cw Ersetzt das aktuelle Wort mit <strong>de</strong>m eingegebenen Text<br />
d) Löscht <strong>de</strong>n nächsten Satz (bis ’.’, ’!’, ’?’)<br />
Sonstige nützliche Kommandos<br />
. Wie<strong>de</strong>rholung <strong>de</strong>r letzten Aktion<br />
u undo <strong>de</strong>r letzten Än<strong>de</strong>rung<br />
U undo aller Än<strong>de</strong>rungen in <strong>de</strong>r aktuellen Zeile<br />
:r file Einfügen einer Datei an <strong>de</strong>r aktuellen Cursorposition<br />
:!cmd Ausführen eines shell-Kommandos<br />
vi-Einstellungen<br />
Durch das Setzen diverser Parameter kann die Arbeitsweise <strong>de</strong>s vi-Editors modifiziert wer<strong>de</strong>n. Diese Parameter<br />
können interaktiv während <strong>de</strong>s Editierens eingegeben wer<strong>de</strong>n. Sollen dagegen die Modifikationen bei<br />
je<strong>de</strong>m künftigen vi-Aufruf zur Verfügung stehen, so ist es erfor<strong>de</strong>rlich, die entsprechen<strong>de</strong>n Kommandos in<br />
<strong>de</strong>r Datei .exrc im eigenen HOME-Verzeichnis einzutragen. Bei je<strong>de</strong>m vi-Aufruf wer<strong>de</strong>n die Einstellungen<br />
in dieser Datei berücksichtigt.<br />
:set<br />
:set all<br />
:set eb<br />
:set ic<br />
:set sw=10<br />
:set number<br />
:set list<br />
Anzeige aller Optionen, die geän<strong>de</strong>rt wur<strong>de</strong>n<br />
Anzeige aller möglichen Optionen und <strong>de</strong>ren aktueller Werte<br />
Vor je<strong>de</strong>r Fehlermeldung ertönt die Bell<br />
Mustersuche case insensitive<br />
Setzt die Distanz für shift-Operationen<br />
Je<strong>de</strong> Zeile wird mit ihrer Zeilennummer angezeigt<br />
Zeigt auch nicht sichtbare Zeichen an<br />
Das Rücksetzen <strong>de</strong>r meisten Parameter erfolgt durch ein vorangestelltes no (z.B. mit :set nonumber<br />
verschwin<strong>de</strong>t eine vorher eingestellte Zeilennummerierung).<br />
5.2. Der emacs - Editor<br />
emacs ist ein fullscreen-Editor, <strong>de</strong>r auf <strong>de</strong>n meisten <strong>Unix</strong>/<strong>Linux</strong>-Rechnern als installierte public-domain-<br />
Software zur Verfügung steht. Oft wird dieser Editor auch gleich mit <strong>de</strong>m Betriebssystem ausgeliefert.<br />
Der emacs kommt in verschie<strong>de</strong>nen Varianten vor: emacs, epoch, xemacs, lemacs, jove. Allen Varianten<br />
gemeinsam ist die gleiche Funktionsbasis, die Handhabung ist aber etwas unterschiedlich.<br />
Wie beim vi arbeitet man auch beim emacs in einem Puffer-Bereich. Je nach file-Name (extension) schaltet<br />
<strong>de</strong>r emacs beim Aufruf in <strong>de</strong>n dafür geeigneten major-mo<strong>de</strong> um. Wird z.B. ein normales ASCII-file editiert,<br />
so wird im major-mo<strong>de</strong> text gearbeitet. Wird dagegen ein file mit <strong>de</strong>r Extension .tex geöffnet, so stellt<br />
emacs als major-mo<strong>de</strong> TeX ein. Der Sinn dieser unterschiedlichen Editor-mo<strong>de</strong>s liegt in <strong>de</strong>r Bereitstellung<br />
geeigneter Tasten-Sequenzen für das Editieren spezieller Texte (z.B. Formatierung bei C-Programmen).<br />
Der Funktionsumfang <strong>de</strong>s emacs-Editors geht weit über die Standardfunktionen eines Editors hinaus. So<br />
kann emacs als Mail-Tool, als File-Manager o<strong>de</strong>r als News-Rea<strong>de</strong>r verwen<strong>de</strong>t wer<strong>de</strong>n. Auch <strong>von</strong> manchen<br />
Programmier-Umgebungen wird emacs als Standard-Editor benutzt.
5. Editoren 45<br />
Aufruf <strong>de</strong>s Editors<br />
emacs<br />
emacs filename<br />
Aufruf ohne Dateiname<br />
Aufruf mit Dateiname<br />
Nach Aufruf <strong>de</strong>s Editors befin<strong>de</strong>t man sich grundsätzlich im insert-Modus, d.h. es kann sofort mit <strong>de</strong>m Editieren<br />
begonnen wer<strong>de</strong>n. Kommandos wer<strong>de</strong>n im emacs mit <strong>de</strong>n Tasten bzw. eingeleitet.<br />
Der - key kann auf verschie<strong>de</strong>nen <strong>Unix</strong>-Systemen auf unterschiedlichen Tasten gemappt sein (bei<br />
Sun Workstations ist <strong>de</strong>r - key die Taste mit <strong>de</strong>r Raute, bei PCs ist es die - Taste). Wird<br />
als Meta-Taste verwen<strong>de</strong>t, so ist nur ein ein einmaliges Betätigen <strong>de</strong>r Taste erfor<strong>de</strong>rlich (nicht die<br />
- Taste gedrückt halten !!!).<br />
Nach <strong>de</strong>m Start <strong>von</strong> emacs kann mit h T ein sehr schönes online-Tutorial aufgerufen wer<strong>de</strong>n.<br />
Abbildung 5.2.: Aufruf <strong>von</strong> emacs unter <strong>Linux</strong><br />
Positionieren <strong>de</strong>s Cursors und Scrolling<br />
f<br />
b<br />
n<br />
p<br />
Cursor ein Zeichen nach rechts<br />
Cursor ein Zeichen nach links<br />
Cursor eine Zeile nach unten<br />
Cursor eine Zeile nach oben<br />
Neben obigen Tastensequenzen können natürlich auch die Pfeiltasten zur Positionierung <strong>de</strong>s Cursors verwen<strong>de</strong>t<br />
wer<strong>de</strong>n. Auch <strong>de</strong>r Mauszeiger setzt <strong>de</strong>n Cursor an die gewünschte Position, falls auf einer graphischen<br />
Benutzeroberfläche gearbeitet wird.
5. Editoren 46<br />
f<br />
b<br />
a<br />
e<br />
<<br />
><br />
v<br />
v<br />
Cursor ein Wort nach rechts<br />
Cursor ein Wort nach links<br />
Cursor zum Zeilenanfang<br />
Cursor zum Zeilenen<strong>de</strong><br />
Cursor zum Dateianfang<br />
Cursor zum Dateien<strong>de</strong><br />
Bildschirm vorwärts blättern<br />
Bildschirm rückwärts blättern<br />
Löschen <strong>von</strong> Text<br />
<br />
d<br />
<br />
d<br />
k<br />
Löscht ein Zeichen links vom Cursor<br />
Löscht das aktuelle Zeichen<br />
Löscht ein Wort links vom Cursor<br />
Löscht ein Wort rechts vom Cursor<br />
Löscht bis zum En<strong>de</strong> <strong>de</strong>r Zeile<br />
Been<strong>de</strong>n <strong>de</strong>s Editors<br />
x c<br />
x s<br />
x w<br />
Verlassen <strong>de</strong>s Editors ohne Abspeichern<br />
Abspeichern <strong>de</strong>s Textes<br />
Abspeichern <strong>de</strong>s Textes<br />
Suchen und Ersetzen<br />
s Suche vorwärts<br />
r Suche rückwärts<br />
% Kommando zum Ersetzen eines Text-Strings<br />
Ersetzen <strong>de</strong>s Strings und weiter zum Nächsten<br />
n<br />
Weiter zum nächsten String ohne Ersetzen<br />
! Ersetzen aller Strings bis zum Dateien<strong>de</strong><br />
Sonstige nützliche Kommandos<br />
g<br />
x u<br />
x i<br />
x 1<br />
x b<br />
x b<br />
x tex-mo<strong>de</strong><br />
x text-mo<strong>de</strong><br />
Kommando abbrechen<br />
undo <strong>de</strong>r letzten Än<strong>de</strong>rung<br />
Einfügen einer Datei an <strong>de</strong>r aktuellen Cursorposition<br />
Alle Fenster ausser <strong>de</strong>m aktuellen löschen<br />
Wechsel zu einem an<strong>de</strong>ren Puffer<br />
Anzeige <strong>de</strong>r Buffer-List<br />
Einstellen <strong>de</strong>s TeX-Modus<br />
Einstellen <strong>de</strong>s Text-Modus<br />
Es ist möglich, über das file .emacs die Charakteristik <strong>de</strong>s Editors schon beim Aufruf festzulegen. Die<br />
Einstellungen in dieser Datei müssen allerdings in Lisp-Co<strong>de</strong> erfolgen.<br />
(<strong>de</strong>fun datum()<br />
"Tagesdatum in Text einfuegen"<br />
(interactive)<br />
(shell-command "date" t))<br />
(global-set-key "\C-cd" ’datum)
5. Editoren 47<br />
Obiges Beispiel <strong>de</strong>finiert die Lisp-Funktion datum. Mit dieser Funktion soll das aktuelle Tagesdatum<br />
an <strong>de</strong>r Cursorposition eingefügt wer<strong>de</strong>n. Die Funktion wird dann mit global-set-key an die Tastensequenz<br />
c d gebun<strong>de</strong>n. Falls man selbst kein Lisp-Spezialist ist, sollten für <strong>de</strong>rartige Einstellungen<br />
ausführliche emacs-Dokumentationen zu Rate gezogen wer<strong>de</strong>n.<br />
5.3. Sonstige Editoren<br />
vi und emacs stellen die unter <strong>Unix</strong>/<strong>Linux</strong> am weitesten verbreiteten Editoren dar. Daneben gibt es auf<br />
<strong>de</strong>n Systemen natürlich noch weitere Editoren. Auf Sun Solaris existiert ein Editor namens dtpad, auf<br />
<strong>Linux</strong>-Rechnern gibt es die Editoren gedit und kedit. Auf bei<strong>de</strong>n Systemen wie<strong>de</strong>rum kann man die<br />
Editoren nedit und xedit benutzen. Diese Editoren sind in <strong>de</strong>r Regel leicht menügesteuert zu bedienen<br />
und wer<strong>de</strong>n auch in <strong>de</strong>n Manual-Pages entsprechend dokumentiert. Wie bei <strong>de</strong>n Benutzeroberflächen ist die<br />
Wahl eines Editors einfach Geschmacksache.<br />
Abbildung 5.3.: Der Editor gedit unter <strong>Linux</strong>
6. Die csh/tcsh - Shell<br />
Unter einer shell wird allgemein ein Kommando-Interpreter verstan<strong>de</strong>n. Wie bei an<strong>de</strong>ren Betriebssystemen<br />
übernimmt dieser Interpreter die Verarbeitung <strong>de</strong>r eingegebenen Kommandos. Auf <strong>Unix</strong>/<strong>Linux</strong>-Systemen<br />
sind in <strong>de</strong>r Regel folgen<strong>de</strong> shells anzutreffen: sh (Bourne-shell), bash (Bourne-again-shell), ksh (Kornshell),<br />
jsh (Job-Control-shell), csh (c-shell) und tcsh ( eine Variante <strong>de</strong>r csh, die vorzugsweise an <strong>de</strong>r<br />
Uni Regensburg eingesetzt wird).<br />
Was ist <strong>de</strong>r Grund für diese Menge verschie<strong>de</strong>ner shell-Varianten? So wie bei <strong>de</strong>n Editoren besitzt auch<br />
je<strong>de</strong> shell gewisse Stärken, aber auch einige Schwächen. Es hängt vom gefor<strong>de</strong>rten Einsatz ab, welcher<br />
shell man <strong>de</strong>n Vorzug gibt. Es gibt shells, die sich eher für die interaktive Arbeit eignen (tcsh, bash),<br />
an<strong>de</strong>re sind dagegen für das Schreiben <strong>von</strong> shell-Prozeduren besser geeignet (sh, ksh).<br />
Da an <strong>de</strong>r Uni Regensburg die gesamte Benutzerumgebung auf die tcsh bzw. csh abgestimmt wur<strong>de</strong>,<br />
wer<strong>de</strong>n daher diese shells intensiver behan<strong>de</strong>lt. Hinzu kommt, dass viele Mechanismen, die hier betrachtet<br />
wer<strong>de</strong>n, auch in an<strong>de</strong>ren shell-Varianten in gleicher o<strong>de</strong>r in ähnlicher Weise anzutreffen sind.<br />
6.1. Kommandowie<strong>de</strong>rholung<br />
Alle Kommandos, die interaktiv eingegeben wer<strong>de</strong>n, wer<strong>de</strong>n in einer sog. History-Liste gesichert. Auf diese<br />
Liste kann zurückgegriffen wer<strong>de</strong>n, um bestimmte Kommandos wie<strong>de</strong>rholt aufzurufen, ohne das gesamte<br />
Kommando nochmals eintippen zu müssen. Beim Login wird außer<strong>de</strong>m eine Datei namens .history<br />
angelegt, die die Speicherung <strong>de</strong>r History-Liste übernimmt. So stehen die Kommados sogar nach einem<br />
Logout beim nächsten Login wie<strong>de</strong>r zur Verfügung. Die History-Liste kann man mit <strong>de</strong>m Kommando<br />
history ansehen.<br />
rechner> history<br />
rechner> history | tail -5<br />
Ausgabe <strong>de</strong>r gesamten History-Liste<br />
Ausgabe <strong>de</strong>r letzten 5 Kommandos<br />
History-Kommandos<br />
Die Referenz auf ein in <strong>de</strong>r History-Liste stehen<strong>de</strong>s Kommando erfolgt mit einem vorangestellten Rufezeichen<br />
! Dies ist auch <strong>de</strong>r Grund dafür, dass das Rufezeichen bei an<strong>de</strong>rweitiger Verwendung maskiert wer<strong>de</strong>n<br />
muss.<br />
rechner> !!<br />
rechner> !17<br />
rechner> !-4<br />
rechner> !vi<br />
das zuletzt eingegebene Kommando wird ausgeführt<br />
das Kommando Nr. 17 in <strong>de</strong>r History-Liste wird ausgeführt<br />
das viertletzte Kommando wird ausgeführt<br />
<strong>de</strong>r letzte vi-Aufruf wird ausgeführt<br />
Wie oben zu sehen, kann die Referenz auf ein Kommando <strong>de</strong>r History-Liste entwe<strong>de</strong>r mit <strong>de</strong>r Nummer<br />
o<strong>de</strong>r mit einem Namen erfolgen. Beim Bezug auf einen Kommandonamen wird das letzte Kommando<br />
genommen.
6. Die csh/tcsh - Shell 49<br />
Kommando-Modifikation mittels History-Kommandos<br />
0 1 2 3 4 5<br />
ls -l berta hugo | more<br />
<strong>Eine</strong> Kommando-Eingabe kann man sich als Aneinan<strong>de</strong>rreihung einzelner Wörter vorstellen. Die Zeichen<br />
|, und & gelten dabei als eigene Wörter. Auf die einzelnen Kommandobestandteile kann durch Angabe<br />
<strong>de</strong>r entsprechen<strong>de</strong>n Wortnummer in History-Kommandos Bezug genommen wer<strong>de</strong>n.<br />
rechner> cp !!:2 ~/text2<br />
Die Datei berta wird in das Subdirectory text2 kopiert<br />
rechner> chmod 666 !ls:2-3<br />
Der chmod-Befehl wird für die Dateien berta und hugo ausgeführt, <strong>de</strong>m<br />
zweiten und dritten Argument im letzten ls-Befehl<br />
Für die Korrektur <strong>von</strong> Tippfehlern im zuletzt eingegebenen Kommando, gibt es eine einfache Möglichkeit.<br />
rechner> more text2/briefe/ina.txt<br />
rechner> ^2^3<br />
für text2 soll text3 stehen<br />
Korrektur mit <strong>de</strong>m Zeichen ^<br />
Neben <strong>de</strong>n oben erwähnten History-Kommandos lässt die tcsh auch das Vorwärts- und Rückwärts-Blättern<br />
<strong>de</strong>r History-Liste mit <strong>de</strong>n Pfeiltasten zu. Dies ist für viele Benutzer oft einfacher, als sich die verschie<strong>de</strong>nen<br />
History-Modifikationen zu merken.<br />
6.2. Vervollständigung <strong>von</strong> Kommandos, Variablen und Dateinamen<br />
Mit <strong>de</strong>r tcsh lässt sich eine Menge Tipp-Arbeit sparen. Bei <strong>de</strong>r Eingabe <strong>von</strong> Kommandos, Variablen und<br />
Dateinamen genügt es, die ersten paar Zeichen zu schreiben und danach die -Taste zu drücken, um<br />
<strong>de</strong>n kompletten Namen zu vervollständigen.<br />
rechner> fing<br />
rechner> fin d<br />
find find2perl findaffix finger<br />
wird zum Kommando finger komplettiert<br />
zeigt alle Kommandos an, die im Suchpfad mit fin<br />
beginnen<br />
Gibt es mehrere Kommandos, Variable o<strong>de</strong>r Dateinamen, die mit <strong>de</strong>r gleichen Zeichenfolge beginnen, so<br />
kann mit <strong>de</strong>r Tastensequenz d eine Übersicht ausgegeben wer<strong>de</strong>n.<br />
rechner> echo $ver<br />
rechner> echo $MAIL d<br />
MAIL MAILCAPS MAILSERVERNAME<br />
Variablenname wird zu version komplettiert<br />
zeigt alle Variable an, die mit MAIL beginnen<br />
rechner> more d<br />
briefe/ else ina rudi<br />
rechner> more el<br />
Anzeige aller Dateien und Directories<br />
Dateiname wird zu else komplettiert<br />
Bei <strong>de</strong>r Anwendung <strong>von</strong> d auf Dateinamen wer<strong>de</strong>n Directories mit einem / hinter <strong>de</strong>m Namen<br />
gekennzeichnet. Durch mehrfaches Verwen<strong>de</strong>n <strong>de</strong>r -Taste können auch längere Pfadnamen zusammengesetzt<br />
wer<strong>de</strong>n.
6. Die csh/tcsh - Shell 50<br />
6.3. alias - Mechanismus<br />
aliases sind selbst<strong>de</strong>finierte Kommandobezeichnungen. Sie wer<strong>de</strong>n in erster Line <strong>de</strong>swegen <strong>de</strong>finiert, um<br />
komplexere Kommandoeingaben abzukürzen und <strong>de</strong>n eigenen Bedürfnissen anzupassen.<br />
alias name <strong>de</strong>finition<br />
unalias name<br />
alias<br />
Definition eines aliases<br />
Löschen einer alias-Definition<br />
Anzeigen aller gesetzten aliases<br />
Durch die Eingabe <strong>von</strong> name wer<strong>de</strong>n die in <strong>de</strong>r <strong>de</strong>finition enthaltenen Kommandos ausgeführt.<br />
rechner> alias ll ls -al<br />
Eingabe <strong>von</strong> ll führt das Kommando ls -al aus<br />
rechner> alias sys ’ps -ef | more’<br />
Längere alias-Definitionen wer<strong>de</strong>n in Hochkommas eingeschlossen<br />
Verwendung <strong>von</strong> Argumenten in alias-Definitionen<br />
!^ Platzhalter für das erste Argument <strong>de</strong>s aktuellen Kommandos<br />
!* Platzhalter für alle Argumente <strong>de</strong>s aktuellen Kommandos<br />
Für das find-Kommando soll ein alias <strong>de</strong>finiert wer<strong>de</strong>n, bei <strong>de</strong>m genau das erste Argument (hier <strong>de</strong>r Dateiname)<br />
übergeben wer<strong>de</strong>n soll.<br />
rechner> alias ff ’find<br />
~ -name \!^ -print’<br />
rechner> ff filename<br />
Der filename wird in obigem alias als Argument eingesetzt<br />
Es soll ein alias <strong>de</strong>finiert wer<strong>de</strong>n, das ein Directory-Listing beliebig vieler Verzeichnisse seitenweise ausgibt<br />
( l dir1 dir2 dir3 ).<br />
rechner> alias l ’ls -l \!* | more’<br />
Hier ist es erfor<strong>de</strong>rlich, dass alle Argumente in die Definition übernommen wer<strong>de</strong>n, da ja erst danach das<br />
seitenweise Auflisten mit <strong>de</strong>m more-Kommando folgt.<br />
Weitere Beispiele:<br />
rechner> alias cd ’cd \!*; set prompt="$cwd> "’<br />
Bei je<strong>de</strong>m cd wird das aktuelle Directory als prompt gesetzt<br />
rechner> alias tm ’(set d=‘date‘; echo $d[4])’<br />
Das Kommando tm gibt die aktuelle Uhrzeit aus<br />
Bei <strong>de</strong>r Interpretation <strong>von</strong> Kommandos wird folgen<strong>de</strong> Abarbeitungs-Reihenfolge eingehalten: 1. Alias-<br />
Substitution, 2. Built-in Kommandos, 3. Kommandos im Suchpfad. Alias-Definitionen wer<strong>de</strong>n also immer<br />
als erste interpretiert. Dies ermöglicht eine Um<strong>de</strong>finition <strong>von</strong> built-in und Suchpfad-Kommandos (Vorsicht:<br />
Um<strong>de</strong>finition kann dazu führen, dass ursprüngliche Kommandos nicht mehr funktionieren). Sollen alias-<br />
Definitionen auch nach <strong>de</strong>m nächsten Einloggen und in untergeordneten shells zur Verfügung stehen, so<br />
sind sie in die Datei .cshrc bzw. .myalias einzutragen. Will man eingetragene Definitionen sofort<br />
aktivieren, so geschieht dies mit <strong>de</strong>m Kommando source .cshrc bzw. source .myalias.
6. Die csh/tcsh - Shell 51<br />
6.4. Ein- und Ausgabeumlenkung<br />
Die Ein- und Ausgabe <strong>von</strong> Kommandos erfolgt in <strong>de</strong>r Regel innerhalb eines Terminals. Wer<strong>de</strong>n dagegen<br />
Dateien für die Eingabe bzw. Ausgabe verwen<strong>de</strong>t, so spricht man <strong>von</strong> Ein- bzw. Ausgabeumlenkung.<br />
Ausgabeumlenkung<br />
Bei <strong>de</strong>r Ausgabe wird zwischen einer Standardausgabe und einer Standardfehlerausgabe unterschie<strong>de</strong>n.<br />
Die Standardausgabe enthält alle Daten, die ein Kommando bei seinem regulären Ablauf ausgibt. Die<br />
Standardfehlerausgabe besteht dagegen aus Diagnose-Meldungen, die auf Probleme bei <strong>de</strong>r Abarbeitung<br />
hinweisen sollen.<br />
command > filename<br />
command >> filename<br />
command >& filename<br />
command >>& filename<br />
Ausgabe wird in die Datei filename geschrieben<br />
Ausgabe wird <strong>de</strong>m Inhalt <strong>de</strong>r Datei filename angehängt<br />
Diagnose-Meldungen wer<strong>de</strong>n in die Datei geschrieben<br />
Diagnose-Meldungen wer<strong>de</strong>n <strong>de</strong>m Inhalt <strong>de</strong>r Datei angehängt<br />
Wird nur die Ausgabeumlenkung für Diagnose-Meldungen mit >& <strong>de</strong>finiert, so wird sowohl die Standardausgabe<br />
als auch die Standardfehlerausgabe in die gleiche Datei umgelenkt.<br />
rechner> date > dirliste<br />
Die Ausgabe <strong>de</strong>s aktuellen Datums wird in die Datei dirliste umgelenkt<br />
rechner> ls -al >> dirliste<br />
Der Datei dirliste wird das Directory-Listing angefügt<br />
rechner> (date; ls -al) > dirliste<br />
Die Ausgabe bei<strong>de</strong>r obigen Kommandos wird in einem Aufruf mittels Kommandogruppierung<br />
in die Datei dirliste umgelenkt.<br />
rechner> find /var -name mail -print >& err_output<br />
Das find-Kommando sucht im Verzeichnis var nach <strong>de</strong>m Namen mail,<br />
wobei alle Diagnose-Meldungen in die Datei err_output umgelenkt wer<strong>de</strong>n<br />
Das letzte Beispiel dokumentiert das Problem, Ausgabe und Fehlerausgabe zu trennen. Bei obigem find-<br />
Kommando wer<strong>de</strong>n daher nicht nur die Diagnose-Meldungen, son<strong>de</strong>rn auch die Standardausgaben in die<br />
Datei err_output umgeleitet. Reguläre Ausgaben <strong>de</strong>s find-Kommandos stehen somit vermischt zwischen<br />
<strong>de</strong>n Fehlerausgaben. Sollen die Standardausgaben und die Fehlerausgaben in getrennte Dateien erfolgen,<br />
so muss das Kommando folgen<strong>de</strong>rmaßen abgesetzt wer<strong>de</strong>n.<br />
rechner> (find /var -name mail -print > output) >& err_output<br />
Preisfrage: Wie muss das find-Kommando aussehen, wenn die Standardausgabe ganz normal auf das<br />
Terminal, die Standardfehlerausgabe aber in eine Datei erfolgen soll?<br />
Die Ausgabeumlenkung wird häufig in Zusammenhang mit Hintergrundprozessen verwen<strong>de</strong>t, die mit <strong>de</strong>m<br />
nohup-Befehl gestartet wur<strong>de</strong>n und nach einem Logout weiterlaufen. Da hierbei kein Terminal für die<br />
Ausgabe existiert, ist es wichtig, dass <strong>de</strong>r Prozess ev. auftreten<strong>de</strong> Ausgaben in eine Datei schreiben kann.
6. Die csh/tcsh - Shell 52<br />
Mit <strong>de</strong>r Umgebungs-Variablen noclobber können versehentliche Überschreibungen <strong>von</strong> Dateien verhin<strong>de</strong>rt<br />
wer<strong>de</strong>n. Ist die Datei, in die <strong>de</strong>r Output geschrieben wer<strong>de</strong>n soll, bereits vorhan<strong>de</strong>n, so erscheint<br />
die Meldung Datei existiert. Bei Dateien, die für eine Anfügung <strong>von</strong> Output ausgewählt wer<strong>de</strong>n,<br />
wird Datei o<strong>de</strong>r Verzeichnis nicht gefun<strong>de</strong>n ausgegeben, falls die Datei noch nicht<br />
existiert. Will man diesen Sicherheits-Mechanismus wie<strong>de</strong>r ausschalten, so muss die Variable noclobber<br />
<strong>de</strong>aktiviert wer<strong>de</strong>n (unset noclobber). Bei gesetztem noclobber können einzelne Überschreibungen<br />
durch Anfügen eines ! an <strong>de</strong>n Umlenkungs-Operator realisiert wer<strong>de</strong>n ( >! >>! >&! >>&! ).<br />
Eingabeumlenkung<br />
Bei <strong>de</strong>r Eingabe-Umlenkung wird <strong>de</strong>r Inhalt einer Datei als Input für ein Kommando verwen<strong>de</strong>t.<br />
command < filename<br />
command mailx rar12345 < brief<br />
rechner> tr "[A-Z]" "[a-z]" < report > report.low<br />
Obiges tr-Kommando ist ein Beispiel für das gleichzeitige Verwen<strong>de</strong>n <strong>von</strong> Ein- und Ausgabe-Umlenkung.<br />
Alle Grossbuchstaben in <strong>de</strong>r Datei report wer<strong>de</strong>n in Kleinbuchstaben konvertiert und das Resultat in <strong>de</strong>r<br />
Datei report.low abgelegt. Die Datei report wird dabei nicht verän<strong>de</strong>rt.<br />
6.5. Variable<br />
Variable wer<strong>de</strong>n zur Speicherung alphanumerischer Daten verwen<strong>de</strong>t. Variablennamen beginnen immer mit<br />
einem Buchstaben. Man unterschei<strong>de</strong>t lokale und globale Variable. Lokale Variable sind nur innerhalb <strong>de</strong>r<br />
aktuellen (current) shell bekannt. Globale Variable wer<strong>de</strong>n an untergeordnete Prozesse weitervererbt.<br />
6.5.1. Lokale Variable<br />
Für die Definition <strong>von</strong> lokalen Variablen existieren zwei Formen:<br />
set varname = wert<br />
@ varname = wert<br />
unset varname<br />
set<br />
wird für beliebige Werte verwen<strong>de</strong>t<br />
wird für numerische Werte verwen<strong>de</strong>t<br />
Eliminiert eine lokale Variable<br />
zeigt alle <strong>de</strong>finierten Variablen an<br />
Die Referenz auf bestimmte Variablen wird durch ein vorangestelltes Dollarzeichen erreicht.<br />
echo-Kommando wird <strong>de</strong>r Inhalt einer Variablen ausgegeben.<br />
Mit <strong>de</strong>m<br />
echo $varname<br />
echo $#varname<br />
gibt die Variablenwerte aus<br />
gibt die Anzahl <strong>de</strong>r Argumente in <strong>de</strong>r Variablen aus
6. Die csh/tcsh - Shell 53<br />
Beispiele:<br />
rechner> set ml = doris else rudi<br />
Definition <strong>de</strong>r Variablen ml<br />
rechner> echo $ml<br />
es wird nur doris ausgegeben, da Leerzeichen als Trennzeichen wirken<br />
rechner> set ml = ’doris else rudi’<br />
rechner> set ml = "doris else rudi"<br />
rechner> echo $ml<br />
nun wer<strong>de</strong>n in bei<strong>de</strong>n Fällen alle drei Namen angezeigt<br />
Man beachte in obigen Variablen-Definitionen die unterschiedliche Wirkungsweise <strong>de</strong>r Maskierung. Einfache<br />
Hochkommas maskieren alle eingeschlossenen Zeichen, während dagegen Anführungszeichen die<br />
Interpretation <strong>de</strong>r Zeichen $, \ und ‘ zulassen.<br />
Mit <strong>de</strong>m Kommando echo $#ml kann die Anzahl <strong>de</strong>r in <strong>de</strong>r Variablen enthaltenen Argumente ausgegeben<br />
wer<strong>de</strong>n. Im vorliegen<strong>de</strong>n Beispiel beträgt dieser Wert 1, obwohl die Variable ml aus 3 Namen besteht.<br />
Soll eine Variable aus einer indizierbaren Wortliste bestehen, so muss die Variable folgen<strong>de</strong>rmaßen <strong>de</strong>finiert<br />
wer<strong>de</strong>n:<br />
set varname = ( wert1 wert2 wert3 ... )<br />
Die Variable besteht nun aus einzelnen Argumenten. Ein indizierter Zugriff auf ein einzelnes Argument<br />
erfolgt mit set varname[n] bzw. mit $varname[n].<br />
Beispiele:<br />
rechner> set ml = ( doris else rudi )<br />
Definition <strong>de</strong>r Variable ml als word-list<br />
rechner> echo $#ml liefert jetzt <strong>de</strong>n Wert 3<br />
rechner> set ml[2] = peter ersetzt das zweite Argument (else) durch<br />
peter<br />
rechner> echo ${ml}ratlos Verkettung mit Textstring<br />
Das letzte Beispiel <strong>de</strong>monstriert die Verkettung einer Variablen mit Text. Damit <strong>de</strong>r Variablenname ein<strong>de</strong>utig<br />
interpretiert wer<strong>de</strong>n kann, muss er in geschweiften Klammern eingeschlossen wer<strong>de</strong>n. Als Ausgabe<br />
erhält man in obigem Fall doris peter rudiratlos.<br />
Zuweisungsoperationen mit numerischen Variablen<br />
In folgen<strong>de</strong>r Tabelle wird <strong>von</strong> <strong>de</strong>m Wert 6 als Ausgangswert für die Variable count ausgegangen. Das<br />
Ergebnis kann mit <strong>de</strong>m Kommando echo $count angezeigt wer<strong>de</strong>n.<br />
Symbol Beispiel Ergebnis<br />
= @ count = 0 0<br />
+= @ count += 2 8<br />
-= @ count -= 5 1<br />
*= @ count *= 8 48<br />
/= @ count /= 4 1<br />
++ @ count ++ 7<br />
- @ count - 5
6. Die csh/tcsh - Shell 54<br />
Arithmetische, bitweise und logische Operationen mit numerischen Variablen<br />
Der Ausgangswert <strong>de</strong>r Variable num soll hier 10 betragen, das Ergebnis wird mit echo $r ermittelt.<br />
Symbol Beispiel Ergebnis<br />
+ @ r = $num + 4 14<br />
- @ r = $num - 5 5<br />
* @ r = $num * 10 100<br />
/ @ r = $num / 6 1<br />
% @ r = $num % 3 1<br />
» @ r = ($num » 2) 2<br />
« @ r = ($num « 3) 80<br />
Symbol Beispiel Ergebnis<br />
~ @ r = ~ $num -11 1 Komplement<br />
! @ r = ! $num 0 logische Negation<br />
| @ r = ($num | 7) 15 bitweise or<br />
^ @ r = ($num ^ 7) 13 bitweise excl. or<br />
& @ r = ($num & 6) 2 bitweise and<br />
|| @ r = ($num > 8 || $num < 4) 1 logisch or<br />
&& @ r = ($num > 4 && $num < 8) 0 logisch and<br />
Vergleichsoperationen<br />
In dieser Tabelle beträgt <strong>de</strong>r Anfangswert <strong>von</strong> num 5, die Variable str besitzt <strong>de</strong>n Wert xyz und die<br />
Variable pat <strong>de</strong>n Wert abc.<br />
Symbol Beispiel Ergebnis<br />
== $num == 5 true<br />
!= $num != 5 false<br />
> $num > 3 true<br />
>= $num >= 3 true<br />
< $num < 3 false<br />
6. Die csh/tcsh - Shell 55<br />
$argv enthält alle Argumente <strong>de</strong>s Prozeduraufrufs<br />
$* " " " " "<br />
$argv[*] " " " " "<br />
$n enthält das n-te Argument <strong>de</strong>s Prozeduraufrufs<br />
${n} " " " " "<br />
$argv[n] " " " " "<br />
$# enthält die Anzahl <strong>de</strong>r Argumente<br />
$#argv " " " "<br />
$0 enthält <strong>de</strong>n Namen <strong>de</strong>r aufgerufenen Prozedur<br />
$argv[0] " " " " "<br />
$_ enthält <strong>de</strong>n Namen <strong>de</strong>s zuletzt ausgeführten Kommandos<br />
$$ enthält die Process-Id <strong>de</strong>r ausführen<strong>de</strong>n shell<br />
$status enthält <strong>de</strong>n exit-status <strong>de</strong>s zuletzt ausgeführten Kommandos<br />
$? " " " " "<br />
$< liest eine Zeile <strong>von</strong> <strong>de</strong>r Tastatur<br />
Um beispielsweise <strong>de</strong>n Tastaturinput einer Variablen zuzuweisen, <strong>de</strong>finiert man set input = $ setenv STADT Regensburg<br />
rechner> echo $STADT<br />
Wichtige globale Variable<br />
Definition <strong>de</strong>r globalen Variablen STADT<br />
Ausgabe <strong>de</strong>s Wertes <strong>von</strong> STADT<br />
Standardmäßig wer<strong>de</strong>n beim Login bereits eine Reihe <strong>von</strong> globalen Variablen <strong>de</strong>finiert, die die Benutzerumgebung<br />
festlegen. So wird in <strong>de</strong>r Variablen HOME das Login-Verzeichnis gespeichert, in <strong>de</strong>r Variablen<br />
PATH steht <strong>de</strong>r Suchpfad für Kommandoeingaben. Die Variable MAIL enthält die <strong>Unix</strong>-Mailbox und in <strong>de</strong>r<br />
Variablen SHELL ist die Login-shell abgelegt. Manche lokale Variable wer<strong>de</strong>n beim Login gleich in globale<br />
Variable exportiert (path -> PATH).
6. Die csh/tcsh - Shell 56<br />
6.6. Shell-Programmierung<br />
Unter Shell-Programmierung versteht man das Schreiben <strong>von</strong> Kommando-Prozeduren. Diese Kommando-Prozeduren<br />
sind nichts an<strong>de</strong>res als Dateien, die shell-Kommandos enthalten. In <strong>de</strong>r ersten Zeile einer<br />
Kommando-Prozedur sollte <strong>de</strong>m System mitgeteilt wer<strong>de</strong>n, unter welcher shell die Prozedur abgearbeitet<br />
wer<strong>de</strong>n soll. Die erste Zeile bei csh-Prozeduren lautet daher #!/bin/csh, bei tcsh-Prozeduren<br />
#!/usr/local/bin/tcsh bzw. #!/bin/tcsh. Ansonsten gilt das Zeichen # als Kommentarzeichen.<br />
#!/usr/local/bin/tcsh<br />
#<br />
# Datei: filecount<br />
# script zum zaehlen <strong>von</strong> Dateien und Directories<br />
# 02.05.97 - WP<br />
#<br />
echo -n "Dateien und Directories"<br />
ls -al | wc -l<br />
exit<br />
Nach <strong>de</strong>m Editieren <strong>de</strong>r Datei müssen noch die execute-Rechte gesetzt wer<strong>de</strong>n, damit die Prozedur auch<br />
ausgeführt wer<strong>de</strong>n kann.<br />
rechner> chmod u+x filecount<br />
rechner> ./filecount<br />
execute-rechte wer<strong>de</strong>n gesetzt<br />
Aufruf <strong>de</strong>r Prozedur<br />
Wer<strong>de</strong>n csh- bzw. tcsh-Skripten mit Argumenten aufgerufen, so wer<strong>de</strong>n die Argumente auf die beson<strong>de</strong>ren<br />
Variablen $n, $argv[n] abgebil<strong>de</strong>t. In <strong>de</strong>r Prozedur kann dann auf diese Variablen referenziert<br />
wer<strong>de</strong>n.<br />
#!/usr/local/bin/tcsh<br />
#<br />
# Datei: arguments<br />
# script zur Ausgabe <strong>von</strong> drei Input-Argumenten<br />
#<br />
# Usage: arguments arg1 arg2 arg3<br />
# 02.05.97 - WP<br />
#<br />
echo $1<br />
echo $argv[2]<br />
echo $3 $2 $1<br />
echo "$3 $2 $1"<br />
exit<br />
Der Aufruf <strong>de</strong>r Prozedur erfolgt mit Eingabe <strong>von</strong> Argumenten, die mit Leerzeichen <strong>von</strong>einan<strong>de</strong>r getrennt<br />
wer<strong>de</strong>n. Die ersten drei Argumente wer<strong>de</strong>n <strong>de</strong>n Variablen $1, $2 und $3 zugewiesen.<br />
rechner> ./arguments ina otto doris<br />
ina<br />
otto<br />
doris otto ina<br />
doris otto ina
6. Die csh/tcsh - Shell 57<br />
Um eine Kontrolle über <strong>de</strong>n Ablauf einer shell-Prozedur zu erhalten, ist es erfor<strong>de</strong>rlich sog. Steuerstrukturen<br />
einzubauen. Wie eine Programmiersprache kennt auch die tcsh bzw. csh <strong>de</strong>rarige Kontrollstrukturen.<br />
6.6.1. Die if - Anweisung<br />
if ( expression ) command<br />
if ( expression ) then<br />
command(s)<br />
else if ( expression ) then<br />
command(s)<br />
else<br />
command(s)<br />
endif<br />
Die if-Anweisung existiert also als einzelne Anweisung o<strong>de</strong>r als if-Block. Ein if-Block kann elseif- und<br />
else-Zweige besitzen. Es ist darauf zu achten, dass vor und hinter <strong>de</strong>n run<strong>de</strong>n Klammern min<strong>de</strong>stens ein<br />
Leerzeichen steht.<br />
#!/bin/csh<br />
#<br />
# Datei: if.csh<br />
# Beispiel zur if-Anweisung<br />
#<br />
# Usage: if.csh arg1 arg2 arg3 ...<br />
# 02.05.97 - WP<br />
#<br />
if ($#argv
6. Die csh/tcsh - Shell 58<br />
Obiges Skript verwen<strong>de</strong>t in <strong>de</strong>r foreach-Schleife die Variable $path als wordlist. Es wer<strong>de</strong>n alle Verzeichnisse<br />
gelistet, die im Suchpfad stehen.<br />
#!/bin/csh<br />
#<br />
# Datei: foreach2.csh<br />
#<br />
foreach datei (x1 x2 x3)<br />
echo $datei<br />
echo "$datei enthaelt diese Zeile" > $datei<br />
end<br />
Diese Prozedur legt die drei Dateien namens x1, x2 und x3 an mit jeweils einer Zeile Inhalt.<br />
6.6.3. Die while - Schleife<br />
while ( expression )<br />
command(s)<br />
end<br />
Die while-Schleife kann mit numerischen o<strong>de</strong>r string-Variablen benutzt wer<strong>de</strong>n. Die Schleife wird solange<br />
durchlaufen, bis expression false ist.<br />
#!/bin/csh<br />
#<br />
@ i = 1<br />
while ( $i
6. Die csh/tcsh - Shell 59<br />
Für die Ausgabe <strong>de</strong>r Usage wird in obiger Prozedur die Variable $0 verwen<strong>de</strong>t. In ihr wird <strong>de</strong>r Name<br />
<strong>de</strong>r Datei abgelegt, die die Prozedur enthält. Die Maskierung <strong>de</strong>s Doppelpunktes beim zweiten echo-<br />
Statement ist notwendig, damit die shell dies nicht als Bestandteil eines History-Kommandos interpretiert.<br />
Das zeilenweise Einlesen einer Datei kann unter <strong>de</strong>r bash einfacher gelöst wer<strong>de</strong>n.<br />
6.6.4. Die shift - Anweisung<br />
shift<br />
shift varname<br />
wirkt auf die Argumentenliste argv<br />
wirkt auf die Variable varname<br />
shift verschiebt die Argumente einer wordlist nach links. Das ganz links stehen<strong>de</strong> Argument fällt aus <strong>de</strong>r<br />
wordlist (Argumentenliste) heraus.<br />
#!/bin/csh<br />
#<br />
# Datei: shift.csh<br />
# Beispiel fuer shift-Statement<br />
#<br />
set line = $<<br />
set input = ( $line )<br />
foreach element<br />
end<br />
echo $input<br />
shift input<br />
($input)<br />
6.6.5. Fallunterscheidung mit switch und case<br />
switch ( string )<br />
case pattern1:<br />
command(s)<br />
breaksw<br />
case pattern2:<br />
command(s)<br />
breaksw<br />
...<br />
...<br />
<strong>de</strong>fault:<br />
command(s)<br />
breaksw<br />
endsw<br />
Es wird nach einer Übereinstimmung <strong>von</strong> string und pattern gesucht und die dort befindlichen Kommandos<br />
ausgeführt. Wird keine Übereinstimmung gefun<strong>de</strong>n, so wer<strong>de</strong>n die Kommandos unter <strong>de</strong>fault<br />
abgearbeitet. Im pattern-string können die pattern-matching character *, ? und [ ] verwen<strong>de</strong>t wer<strong>de</strong>n.<br />
#!/bin/csh<br />
#<br />
# Datei: case.csh<br />
# Beispiel fuer case
6. Die csh/tcsh - Shell 60<br />
#<br />
set line = $<<br />
set input = ( $line )<br />
foreach element ($input)<br />
switch ( $element )<br />
case [aA]*:<br />
echo "Name $element beginnt mit einem A"<br />
breaksw<br />
case [hH]*:<br />
echo "Name $element beginnt mit einem H"<br />
breaksw<br />
case [rR][uU][dD][iI]:<br />
echo "Der Name lautet $element"<br />
breaksw<br />
<strong>de</strong>fault:<br />
echo "Name interessiert mich nicht"<br />
breaksw<br />
endsw<br />
shift input<br />
end<br />
6.6.6. Die break- und continue-Anweisung<br />
Ein break bewirkt <strong>de</strong>n Abbruch <strong>de</strong>r Abarbeitung innerhalb einer Schleife; die Abarbeitung wird beim<br />
ersten Kommando hinter <strong>de</strong>r Schleife fortgesetzt.<br />
#!/bin/csh<br />
#<br />
set line = $<<br />
set input = ( $line )<br />
foreach element ($input)<br />
if ( $element == "otto" ) break<br />
echo $element<br />
end<br />
echo "Jetzt bin ich hinter <strong>de</strong>r Schleife"<br />
continue bewirkt <strong>de</strong>n Sprung zum En<strong>de</strong> einer Schleife, wobei die Schleife wie<strong>de</strong>rholt durchlaufen wird,<br />
solange die Bedingung dafür true ist.<br />
#!/bin/csh<br />
#<br />
set line = $<<br />
set input = ( $line )<br />
foreach element ($input)<br />
if ( $element == "otto" ) continue<br />
echo $element<br />
end<br />
echo "Jetzt bin ich hinter <strong>de</strong>r Schleife"
6. Die csh/tcsh - Shell 61<br />
6.6.7. Die goto-Anweisung<br />
Es wird ein unbedingter Sprung zum bezeichneten Label ausgeführt und mit <strong>de</strong>r Abarbeitung <strong>de</strong>r dahinter<br />
folgen<strong>de</strong>n Kommandos begonnen. Das Label muss mit einem Doppelpunkt abgeschlossen am Zeilenanfang<br />
stehen.<br />
#!/bin/csh<br />
#<br />
set line = $<<br />
set input = ( $line )<br />
foreach element ($input)<br />
if ( $element == "otto" ) goto ottolabel<br />
echo $element<br />
end<br />
exit<br />
#<br />
ottolabel:<br />
echo "otto geht ins schwimmbad"<br />
exit<br />
6.6.8. Allerlei Nützliches<br />
Eingabe <strong>von</strong> Tastatur<br />
Die interaktive Eingabe über die Tastatur erfolgt mit <strong>de</strong>r beson<strong>de</strong>ren Variablen $
6. Die csh/tcsh - Shell 62<br />
In tcsh-Prozeduren wird diese Art <strong>de</strong>s Tests meist in Zusammenhang mit <strong>de</strong>r if-Anweisung verwen<strong>de</strong>t.<br />
if ( ‘filetest -e .cshrc‘ ) echo "Datei existiert"<br />
Man beachte, dass das filetest-Kommando in umgekehrte einfache Hochkommas eingeschlossen wer<strong>de</strong>n<br />
muss.<br />
Die csh kennt die gleichen Operatoren für das Prüfen <strong>von</strong> Dateieigenschaften. Dabei genügt es, <strong>de</strong>n Operator<br />
zusammen mit <strong>de</strong>m Dateinamen in einem Ausdruck zu verwen<strong>de</strong>n. Diese Schreibweise kann auch in<br />
tcsh-Prozeduren kompatibel benutzt wer<strong>de</strong>n.<br />
if ( -e .cshrc ) echo "Datei existiert"<br />
Messung <strong>de</strong>s Zeitverbrauchs mit time<br />
Zur Messung <strong>de</strong>s Zeitverbrauchs eines Shell-Skripts kann das builtin-Kommando time verwen<strong>de</strong>t wer<strong>de</strong>n.<br />
time wird einfach <strong>de</strong>m Prozedur-Aufruf vorangestellt.<br />
rechner> time ./arguments ina otto doris<br />
ina<br />
otto<br />
doris otto ina<br />
doris otto ina<br />
0.07u 0.02s 0:00.12 75.0%<br />
Obige Zeitangaben sagen aus, dass <strong>de</strong>r Prozess 0.07 CPU-Sekun<strong>de</strong>n im user-mo<strong>de</strong> und 0.02 CPU-Sekun<strong>de</strong>n<br />
im kernel-mo<strong>de</strong> gelaufen ist. Die Gesamtlaufzeit beträgt 0.12 Sekun<strong>de</strong>n, wobei nur 75% da<strong>von</strong> die summierte<br />
CPU-Zeit ausmacht.<br />
Fehlersuche in Shell-Prozeduren<br />
Um Fehler in csh-Prozeduren aufzuspüren, muss die Prozedur explizit in einer eigenen csh aufgerufen<br />
wer<strong>de</strong>n. Für die Fehlerdiagnose sind spezielle Optionen <strong>de</strong>r csh zu verwen<strong>de</strong>n.<br />
csh -vx skript arg1 arg2<br />
Der obige csh-Aufruf einer Prozedur gibt je<strong>de</strong> Zeile vor und nach <strong>de</strong>r Variablen-, File- o<strong>de</strong>r Kommando-<br />
Substitution aus. So kann die Abarbeitung eines Shell-Skriptes gut nachvollzogen wer<strong>de</strong>n. Fehlerhafte<br />
Bereiche können schnell lokalisiert wer<strong>de</strong>n.
7. Textmusterverarbeitung mit awk<br />
awk ist eine Programmiersprache, die für das Durchsuchen und die Manipulation <strong>von</strong> Textdaten entworfen<br />
wur<strong>de</strong>. Der Name awk leitet sich <strong>von</strong> <strong>de</strong>n drei Autoren Aho, Weinberger und Kernighan ab.<br />
Die Basisfunktion <strong>de</strong>r Sprache besteht im zeilenweisen Durchsuchen <strong>de</strong>r Eingabe nach vom Benutzer spezifizierten<br />
Auswahlbedingungen, <strong>de</strong>nen entsprechen<strong>de</strong> Aktionen zugeordnet wer<strong>de</strong>n können. Die Anwendungsbereiche<br />
<strong>von</strong> awk liegen in <strong>de</strong>r Datenauswertung und -aufbereitung, <strong>de</strong>r Datenvalidation und <strong>de</strong>r<br />
Datentransformation.<br />
Für einige <strong>de</strong>r nachfolgen<strong>de</strong>n Beispiele wird eine Datei namens daten mit folgen<strong>de</strong>m Inhalt verwen<strong>de</strong>t:<br />
23 otto huber<br />
34 hugo habicht<br />
43 OTTO Albers Hamburg<br />
12078677345444<br />
11 ina <strong>de</strong>ter<br />
0 rudi ratlos<br />
26 peter lustig<br />
44 elly heuss<br />
88 mani held<br />
14 egon erpel<br />
76 bodo ballermann<br />
90 andrea doria<br />
7.1. Aufruf und Programmstruktur<br />
Es gibt die Möglichkeit, <strong>de</strong>n awk-Programmtext über eine Programmdatei o<strong>de</strong>r direkt einzugeben. Der<br />
awk-Aufruf kann auch innerhalb eines shell-scripts erfolgen.<br />
awk ’programmtext’ [ inputfile ... ]<br />
awk -f programmdatei [ inputfile ... ]<br />
Nach <strong>de</strong>m Aufruf wird <strong>de</strong>r Programmtext auf syntaktische Korrektheit geprüft. Fehlermeldungen kennzeichnen<br />
<strong>de</strong>n ungefähren Ort <strong>de</strong>s Fehlers ( awk: syntax error near line 10 ). Laufzeitfehler<br />
dagegen wer<strong>de</strong>n genau lokalisiert ( awk: division by zero, record number 10 ).<br />
Der übergeordnete Kontrollfluss im awk-Programm besteht aus einer Hauptschleife, die nacheinan<strong>de</strong>r alle<br />
Eingabezeilen liest. Je<strong>de</strong> Eingabezeile wird sequentiell mit allen aufgeführten Bedingungen verglichen.<br />
wenn Bedingung erfüllt -> dann Aktion ausführen
7. Textmusterverarbeitung mit awk 64<br />
Nicht erfüllte Bedingungen verursachen einen Sprung zur nächsten Bedingung. Aktionen stehen immer in<br />
geschweiften Klammern. <strong>Eine</strong> Aktion muss immer auf <strong>de</strong>rselben Programmzeile beginnen wie die zugehörige<br />
Bedingung. Ansonsten können awk-Programme formatfrei geschrieben wer<strong>de</strong>n. Aus Übersichtlichkeit<br />
ist aber eine tabellarische Struktur ratsam.<br />
Beispiele zu <strong>de</strong>n Anwendungsbereichen <strong>von</strong> awk:<br />
Datenauswertung und -aufbereitung<br />
rechner> awk ’{sum+=$1; print $1, sum}’ daten<br />
Summiert jeweils das erste Feld je<strong>de</strong>r Zeile in <strong>de</strong>r Variablen sum auf und gibt<br />
<strong>de</strong>n Feldwert und die Summe aus<br />
Datenvalidation<br />
rechner> awk ’/^[0-9]+$/ {print "Zeile ist numerisch:" $0}’ daten<br />
Alle Zeilen, die rein numerisch sind, wer<strong>de</strong>n ausgegeben<br />
Datentransformation<br />
rechner> awk ’$2=="OTTO" {$2="HANS"; print}’ daten<br />
Untersucht je<strong>de</strong> Zeile, ob das zweite Feld <strong>de</strong>n Inhalt OTTO besitzt und ersetzt OTTO durch<br />
HANS<br />
Bedingung o<strong>de</strong>r Aktion können auch weggelassen wer<strong>de</strong>n. Wenn nur <strong>de</strong>r Aktionsteil vorhan<strong>de</strong>n ist, wird<br />
dieser für je<strong>de</strong> Eingabezeile ausgeführt.<br />
{sum+=$1; print $1, sum}<br />
Wenn nur die Bedingung gegeben ist, wird die Eingabezeile vollständig in die Standardausgabe kopiert.<br />
$2=="OTTO" entspricht $2=="OTTO"{print}<br />
Ein- und Ausgabedatei wer<strong>de</strong>n als Folge <strong>von</strong> Zeilen gesehen, die durch ein Zeilentrennzeichen <strong>von</strong>einan<strong>de</strong>r<br />
getrennt wer<strong>de</strong>n. Je<strong>de</strong> Zeile besteht für awk aus einer Folge <strong>von</strong> Fel<strong>de</strong>rn, die durch Feldtrennzeichen getrennt<br />
sind. Die einzelnen Fel<strong>de</strong>r einer Zeile wer<strong>de</strong>n mit $1, $2, ... angesprochen. Die gesamte Eingabezeile<br />
wird mit $0 referenziert. Achtung: Die awk-Variablen $1, $2 usw. haben nichts mit <strong>de</strong>n gleichnamigen<br />
Variablen in shell-Skripten zu tun!<br />
rechner> awk ’{print $3, $1}’ daten<br />
rechner> awk ’{print $0}’ daten<br />
rechner> awk ’{print $2, $2, $2}’ daten<br />
Ausgabe <strong>de</strong>s dritten und ersten<br />
Fel<strong>de</strong>s je<strong>de</strong>r Zeile<br />
Ausgabe je<strong>de</strong>r Zeile<br />
Feld 2 wird dreimal hintereinan<strong>de</strong>r<br />
ausgegeben
7. Textmusterverarbeitung mit awk 65<br />
7.2. Die Sprachelemente <strong>von</strong> awk<br />
Die Syntax <strong>von</strong> awk stimmt in vielen Punkten mit <strong>de</strong>r C-Syntax überein.<br />
Datentypen und Variable<br />
Es existieren numerische Daten und Zeichenkettendaten. Zeichenketten wer<strong>de</strong>n in Anführungsstriche gesetzt.<br />
Variable brauchen nicht <strong>de</strong>klariert wer<strong>de</strong>n, sie sind bei ihrer ersten Erwähnung im Programm implizit<br />
<strong>de</strong>klariert. Variablennamen beginnen grundsätzlich mit einem Buchstaben ( abc, e534, a[10] ).<br />
Neben <strong>de</strong>n frei <strong>de</strong>finierbaren Variablen gibt es einige eingebaute Variable.<br />
Statische eingebaute Variable:<br />
RS<br />
ORS<br />
FS<br />
OFS<br />
OFMT<br />
Trennzeichen für Eingabezeilen (LF)<br />
Trennzeichen für Ausgabezeilen (LF)<br />
Feldtrennzeichen für die Eingabe (SPACE, TAB)<br />
Feldtrennzeichen für die Ausgabe (SPACE, TAB)<br />
Steuerstring für die Ausgabe numerischer Werte<br />
Dynamische eingebaute Variable:<br />
NR<br />
NF<br />
FILENAME<br />
Number of Record, aktuelle Zeilennummer<br />
Number of Fields, aktuelle Feldanzahl <strong>de</strong>r Eingabezeile<br />
Name <strong>de</strong>r aktuellen Eingabedatei<br />
Operatoren und Ausdrücke<br />
Es gibt numerische und nichtnumerische Operationen. Das Ergebnis einer Operation ist abhängig vom<br />
Operator und <strong>de</strong>n Werten <strong>de</strong>r verwen<strong>de</strong>ten Operan<strong>de</strong>n. Der Typ <strong>de</strong>r Operation dient als primäres Entscheidungskriterium<br />
für die Wertermittlung.<br />
Als numerische Operatoren sind die Zeichen + - * / % ++ -- zugelassen. Klammerausdrücke<br />
sind erlaubt. Als nicht-numerische Operation ist die Verkettung <strong>de</strong>finiert.<br />
rechner> awk ’{print 3 + 4}’<br />
rechner> awk ’{print "3" + "4"}’<br />
rechner> awk ’{print 3 + 4"5"}’<br />
rechner> awk ’{print 3 + (4"5")}’<br />
ergibt 7, da numerische Operation<br />
ergibt ebenfalls 7, da die Operation numerisch<br />
ist<br />
Mischung <strong>von</strong> numerischer und nichtnumerischer<br />
Operation; die Verkettung<br />
wird zum Schluss ausgeführt; Ergebnis<br />
ist 75<br />
Ergebnis ist 48, da die Klammern die<br />
Auswertungsreihenfolge beeinflussen<br />
Als Vergleichsoperatoren sind dieselben Operatoren wie in <strong>de</strong>r Programmiersprache C gebräuchlich: ==<br />
!= < > = . Wenn die Vergleichsoperan<strong>de</strong>n unterschiedlichen Typs sind, wird <strong>de</strong>r numerische Operand<br />
als Zeichenkettentyp interpretiert. Vorsicht bei Zeichenkettenvergleichen: Die Werte wer<strong>de</strong>n linksbündig<br />
verglichen (d.h. ”12” < ”2” ist true). Verknüpfungen <strong>von</strong> Vergleichsoperationen erfolgen mit <strong>de</strong>n<br />
Operatoren ! (NOT), && (AND) und || (OR).
7. Textmusterverarbeitung mit awk 66<br />
rechner> awk ’$2 >= "e" && $2 < "f" && $2 != "egon"’ daten<br />
Die Verknüpfung ist für alle Namen zutreffend, die mit einem e beginnen, aber<br />
nicht egon lauten<br />
Textfunktionen<br />
substr( s, p [, l ] )<br />
substr schnei<strong>de</strong>t einen Teilstring aus String s, beginnend bei Position p mit <strong>de</strong>r Länge l.<br />
rechner> awk ’{print substr($3, 2, 2)}’ daten<br />
schnei<strong>de</strong>t aus Feld 3 einen 2-stelligen String<br />
rechner> awk ’{print substr($3, 2)}’ daten<br />
extrahiert aus Feld 3 alles ab <strong>de</strong>r Zeichenpostion 2<br />
sprintf( a1, ..., an )<br />
an gemäß <strong>de</strong>m in f angegebe-<br />
sprintf formatiert <strong>de</strong>n Wert <strong>de</strong>r Ausdrücke a1 ...<br />
nen Format (siehe printf).<br />
Numerische Funktionen<br />
length[( s ) ]<br />
length gibt die aktuelle Länge <strong>de</strong>r Zeichenkette s zurück; wenn Argument s fehlt, wird<br />
die gesamte input-Zeile genommen.<br />
rechner> awk ’{print length($3)}’ daten<br />
gibt die Länge <strong>de</strong>s dritten Fel<strong>de</strong>s je<strong>de</strong>r Zeile aus<br />
in<strong>de</strong>x( s1, s2 )<br />
in<strong>de</strong>x gibt die Anfangsposition <strong>de</strong>r Zeichenkette s2 innerhalb <strong>de</strong>r Zeichenkette s1 an;<br />
falls s2 nicht gefun<strong>de</strong>n wird, ergibt dies 0<br />
rechner> awk ’{print in<strong>de</strong>x($3,"mann")}’ daten<br />
sucht in <strong>de</strong>r dritten Spalte nach <strong>de</strong>r Zeichenkette mann<br />
split( s, a [, t ] )<br />
split spaltet die Zeichenkette s in Teilketten auf, die durch das Trennzeichen t bestimmt<br />
sind; die Teilketten wer<strong>de</strong>n <strong>de</strong>n Elementen <strong>de</strong>s Fel<strong>de</strong>s a zugewiesen; Ergebnis <strong>de</strong>r Funktion<br />
ist die Zahl <strong>de</strong>r gefun<strong>de</strong>nen Teilketten.<br />
rechner> awk ’{print split($0,feld), feld[1], feld[2],<br />
feld[3]}’ daten<br />
hier wird als Feldtrennzeichen bzw. benutzt<br />
rechner> awk ’{print split($0,feld,"e"), feld[1], feld[2],<br />
feld[3]}’ daten<br />
hier wer<strong>de</strong>n die Teilketten durch <strong>de</strong>n Buchstaben e getrennt<br />
Als weitere numerische Funktionen sind die mathematischen Funktionen sqrt, log, exp und int <strong>de</strong>finiert<br />
(Beispiel: awk ’{print sqrt(split($0,feld))}’ daten ).
7. Textmusterverarbeitung mit awk 67<br />
7.3. Bedingungen<br />
Bedingungen dienen in erster Linie zur Selektion <strong>von</strong> Zeilen <strong>de</strong>s Eingabetextes. Als Bedingungen sind reguläre<br />
Ausdrücke und Vergleichsausdrücke zugelassen. Reguläre Ausdrücke müssen bei awk in Schrägstriche<br />
/ eingeschlossen wer<strong>de</strong>n.<br />
rechner> awk ’/OTTO|egon/ {print NR, $0}’ daten<br />
gibt die Zeilen, in <strong>de</strong>nen OTTO o<strong>de</strong>r egon vorkommen, mit Zeilennummer<br />
aus<br />
rechner> awk ’/[oO][tT][tT][oO]/ {print NR, $0}’ daten<br />
gibt alle Zeilen aus, in <strong>de</strong>nen Otto vorkommt<br />
rechner> awk ’$2 ~/i|p|m/ {print}’ daten<br />
gibt alle Zeilen aus, in <strong>de</strong>ren zweites Feld i, p o<strong>de</strong>r m vorkommt<br />
rechner> awk ’length > 25’ daten<br />
gibt alle Zeilen aus, <strong>de</strong>ren Länge 25 Zeichen überschreitet<br />
rechner> awk ’NR >= 2 && NR awk ’/elly/,/bodo/ {print}’ daten<br />
selektiert alle Zeilen <strong>von</strong> elly bis bodo<br />
rechner> awk ’NR == 2,NR == 7 {print}’ daten<br />
startet Ausgabe bei Zeile 2 und en<strong>de</strong>t bei Zeile 7<br />
Spezielle Bedingungen<br />
Spezielle Bedingungen übernehmen die Programmsteuerung vor bzw. nach <strong>de</strong>r Hauptschleife.<br />
BEGIN { Aktion }<br />
END { Aktion }<br />
wird vor <strong>de</strong>m Lesen <strong>de</strong>r ersten Eingabezeile ausgeführt; kann benutzt<br />
wer<strong>de</strong>n, um Variablen vorzubesetzen, Überschriften auszugeben<br />
usw.<br />
wird nach <strong>de</strong>m Lesen <strong>de</strong>r letzten Zeile ausgeführt, für die Ausgabe<br />
<strong>von</strong> Statistiken, Meldungen, usw.<br />
rechner> awk ’BEGIN {print "Hier fang ich an"} \<br />
NR==2,NR==7 {print NR, $0} \<br />
END {print "Hier ist das En<strong>de</strong>"}’ daten<br />
Obiges Beispiel zeigt auch die Verwendung <strong>von</strong> awk-Statements über mehrere Zeilen. Die Fortsetzung <strong>de</strong>s<br />
Programmtextes wird am Zeilenen<strong>de</strong> mit Backslash markiert. Ist <strong>de</strong>r Programmtext dagegen in einer eigenen<br />
awk-Programmdatei abgespeichert, so wer<strong>de</strong>n sowohl die <strong>de</strong>n Programmtext kennzeichnen<strong>de</strong>n einfachen<br />
Hochkommas als auch die Backslashes weggelassen.
7. Textmusterverarbeitung mit awk 68<br />
7.4. Aktionen<br />
Aktionen stehen immer in geschweiften Klammern. Innerhalb <strong>von</strong> Aktionen sind folgen<strong>de</strong> Zuweisungen<br />
gültig: = += -= *= /= %=<br />
7.4.1. Ausgabeanweisungen<br />
In awk existieren die bei<strong>de</strong>n Ausgabeanweisungen print und printf. print benutzt die Einstellungen<br />
<strong>de</strong>r eingebauten Variablen OFS, ORS und OFMT; numerische Werte mit Kommastellen wer<strong>de</strong>n in einem<br />
Standardformat ausgegeben, das durch OFMT bestimmt ist (%.6f be<strong>de</strong>utet 6 Nachkommastellen). Ganze<br />
Zahlen und Zeichenkettendaten wer<strong>de</strong>n in ihrer aktuellen Länge ausgegeben. Die Ausgabe kann in eine<br />
Datei umgelenkt o<strong>de</strong>r einem Kommando weitergegeben wer<strong>de</strong>n.<br />
awk ’{print $1*1.14167}’ daten<br />
alle Werte <strong>de</strong>r ersten Spalte wer<strong>de</strong>n mit 1.14167 multipliziert<br />
awk ’{print "Ergebnis: " $1*1.14167 > "/tmp/erg"}’ daten<br />
Ausgabe wird in die Datei /tmp/erg umgelenkt<br />
Die Ausgabeanweisung printf entspricht <strong>de</strong>r gleichnamigen C-Anweisung. Im printf-Kommando<br />
beschreibt ein Steuerstring das Format <strong>de</strong>r Ausgabe. Die Formatbeschreibung für ein Argument wird mit<br />
einem Prozentzeichen % eingeleitet, danach folgt ein Kennbuchstabe, <strong>de</strong>r <strong>de</strong>n Argumententyp beschreibt.<br />
Kennbuchstaben: d Ganzzahl<br />
ld Lange Ganzzahl<br />
f Kommazahl ohne Exponent<br />
e Kommazahl in Exponentenschreibweise<br />
g e o<strong>de</strong>r f<br />
s Zeichenkette<br />
awk versucht eine automatische Typanpassung <strong>de</strong>r Argumente an das spezifizierte Format. Als Steuerzeichen<br />
für die Ausgabe sind die Zeichen \n für Zeilenvorschub und \t für Tabulator zugelassen.<br />
awk ’{printf "%f", $1}’ daten<br />
Ausgabe aller Werte als Kommazahlen mit 6 Nachkommastellen<br />
awk ’{printf "%6.4f\n", $1}’ daten<br />
Ausgabe mit 4 Nachkommastellen und Zeilenvorschub<br />
awk ’{printf "%6.4e\t%s\t%-10s\n", $1, $2, $3}’ daten<br />
Ausgabe einer numerischen und zweier alphanumerischer Spalten, jeweils linksbündig und<br />
durch Tabulatoren getrennt<br />
awk ’{printf "%6.4e\t%s\t%+10s\n", $1, $2, $3}’ daten<br />
Ausgabe wie oben, nur dritte Spalte wird rechtsbündig ausgerichtet<br />
Wenn printf ohne Argumente verwen<strong>de</strong>t wird, entspricht die Ausgabe <strong>de</strong>r <strong>von</strong> print (ganze Zeile wird<br />
ohne Zeilenvorschub ausgegeben).
7. Textmusterverarbeitung mit awk 69<br />
7.4.2. Kontrollanweisungen<br />
Wie in shell-Prozeduren können auch in awk-Programmen Kontrollstrukturen für die Ablaufsteuerung verwen<strong>de</strong>t<br />
wer<strong>de</strong>n.<br />
Die Verbundanweisung<br />
Mehrere Anweisungen können mit geschweiften Klammern zu einer Gruppe <strong>von</strong> Anweisungen zusammengefasst<br />
wer<strong>de</strong>n. Dies nennt man Verbundanweisung.<br />
awk ’{ {wert=$1*3.4} {print $2,$3, "Ergebnis:" wert} }’ daten<br />
Die if-Verzweigung<br />
if ( expression ) Anweisung [; else Anweisung ]<br />
rechner> awk ’{if($1 > 100) \<br />
$1="***"\<br />
else \<br />
sum+=$1 \<br />
print $1} \<br />
END {print "Summe:" sum}’ daten<br />
Obige Verzweigung kann auch in einer Zeile geschrieben wer<strong>de</strong>n:<br />
awk ’{if($1 > 100) $1="***"; else sum+=$1;print $1}<br />
END {print "Summe:" sum}’ daten<br />
Wichtig: Bei <strong>de</strong>r Verzweigung unter awk ist zu beachten, dass im if- bzw. else-Zweig immer nur genau<br />
eine Anweisung stehen darf. Hierbei kann es sich auch um eine Verbundanweisung han<strong>de</strong>ln.<br />
Die while-Schleife<br />
while ( expression ) Anweisung<br />
awk ’{i=1; while(i
7. Textmusterverarbeitung mit awk 70<br />
7.5. Sonstiges<br />
Kommentare wer<strong>de</strong>n im Aktionsteil <strong>von</strong> awk mit <strong>de</strong>m Zeichen # eingeleitet.<br />
Bei Verwendung <strong>von</strong> awk-Aufrufen in shell-Skripten muss <strong>de</strong>r Unterschied zwischen <strong>de</strong>n shell-Variablen<br />
und <strong>de</strong>n Feldvariablen <strong>von</strong> awk beachtet wer<strong>de</strong>n. Die Positionsparameter $1, $2 usw., die mit <strong>de</strong>m Prozeduraufruf<br />
in das shell-Skript übernommen wer<strong>de</strong>n, haben mit <strong>de</strong>n Feldvariablen $1, $2 ... in awk nichts<br />
gemein. Es gibt drei Möglichkeiten, shell-Variable in <strong>de</strong>n awk-Aufruf zu übernehmen.<br />
echo $shell_var | awk ’$1 ...’<br />
echo $1 | awk ’{print $1}’<br />
In diesem Fall wird <strong>de</strong>r Inhalt <strong>de</strong>r shell-Variablen $1 mit <strong>de</strong>m echo-Befehl an <strong>de</strong>n awk-Aufruf weitergeleitet.<br />
awk interpretiert <strong>de</strong>n über die Pipe ankommen<strong>de</strong>n Input als Feld $1, $2 usw..<br />
awk ...’{ ... awk_var ...}’ awk_var=$shell_var filename<br />
awk ’{print user}’ user=$USER daten<br />
Bei dieser Variante wird die Variablenübergabe durch die Definition <strong>von</strong> awk-Variablen mit gleichzeitiger<br />
Zuweisung <strong>de</strong>s Inhalts <strong>de</strong>r shell-Variablen beim awk-Aufruf realisiert. Dabei können auch mehrere awk-<br />
Variable <strong>de</strong>finiert wer<strong>de</strong>n.<br />
awk ...’{ ...<br />
"’$shell_var ’" ...}’ filename<br />
awk ’{var="’$USER’"; print var}’ daten<br />
Die dritte Alternative besteht darin, die shell-Variable direkt im awk-Aufruf zu referenzieren. Dies erfolgt<br />
dadurch, dass die shell-Variable erst in einfache und dann nochmals in doppelte Hochkommas (Anführungszeichen)<br />
eingeschlossen wird.<br />
Sollen dagegen awk-Variable an shell-Variable übergeben wer<strong>de</strong>n, so erfolgt dies durch die bereits bekannten<br />
Zuweisungsmechanismen.<br />
set shell_var = ‘awk ...’{print awk_var ...}’ filename‘<br />
@ shell_var = ‘awk ...’{print awk_var ...}’ filename‘<br />
shell_var = ‘awk ...’{print awk_var ...}’ filename‘<br />
set vname = ‘awk ’{print $2}’<br />
daten‘<br />
Die Zuweisung kommt durch das sofortige Ausführen <strong>de</strong>s awk-Kommandos mittels <strong>de</strong>n umgekehrten einfachen<br />
Hochkommas zustan<strong>de</strong>.
A. Ausgewählte Web-Links<br />
http://ctdp.tripod.com/os/linux/usersgui<strong>de</strong><br />
http://docs.sun.com<br />
http://www.tldp.org<br />
http://www.linuxfibel.<strong>de</strong>