Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12...

67
Jürgen Wolf Shell-Programmierung

Transcript of Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12...

Page 1: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Jürgen Wolf

Shell-Programmierung

1650.book Seite 1 Dienstag, 8. Juni 2010 1:40 13

Page 2: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Auf einen Blick

1 Einführung .......................................................................... 29

2 Variablen ............................................................................. 97

3 Parameter und Argumente ................................................. 153

4 Kontrollstrukturen .............................................................. 173

5 Terminal-Ein- und Ausgabe ................................................ 239

6 Funktionen .......................................................................... 335

7 Signale ................................................................................ 361

8 Rund um die Ausführung von Scripts und Prozessen ......... 377

9 Nützliche Funktionen ......................................................... 411

10 Fehlersuche und Debugging ............................................... 423

11 Reguläre Ausdrücke und grep ............................................. 439

12 Der Stream-Editor sed ........................................................ 457

13 awk-Programmierung ......................................................... 485

14 Linux-UNIX-Kommandoreferenz ........................................ 545

15 Die Praxis ............................................................................ 647

16 GUIs mit Tcl/Tk ................................................................... 727

1650.book Seite 3 Dienstag, 8. Juni 2010 1:40 13

Page 3: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

5

Inhalt

Vorwort des Autors .................................................................................... 23

Vorwort des Gutachters – die Shell: Fluch oder Segen? ............................... 27

Als Autor eines Fachbuchs steht man am Anfang immer vor der Frage, wo man anfangen soll. Fängt man bei Null an, so wird eine Menge Raum für interessantere Aufgabenschwerpunkte verschenkt. Fordert man dem Leser hingegen am Anfang gleich zu viel ab, läuft man Gefahr, dass dieses Buch schnell im Regal verstaubt oder zur Versteigerung angeboten wird. 29

1 Einführung .............................................................................. 29

1.1 Voraussetzungen an den Leser ................................................... 291.1.1 Zielgruppe .................................................................. 301.1.2 Notation ..................................................................... 31

1.2 Was ist eine Shell? ..................................................................... 331.3 Hauptanwendungsgebiet ........................................................... 35

1.3.1 Was ist ein Shellscript? ................................................ 361.3.2 Vergleich mit anderen Sprachen .................................. 37

1.4 Kommando, Programm oder Shellscript? ................................... 391.4.1 Shell-eigene Kommandos (Builtin-Kommando) ............ 391.4.2 Aliase in der Shell ....................................................... 391.4.3 Funktionen in der Shell ............................................... 401.4.4 Shellscripts (Shell-Prozeduren) .................................... 401.4.5 Programme (binär) ...................................................... 40

1.5 Die Shell-Vielfalt ........................................................................ 401.5.1 ksh (Korn-Shell) .......................................................... 411.5.2 Bash (Bourne-Again-Shell) .......................................... 411.5.3 zsh (Z-Shell) ................................................................ 421.5.4 ash (A-Shell) ............................................................... 421.5.5 rbash, rzsh (Restricted Shell) ....................................... 421.5.6 tcsh (TC-Shell) ............................................................. 421.5.7 Welche Shell-Variante wird in diesem Buch

verwendet? ................................................................. 431.5.8 rsh und ssh ................................................................. 44

1.6 Betriebssysteme ......................................................................... 441.7 Crashkurs: einfacher Umgang mit der Kommandozeile ............... 45

1.7.1 Grundlegende Befehle ................................................. 451.7.2 Der Umgang mit Dateien ............................................ 471.7.3 Der Umgang mit Verzeichnissen .................................. 501.7.4 Datei- und Verzeichnisnamen ..................................... 541.7.5 Gerätenamen .............................................................. 551.7.6 Dateiattribute ............................................................. 55

1650.book Seite 5 Dienstag, 8. Juni 2010 1:40 13

Page 4: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

6

1.8 Shellscripts schreiben und ausführen .......................................... 581.8.1 Der Editor ................................................................... 581.8.2 Der Name des Shellscripts ........................................... 591.8.3 Ausführen ................................................................... 591.8.4 Hintergrundprozess starten ......................................... 631.8.5 Ausführende Shell festlegen ........................................ 631.8.6 Kommentare ............................................................... 661.8.7 Stil .............................................................................. 671.8.8 Ein Shellscript beenden ............................................... 681.8.9 Testen und Debuggen von Shellscripts ........................ 701.8.10 Shellscript, das ein Shellscript erstellt und ausführt ...... 71

1.9 Vom Shellscript zum Prozess ...................................................... 731.9.1 Ist das Shellscript ein Prozess? ..................................... 741.9.2 Echte Login-Shell? ...................................................... 75

1.10 Datenstrom ............................................................................... 761.10.1 Ausgabe umleiten ....................................................... 771.10.2 Standardfehlerausgabe umleiten ................................. 791.10.3 Eingabe umleiten ........................................................ 821.10.4 Pipes ........................................................................... 851.10.5 Ein T-Stück mit tee ..................................................... 861.10.6 Ersatzmuster (Wildcards) ............................................. 871.10.7 Brace Extension (Bash und Korn-Shell only) ................ 921.10.8 Muster-Alternativen (Bash und Korn-Shell only)........... 931.10.9 Tilde-Expansion (Bash und Korn-Shell only) ................ 94

1.11 Empfehlung ............................................................................... 95

Keine Programmiersprache kommt ohne Variablen aus. Variablen werden gewöhnlich dazu verwendet, Daten (Zahlen oder Zeichenketten) zu speichern, um zu einem späteren Zeitpunkt wieder darauf zurückzugreifen. Allerdings finden Sie bei der Shellscript-Programmierung im Vergleich zu vielen anderen Programmiersprachen zunächst keine speziellen Datentypen, bspw.für Zeichenketten, Fließkomma- oder Integerzahlen. 97

2 Variablen ................................................................................ 97

2.1 Grundlagen ................................................................................ 972.1.1 Zugriff auf den Wert einer Variablen ........................... 972.1.2 Variablen-Interpolation ............................................... 98

2.2 Zahlen ....................................................................................... 1022.2.1 Integer-Arithmetik (Bourne-Shell, Bash und

Korn-Shell) ................................................................. 1032.2.2 Integer-Arithmetik (Bash und Korn-Shell only) ............. 1052.2.3 bc – Rechnen mit Fließkommazahlen und

mathematische Funktionen ......................................... 1082.3 Zeichenketten ............................................................................ 111

2.3.1 Stringverarbeitung ...................................................... 1122.3.2 Erweiterte Funktionen für Bash und Korn-Shell ............ 119

2.4 Quotings und Kommando-Substitution ...................................... 122

1650.book Seite 6 Dienstag, 8. Juni 2010 1:40 13

Page 5: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

7

2.4.1 Single und Double Quotings ....................................... 1232.4.2 Kommando-Substitution – Back Quotes ...................... 125

2.5 Arrays (Bash und Korn-Shell only) .............................................. 1282.5.1 Werte an Arrays zuweisen ........................................... 1292.5.2 Eine Liste von Werten an ein Array zuweisen

(Bash) ......................................................................... 1302.5.3 Eine Liste von Werten an ein Array zuweisen

(Korn-Shell) ................................................................ 1302.5.4 Zugreifen auf die einzelnen Elemente eines Arrays ....... 131

2.6 Variablen exportieren ................................................................ 1342.7 Umgebungsvariablen eines Prozesses ......................................... 1402.8 Shell-Variablen .......................................................................... 1412.9 Automatische Variablen der Shell .............................................. 146

2.9.1 Der Name des Shellscripts – $0 ................................... 1462.9.2 Die Prozessnummer des Shellscripts – $$ .................... 1472.9.3 Der Beendigungsstatus eines Shellscripts – $? .............. 1482.9.4 Die Prozessnummer des zuletzt gestarteten

Hintergrundprozesses – $! ........................................... 1482.9.5 Weitere vordefinierte Variablen der Shell .................... 1492.9.6 Weitere automatische Variablen für Bash

und Korn-Shell ............................................................ 149

Nachdem Sie sich mit der Ausführung von Shellscripts und den Variablen vertraut machen konnten, folgt in diesem Kapitel die Übergabe von Argumenten an ein Shellscript. Damit wird Ihr Shellscript wesentlich flexibler und vielseitiger. 153

3 Parameter und Argumente ..................................................... 153

3.1 Einführung ................................................................................. 1533.2 Kommandozeilenparameter $1 bis $9 ........................................ 1533.3 Besondere Parameter ................................................................. 154

3.3.1 Die Variable $* ........................................................... 1553.3.2 Die Variable $@ ......................................................... 1573.3.3 Die Variable $# ........................................................... 157

3.4 Der Befehl »shift« ...................................................................... 1583.5 Argumente und Leerzeichen ...................................................... 1603.6 Argumente jenseits von $9 ........................................................ 1613.7 Argumente setzen mit set und Kommando-Substitution ............ 1623.8 getopts – Kommandozeilenoptionen auswerten ......................... 1663.9 Vorgabewerte für Variablen ....................................................... 169

Um aus der »Shell« eine »echte« Programmiersprache zu machen, sind so genannte Kontrollstrukturen erforderlich. Dabei handelt es sich um Entscheidungsverzweigungen oder Schleifen. Eine Programmiersprache ohne Verzweigungen wäre wohl eine Katastrophe. Mit einer Verzweigung können Sie dafür sorgen, dass die weitere Ausführung des Scripts von einer bestimmtenBedingung abhängt und eben entsprechend verzweigt wird. Ebenso sieht es mit den Schleifen aus. Anstatt immer Zeile für Zeile dieselben Anweisungen auszuführen, können Sie diese auch in einer Schleife zusammenfassen. 173

4 Kontrollstrukturen ................................................................. 173

4.1 Bedingte Anweisung mit if ......................................................... 1734.1.1 Kommandos testen mit if ............................................ 1754.1.2 Kommandoverkettung über Pipes mit if ...................... 178

1650.book Seite 7 Dienstag, 8. Juni 2010 1:40 13

Page 6: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

8

4.2 Die else-Alternative für eine if-Verzweigung .............................. 1814.3 Mehrfache Alternative mit elif ................................................... 1834.4 Das Kommando »test« ............................................................... 186

4.4.1 Ganze Zahlen vergleichen ........................................... 1874.4.2 Ganze Zahlen vergleichen mit let (Bash und

Korn-Shell only) .......................................................... 1894.4.3 Zeichenketten vergleichen .......................................... 1904.4.4 Zeichenketten vergleichen (Bash und

Korn-Shell only) .......................................................... 1954.5 Status von Dateien erfragen ....................................................... 1974.6 Logische Verknüpfung von Ausdrücken ..................................... 201

4.6.1 Negationsoperator ! .................................................... 2014.6.2 Die UND-Verknüpfung (-a und &&) ............................ 2024.6.3 Die ODER-Verknüpfung (-o und ||) ............................ 2044.6.4 Klammerung und mehrere logische Verknüpfungen ..... 205

4.7 Short Circuit-Tests – ergebnisabhängige Befehlsausführung ........ 2074.8 Die Anweisung case ................................................................... 210

4.8.1 Alternative Vergleichsmuster ....................................... 2124.8.2 case und Wildcards ..................................................... 2144.8.3 case und Optionen ...................................................... 216

4.9 Schleifen .................................................................................... 2174.10 for-Schleife ................................................................................ 217

4.10.1 Argumente bearbeiten mit for ..................................... 2184.10.2 for und die Dateinamen-Substitution .......................... 2194.10.3 for und die Kommando-Substitution ........................... 2214.10.4 for und Array (Bash und Korn Shell only) ..................... 2244.10.5 for-Schleife mit Schleifenzähler (Bash only) ................. 225

4.11 Die while-Schleife ...................................................................... 2274.12 Die until-Schleife ....................................................................... 2294.13 Kontrollierte Sprünge ................................................................ 232

4.13.1 Der Befehl »continue« ................................................. 2334.13.2 Der Befehl »break« ...................................................... 234

4.14 Endlosschleifen .......................................................................... 236

Bisher wurde die Ausgabe auf dem Bildschirm immer verwendet, ohne dass jemals näher darauf eingegangen wurde. Zur perfekten Interaktion gehört neben der Bildschirmausgabe die Benutzereingabe. In diesem Kapitel werden Sie alles Nötige zur Ein- und Ausgabe erfahren. Außerdem soll der Begriff »Terminal« ein wenig genauer erläutert werden. 239

5 Terminal-Ein- und Ausgabe .................................................... 239

5.1 Von Terminals zu Pseudo-Terminals ........................................... 2395.2 Ausgabe .................................................................................... 242

5.2.1 Der echo-Befehl .......................................................... 2425.2.2 print (Korn-Shell only) ................................................ 2465.2.3 Der Befehl »printf« ...................................................... 246

1650.book Seite 8 Dienstag, 8. Juni 2010 1:40 13

Page 7: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

9

5.2.4 Der Befehl »tput« – Terminalsteuerung ........................ 2505.3 Eingabe ..................................................................................... 255

5.3.1 Der Befehl »read« ........................................................ 2555.3.2 (Zeilenweise) Lesen einer Datei mit read ..................... 2575.3.3 Zeilenweise mit einer Pipe aus einem Kommando

lesen (read) ................................................................. 2585.3.4 Here-Dokumente (Inline-Eingabeumleitung) ................ 2595.3.5 Here-Dokumente mit read verwenden ........................ 2625.3.6 Die Variable IFS .......................................................... 2635.3.7 Arrays einlesen mit read (Bash und Korn-Shell only)..... 2695.3.8 Shell-abhängige Anmerkungen zu read ....................... 2705.3.9 Einzelnes Zeichen abfragen ......................................... 2715.3.10 Einzelne Zeichen mit Escape-Sequenzen abfragen ........ 2725.3.11 Passworteingabe ......................................................... 279

5.4 Umlenken mit dem Befehl »exec« .............................................. 2795.5 Filedeskriptoren ......................................................................... 282

5.5.1 Einen neuen Filedeskriptor verwenden ........................ 2845.5.2 Die Umlenkung <> ...................................................... 287

5.6 Named Pipes ............................................................................. 2885.7 Menüs mit select (Bash und Korn-Shell only) ............................. 2905.8 dialog und Xdialog .................................................................... 295

5.8.1 Entscheidungsfrage --yesno ......................................... 2965.8.2 Nachrichtenbox mit Bestätigung --msgbox .................. 2985.8.3 Hinweisfenster ohne Bestätigung --infobox ................. 2995.8.4 Text-Eingabezeile --inputbox ...................................... 2995.8.5 Ein einfacher Dateibetrachter --textbox ....................... 3005.8.6 Ein Menü --menu ....................................................... 3015.8.7 Auswahlliste zum Ankreuzen --checklist ...................... 3025.8.8 Radiobuttons zum Auswählen --radiolist ..................... 3035.8.9 Fortschrittszustand anzeigen --gauge .......................... 3045.8.10 Verändern von Aussehen und Ausgabe ....................... 3065.8.11 Kleines Beispiel ........................................................... 3065.8.12 Zusammenfassung ....................................................... 307

5.9 gnuplot – Visualisierung von Messdaten .................................... 3085.9.1 Wozu wird gnuplot eingesetzt? ................................... 3095.9.2 gnuplot starten ........................................................... 3095.9.3 Das Kommando zum Plotten ...................................... 3105.9.4 Variablen und Parameter für gnuplot .......................... 3115.9.5 Ausgabe von gnuplot umleiten ................................... 3135.9.6 Variablen und eigene Funktionen definieren ................ 3145.9.7 Interpretation von Daten aus einer Datei .................... 315

1650.book Seite 9 Dienstag, 8. Juni 2010 1:40 13

Page 8: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

10

5.9.8 Alles bitte nochmals zeichnen (oder besser speichern und laden) .................................................. 318

5.9.9 gnuplot aus einem Shellscript heraus starten (der Batch-Betrieb) ..................................................... 319

5.9.10 Plot-Styles und andere Ausgaben festlegen ................. 3215.9.11 Tricks für die Achsen ................................................... 3275.9.12 Die dritte Dimension .................................................. 3325.9.13 Zusammenfassung ....................................................... 334

Je länger die Shellscripts in den vorangegangenen Kapiteln wurden, umso unübersichtlicher wurden sie. Verwendete man dann auch noch die Routinen mehrmals im Script, so steigerte sich der Umfang weiter. In solch einem Fall (und eigentlich fast immer) sind Funktionen die Lösung. Mit Funktionen fassen Sie mehrere Befehle in einem Block zwischen geschweiftenKlammern zusammen und rufen sie bei Bedarf mit einem von Ihnen definierten Funktionsnamen auf. Eine einmal definierte Funktion können Sie jederzeit in Ihrem Script mehrmals aufrufen und verwenden. Funktionen sind somit auch Scripts, welche in der laufenden Umgebung des Shell-Prozesses immer präsent sind, und verhalten sich folglich, als seien Sie interneShell-Kommandos. 335

6 Funktionen ............................................................................. 335

6.1 Definition .................................................................................. 3356.1.1 Definition (Bash und Korn-Shell only) ......................... 3366.1.2 Funktionsaufruf ........................................................... 3366.1.3 Funktionen exportieren ............................................... 3386.1.4 Aufrufreihenfolge ........................................................ 3406.1.5 Who is who ................................................................ 3406.1.6 Aufruf selbst bestimmen ............................................. 3416.1.7 Funktionen auflisten ................................................... 342

6.2 Funktionen, die Funktionen aufrufen ......................................... 3426.3 Parameterübergabe ................................................................... 3446.4 Rückgabewert aus einer Funktion .............................................. 347

6.4.1 Rückgabewert mit return ............................................ 3486.4.2 Rückgabewert mit echo und einer Kommando-

Substitution ................................................................ 3496.4.3 Rückgabewert ohne eine echte Rückgabe

(lokale Variable) .......................................................... 3516.4.4 Funktionen und exit .................................................... 352

6.5 Lokale contra globale Variablen ................................................. 3526.5.1 Lokale Variablen (Bash und Korn-Shell only) ................ 355

6.6 alias und unalias ........................................................................ 3566.7 Autoload (Korn-Shell only) ........................................................ 359

Signale werden zur Steuerung von Prozessen verwendet. Wie ein Prozess auf ein bestimmtes Signal reagiert, können Sie entweder dem System überlassen oder selbst festlegen. 361

7 Signale .................................................................................... 361

7.1 Grundlagen zu den Signalen ...................................................... 3617.2 Signale senden – kill .................................................................. 3657.3 Eine Fallgrube für Signale – trap ................................................. 366

7.3.1 Einen Signalhandler (Funktion) einrichten ................... 3697.3.2 Mit Signalen Schleifendurchläufe abbrechen ................ 3727.3.3 Mit Signalen das Script beenden ................................. 372

1650.book Seite 10 Dienstag, 8. Juni 2010 1:40 13

Page 9: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

11

7.3.4 Das Beenden der Shell (oder eines Scripts) abfangen.... 3737.3.5 Signale ignorieren ....................................................... 3747.3.6 Signale zurücksetzen ................................................... 375

Es reicht einfach nicht aus, nur zu wissen, wie man ein Shellscript schreibt, man muss auch wissen, wie man ein Shellscript ausführen kann. Ein Script ausführen im herkömmlichen Sinn kann jeder – doch gibt es verschiedene Möglichkeiten, wie ein oder mehrere Scripts ausgeführt werden können. Viele der hier genannten Themen wurden zwar bereits das ein oder andereMal angesprochen, jedoch ohne ins Detail zu gehen. 377

8 Rund um die Ausführung von Scripts und Prozessen ............ 377

8.1 Prozessprioritäten ...................................................................... 3778.2 Warten auf andere Prozesse ....................................................... 3788.3 Hintergrundprozess wieder hervorholen .................................... 3798.4 Hintergrundprozess schützen ..................................................... 3808.5 Subshells ................................................................................... 3818.6 Mehrere Scripts verbinden und ausführen (Kommunikation

zwischen Scripts) ....................................................................... 3838.6.1 Datenübergabe zwischen Scripts ................................. 3838.6.2 Rückgabe von Daten an andere Scripts ....................... 3858.6.3 Scripts synchronisieren ................................................ 388

8.7 Jobverwaltung ........................................................................... 3908.8 Shellscripts zeitgesteuert ausführen ........................................... 3938.9 Startprozess- und Profildaten der Shell ...................................... 399

8.9.1 Arten von Initialisierungsdateien ................................. 3998.9.2 Ausführen von Profildateien beim Start einer

Login-Shell .................................................................. 4008.9.3 Ausführen von Profildateien beim Start einer

Nicht-Login-Shell (Bash und Korn-Shell) ..................... 4038.9.4 Zusammenfassung alle Profil- und Startup-Dateien ...... 405

8.10 Ein Shellscript bei der Ausführung ............................................. 4068.10.1 Syntaxüberprüfung ...................................................... 4078.10.2 Expansionen ............................................................... 4078.10.3 Kommandos ............................................................... 407

8.11 Shellscripts optimieren .............................................................. 409

Dieses Kapitel zeigt Ihnen einige sehr hilfreiche »Funktionen«, auf die bisher noch nicht eingegangen werden konnte. Natürlich stellt dies noch lange nicht den kompletten Funktionsumfang der Shell-Funktionen dar, weshalb Sie neben der Linux-UNIX-Kommandoreferenz (Kapitel 14) in diesem Buch im Anhang noch einen Überblick zu allen »Builtins« für die jeweiligeShell finden. 411

9 Nützliche Funktionen ............................................................. 411

9.1 Der Befehl »eval« ....................................................................... 4119.2 xargs .......................................................................................... 4149.3 dirname und basename ............................................................. 4169.4 umask ........................................................................................ 4179.5 ulimit (Builtin) ........................................................................... 4189.6 time .......................................................................................... 4209.7 typeset ...................................................................................... 421

1650.book Seite 11 Dienstag, 8. Juni 2010 1:40 13

Page 10: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

12

Sicherlich haben Sie im Verlauf der vielen Kapitel beim Tippen und Schreiben von Scripts genauso viele Fehler gemacht wie ich und sich gefragt: Was passt denn jetzt wieder nicht? Auch hier gilt, dass Fehler beim Lernen nichts Schlechtes sind. Aber sobald Sie Ihre Scripts auf mehreren oder fremden Rechnern ausführen, sollte dies nicht mehr vorkommen. Daher findenSie in diesem Kapitel einige Hinweise, wie Sie Fehler vermeiden können und, wenn sie bereits aufgetreten sind, wie Sie diesen auf die Schliche kommen. 423

10 Fehlersuche und Debugging .................................................. 423

10.1 Strategien zum Vermeiden von Fehlern ...................................... 42310.1.1 Planen Sie Ihr Script .................................................... 42310.1.2 Testsystem bereitstellen .............................................. 42410.1.3 Ordnung ist das halbe Leben ....................................... 425

10.2 Fehlerarten ................................................................................ 42710.3 Fehlersuche ............................................................................... 428

10.3.1 Tracen mit set -x ......................................................... 42910.3.2 DEBUG und ERR-Signal ............................................... 43110.3.3 Variablen und Syntax überprüfen ................................ 43510.3.4 Eine Debug-Ausgabe hinzufügen ................................. 43610.3.5 Debugging-Tools ........................................................ 437

Die Verwendung von regulären Ausdrücken und grep ist Grundlage eines jeden Linux-UNIX-Anwenders. Und für einen Systemadministrator ist sie sowieso unerlässlich, denn es gibt kein vernünftiges System, in dem sie nicht vorkommen. Eine kurze Einführung zu den regulären Ausdrücken wie auch zum Tool grep (und seinen Nachkommen wie bspw. egrep und fgrep)erscheint daher notwendig. 439

11 Reguläre Ausdrücke und grep ................................................ 439

11.1 Reguläre Ausdrücke – die Theorie .............................................. 43911.1.1 Elemente für reguläre Ausdrücke (POSIX-RE) ............... 44011.1.2 Zusammenfassung ....................................................... 443

11.2 grep ........................................................................................... 44311.2.1 Wie arbeitet grep? ...................................................... 44411.2.2 grep mit regulären Ausdrücken ................................... 44511.2.3 grep mit Pipes ............................................................. 45011.2.4 grep mit Optionen ...................................................... 45111.2.5 egrep (extended grep) ................................................. 45411.2.6 fgrep (fixed oder fast grep) .......................................... 45511.2.7 rgrep ........................................................................... 456

sed ist ein relativ altes Tool, wird aber immer noch vielfach eingesetzt, etwa um Zeilen einer Datei oder eines Datenstroms zu manipulieren. Besonders häufig und gern wird sed zum Suchen und Ersetzen von Zeichenfolgen verwendet. 457

12 Der Stream-Editor sed ........................................................... 457

12.1 Funktions- und Anwendungsweise von sed ................................ 45712.1.1 Grundlegende Funktionsweise .................................... 45712.1.2 Wohin mit der Ausgabe? ............................................. 459

12.2 Der sed-Befehl ........................................................................... 46112.3 Adressen ................................................................................... 46212.4 Kommandos, Substitutionsflags und Optionen von sed .............. 464

12.4.1 Das a-Kommando – Zeile(n) anfügen .......................... 46712.4.2 Das c-Kommando – Zeilen ersetzen ............................ 46812.4.3 Das d-Kommando – Zeilen löschen ............................. 46912.4.4 Die Kommandos h, H, g, G und x – Arbeiten mit

den Puffern ................................................................. 469

1650.book Seite 12 Dienstag, 8. Juni 2010 1:40 13

Page 11: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

13

12.4.5 Das Kommando i – Einfügen von Zeilen ...................... 47112.4.6 Das p-Kommando – Patternspace ausgeben ................ 47212.4.7 Das Kommando q – Beenden ...................................... 47312.4.8 Die Kommandos r und w ............................................ 47312.4.9 Das Kommando s – substitute ..................................... 47512.4.10 Das Kommando y ....................................................... 479

12.5 sed-Scripts ................................................................................. 480

Zwar haben Sie mit der Shell-Programmierung einen Trumpf in der Hand, mit dem Sie wohl fast alle Probleme lösen können. Trotzdem kommt man manchmal an einen Punkt, an dem sich die Lösung als nicht mehr so einfach und relativ umständlich erweist. Hier empfiehlt es sich häufig, auf andere Werkzeuge umzusteigen oder – sofern die Kenntnisse vorhanden sind –sich ein solches Werkzeug (bspw. in C) selbst zu programmieren. Allerdings hat man oft nicht die Zeit und Lust, gleich wieder etwas Neues zu erfinden. Wenn Sie also mit der Shell am Limit sind, ist ein Umstieg auf andere »Werkzeuge« wie awk oder auch Perl sinnvoll. 485

13 awk-Programmierung ............................................................ 485

13.1 Einführung und Grundlagen von awk ......................................... 48513.1.1 History und Versionen von awk ................................... 48613.1.2 Die Funktionsweise von awk ....................................... 487

13.2 Aufruf von awk-Programmen ..................................................... 48813.2.1 Grundlegender Aufbau eines awk-Kommandos ............ 48813.2.2 Die Kommandozeilen-Optionen von awk .................... 49013.2.3 awk aus der Kommandozeile aufrufen ......................... 49113.2.4 awk in Shellscripts aufrufen ......................................... 49113.2.5 awk als eigenes Script ausführen ................................. 493

13.3 Grundlegende awk-Programme und -Elemente .......................... 49313.3.1 Ausgabe von Zeilen und Zeilennummern ..................... 49413.3.2 Felder ......................................................................... 495

13.4 Muster (bzw. Adressen) von awk-Scripts .................................... 50013.4.1 Zeichenkettenvergleiche ............................................. 50013.4.2 Vergleichsausdrücke ................................................... 50113.4.3 Reguläre Ausdrücke .................................................... 50313.4.4 Zusammengesetzte Ausdrücke .................................... 50613.4.5 BEGIN und END ......................................................... 506

13.5 Die Komponenten von awk-Scripts ............................................ 50813.5.1 Variablen .................................................................... 50913.5.2 Arrays ......................................................................... 51313.5.3 Operatoren ................................................................. 51713.5.4 Kontrollstrukturen ...................................................... 523

13.6 Funktionen ................................................................................ 52913.6.1 Mathematische Funktionen ......................................... 52913.6.2 Funktionen für Zeichenketten ..................................... 53013.6.3 Funktionen für die Zeit ............................................... 53513.6.4 Systemfunktionen ....................................................... 53713.6.5 Ausgabefunktionen ..................................................... 537

1650.book Seite 13 Dienstag, 8. Juni 2010 1:40 13

Page 12: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

14

13.6.6 Eingabefunktion .......................................................... 53813.6.7 Benutzerdefinierte Funktionen .................................... 541

13.7 Empfehlung ............................................................................... 544

Zwar besitzen Sie nun sehr fundierte Kenntnisse rund um die Shell-Programmierung – doch benötigt man für den Feinschliff auch noch die Möglichkeit, sein Wissen umzusetzen. Sie haben im Verlauf des Buchs viele Kommandos kennengelernt, Linux/UNIX bietet jedoch noch eine Menge mehr. 545

14 Linux-UNIX-Kommandoreferenz ........................................... 545

14.1 Kurzübersicht ............................................................................ 54614.2 Dateiorientierte Kommandos ..................................................... 554

bzcat – Ausgabe von bzip2-komprimierten Dateien.................... 554cat – Datei(en) nacheinander ausgeben ...................................... 554chgrp – Gruppe von Dateien oder Verzeichnissen ändern ........... 554cksum/md5sum/sum – eine Prüfsumme für eine Datei ermitteln ........................................................................... 555chmod – Zugriffsrechte von Dateien oder Verzeichnissen ändern ................................................................ 556chown – Eigentümer von Dateien oder Verzeichnissen ändern ................................................................ 557cmp – Dateien miteinander vergleichen...................................... 557comm – zwei sortierte Textdateien miteinander vergleichen ....... 558cp – Dateien kopieren ................................................................ 559csplit – Zerteilen von Dateien (kontextabhängig)........................ 559cut – Zeichen oder Felder aus Dateien herausschneiden ............. 560diff – Vergleichen zweier Dateien ............................................... 560diff3 – Vergleich von drei Dateien .............................................. 561dos2unix – Dateien vom DOS- in UNIX-Format umwandeln ...... 562expand – Tabulatoren in Leerzeichen umwandeln ...................... 562file – den Inhalt von Dateien analysieren .................................... 562find – Suchen nach Dateien ........................................................ 563fold – einfaches Formatieren von Dateien................................... 564head – Anfang einer Datei ausgeben........................................... 565less – Datei(en) seitenweise ausgeben ........................................ 565ln – Links auf eine Datei erzeugen .............................................. 565ls – Verzeichnisinhalt auflisten .................................................... 566more – Datei(en) seitenweise ausgeben ...................................... 566mv – Datei(en) und Verzeichnisse verschieben oder umbenennen ...................................................................... 566nl – Datei mit Zeilennummer ausgeben....................................... 567od – Datei(en) hexadezimal bzw. oktal ausgeben ........................ 568paste – Dateien spaltenweise verknüpfen................................... 568pcat – Ausgabe von pack-komprimierten Dateien....................... 568

1650.book Seite 14 Dienstag, 8. Juni 2010 1:40 13

Page 13: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

15

rm – Dateien und Verzeichnisse löschen ..................................... 568sort – Dateien sortieren.............................................................. 569split – Dateien in mehrere Teile zerlegen.................................... 569tac – Dateien rückwärts ausgeben .............................................. 570tail – Ende einer Datei ausgeben ................................................ 570tee – Ausgabe duplizieren .......................................................... 571touch – Anlegen von Dateien oder Zeitstempel verändern.......... 571tr – Zeichen ersetzen bzw. Umformen von Dateien..................... 572type – Kommandos klassifizieren ................................................ 572umask – Dateierstellungsmaske ändern bzw. ausgeben .............. 572uniq – doppelte Zeilen nur einmal ausgeben .............................. 573unix2dos – Dateien vom UNIX- in DOS-Format umwandeln ...... 573wc – Zeilen, Wörter und Zeichen einer Datei zählen ................... 573whereis – Suche nach Dateien.................................................... 574zcat, zless, zmore – (seitenweise) Ausgabe von gunzip-komprimierten Dateien ................................................... 574

14.3 Verzeichnisorientierte Kommandos ............................................ 574basename – gibt den Dateianteil eines Pfadnamens zurück ........ 574cd – Verzeichnis wechseln .......................................................... 574dircmp – Verzeichnisse rekursiv vergleichen ............................... 575dirname – Verzeichnisanteil eines Pfadnamens zurückgeben....... 575mkdir – ein Verzeichnis anlegen ................................................. 575pwd – Ausgeben des aktuellen Arbeitsverzeichnisses .................. 575rmdir – ein leeres Verzeichnis löschen ........................................ 576

14.4 Verwaltung von Benutzern und Gruppe ..................................... 576exit, logout – eine Session (Sitzung) beenden ............................ 576finger – Informationen zu anderen Benutzern abfragen............... 576groupadd, groupmod, groupdel – Gruppenverwaltung (distributionsabhängig) ............................................................... 577groups – Gruppenzugehörigkeit ausgeben.................................. 577id – eigene Benutzer- und Gruppen-ID ermitteln ........................ 577last – An- und Abmeldezeit eines Benutzers ermitteln................ 577logname – Name des aktuellen Benutzers anzeigen .................... 578newgrp – Gruppenzugehörigkeit kurzzeitig wechseln (betriebssystemspezifisch)........................................................... 578passwd – Passwort ändern bzw. vergeben.................................. 578useradd/adduser, userdel, usermod – Benutzerverwaltung (distributionsabhängig) ............................................................... 579who – eingeloggte Benutzer anzeigen......................................... 580whoami – Name des aktuellen Benutzers anzeigen..................... 580

1650.book Seite 15 Dienstag, 8. Juni 2010 1:40 13

Page 14: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

16

14.5 Programm- und Prozessverwaltung ............................................ 580at – Kommando zu einem bestimmten Zeitpunkt ausführen lassen ......................................................................... 580batch – Kommando irgendwann später ausführen lassen ............ 581bg – einen angehaltenen Prozess im Hintergrund fortsetzen ....... 582cron/crontab – Programme in bestimmten Zeitintervallen ausführen lassen ......................................................................... 582fg – einen angehaltenen Prozess im Vordergrund fortsetzen ....... 582jobs – Anzeigen angehaltener bzw. im Hintergrund laufender Prozesse...................................................................... 582kill – Signale an Prozesse mit einer Prozessnummer senden ........ 582killall – Signale an Prozesse mit einem Prozessnamen senden..... 583nice – Prozesse mit anderer Priorität ausführen lassen ................ 583nohup – Prozesse beim Beenden einer Sitzung weiter-laufen lassen............................................................................... 583ps – Prozessinformationen anzeigen ........................................... 584pgrep – Prozesse über ihren Namen finden ................................ 585pstree – Prozesshierachie in Baumform ausgeben ....................... 585renice – Priorität laufender Prozesse verändern........................... 585sleep – Prozesse suspendieren (schlafen legen) ........................... 586su – Ändern der Benutzerkennung (ohne Neuanmeldung) .......... 586sudo – Programm als anderer Benutzer ausführen....................... 587time – Zeitmessung für Prozesse................................................. 587top – Prozesse nach CPU-Auslastung anzeigen (betriebssystemspezifisch)........................................................... 588

14.6 Speicherplatzinformationen ....................................................... 588df – Abfrage des benötigten Speicherplatzes für die Dateisysteme.............................................................................. 588du – Größe eines Verzeichnisbaums ermitteln............................. 588free – verfügbaren Speicherplatz (RAM und Swap) anzeigen (betriebssystemabhängig) ............................................. 589swap – Swap-Space anzeigen (nicht Linux) ................................. 590

14.7 Dateisystem-Kommandos .......................................................... 590badblocks – überprüft, ob ein Datenträger defekte Sektoren hat ............................................................................... 590cfdisk – Partitionieren von Festplatten ....................................... 591dd – Datenblöcke zwischen Device (Low Level) kopieren (und konvertieren)...................................................................... 591dd_rescue – fehlertolerantes Kopieren von Dateiblöcken ........... 593dumpe2fs – zeigt Informationen über ein ext2/ext3-Dateisystem an ........................................................................... 594

1650.book Seite 16 Dienstag, 8. Juni 2010 1:40 13

Page 15: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

17

e2fsck – repariert ein ext2/ext3-Dateisystem.............................. 594fdformat – formatiert eine Diskette ............................................ 595fdisk – Partitionieren von Speichermedien.................................. 596fsck – Reparieren und Überprüfen von Dateisystemen................ 597mkfs – Dateisystem einrichten.................................................... 598mkswap – eine Swap-Partition einrichten................................... 599mount, umount – An- bzw. Abhängen eines Dateisystems......... 600parted – Partitionen anlegen, verschieben, vergrößern oder verkleinern ......................................................................... 601prtvtoc – Partitionstabellen ausgeben ........................................ 601swapon, swapoff – Swap-Datei oder Partition (de)aktivieren ..... 601sync – alle gepufferten Schreiboperationen ausführen ................ 601

14.8 Archivierung und Backup ........................................................... 602bzip2/bunzip2 – (De-)Komprimieren von Dateien ...................... 602compress/uncompress – (De-)Komprimieren von Dateien ......... 603cpio, afio – Dateien und Verzeichnisse archivieren ..................... 603crypt – Dateien verschlüsseln ..................................................... 606dump/restore bzw. ufsdump/ufsrestore – Vollsicherung bzw. Wiederherstellen eines Dateisystems.................................. 606gzip/gunzip – (De-)Komprimieren von Dateien .......................... 609mt – Streamer steuern ................................................................ 610pack/unpack – (De-)Komprimieren von Dateien ........................ 611tar – Dateien und Verzeichnisse archivieren................................ 611zip/unzip – (De-)Komprimieren von Dateien .............................. 615Übersicht zu Dateiendungen und den Pack-Programmen............ 616

14.9 Systeminformationen ................................................................. 617cal – zeigt einen Kalender an ...................................................... 617date – Datum und Uhrzeit .......................................................... 617uname – Rechnername, Architektur und OS ausgeben................ 618uptime – Laufzeit des Rechners .................................................. 618

14.10 System-Kommandos .................................................................. 618dmesg – letzte Boot-Meldung des Kernels anzeigen ................... 618halt – alle laufenden Prozesse beenden ...................................... 619reboot – alle laufenden Prozesse beenden und System neu starten ................................................................................. 619shutdown – System herunterfahren............................................ 619

14.11 Druckeradministration ............................................................... 62014.12 Netzwerkbefehle ....................................................................... 621

arp – Ausgeben von MAC-Adressen............................................ 621ftp – Dateien zu einem anderen Rechner übertragen .................. 622hostname – Rechnername ermitteln........................................... 627

1650.book Seite 17 Dienstag, 8. Juni 2010 1:40 13

Page 16: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

18

ifconfig – Netzwerkzugang konfigurieren.................................... 627mail/mailx – E-Mails schreiben und empfangen (und auswerten) ......................................................................... 629uuencode/uudecode – Text- bzw. Binärdateien codieren ........... 630netstat – Statusinformationen über das Netzwerk ...................... 631nslookup (host/dig) – DNS-Server abfragen ............................... 631ping – Verbindung zu anderem Rechner testen........................... 632Die r-Kommandos von Berkeley (rcp, rlogin, rsh, rwho) .............. 633ssh – sichere Shell auf anderem Rechner starten ......................... 633scp – Dateien kopieren zwischen unterschiedlichen Rechnern .... 634rsync – Replizieren von Dateien und Verzeichnissen ................... 636traceroute – Route zu einem Rechner verfolgen ......................... 638

14.13 Benutzerkommunikation ............................................................ 638wall – Nachrichten an alle Benutzer verschicken......................... 638write – Nachrichten an andere Benutzer verschicken .................. 639mesg – Nachrichten auf die Dialogstation zulassen oder unterbinden ....................................................................... 639

14.14 Bildschirm- und Terminalkommandos ........................................ 640clear – Löschen des Bildschirms .................................................. 640reset – Zeichensatz für ein Terminal wiederherstellen ................. 640setterm – Terminal-Einstellung verändern .................................. 640stty – Terminal-Einstellung abfragen oder setzen........................ 641tty – Terminal-Name erfragen..................................................... 642tput – Terminal- und Cursorsteuerung........................................ 642

14.15 Online-Hilfen ............................................................................. 642apropos – nach Schlüsselwörtern in Manpages suchen ............... 642info – GNU-Online-Manual ........................................................ 643man – die traditionelle Online-Hilfe............................................ 643whatis – Kurzbeschreibung zu einem Kommando....................... 644

14.16 Alles rund um PostScript-Kommandos ....................................... 64414.17 Gemischte Kommandos ............................................................. 645

alias/unalias – Kurznamen für Kommandos vergeben bzw. löschen .............................................................................. 645bc – Taschenrechner ................................................................... 645printenv bzw. env – Umgebungsvariablen anzeigen ................... 645

In diesem Kapitel finden Sie viele Lösungsansätze zu gewöhnlichen Themen, die man relativ häufig in der Praxis benötigt. Natürlich darf man hier keine kompletten Projekte erwarten, sondern eher Scripts, die weiter ausbaufähig sind bzw. als Anregung für umfangreichere Projekte dienen sollen. Es ist auch gar nicht möglich, für jedes Problem eine ultimative Lösung ausdem Hut zu zaubern, dazu sind die individuellen Ansprüche der einzelnen Anforderungen zu unterschiedlich. 647

15 Die Praxis ............................................................................... 647

15.1 Alltägliche Lösungen .................................................................. 64815.1.1 Auf alphabetische und numerische Zeichen prüfen ...... 64815.1.2 Auf Integer überprüfen ............................................... 649

1650.book Seite 18 Dienstag, 8. Juni 2010 1:40 13

Page 17: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

19

15.1.3 echo mit oder ohne -n ................................................ 65115.2 Datei-Utilities ............................................................................ 652

15.2.1 Leerzeichen im Dateinamen ersetzen .......................... 65215.2.2 Dateiendungen verändern ........................................... 65315.2.3 Veränderte Dateien in zwei Verzeichnissen

vergleichen ................................................................. 65515.3 Systemadministration ................................................................ 656

15.3.1 Benutzerverwaltung .................................................... 65615.3.2 Systemüberwachung ................................................... 675

15.4 Backup-Strategien ..................................................................... 68115.4.1 Warum ein Backup? .................................................... 68115.4.2 Sicherungsmedien ....................................................... 68215.4.3 Varianten der Sicherungen .......................................... 68315.4.4 Bestimmte Bereiche sichern ........................................ 68315.4.5 Backup über ssh mit tar ............................................... 68415.4.6 Daten mit rsync synchronisieren .................................. 69115.4.7 Dateien und Verzeichnisse per E-Mail versenden ......... 69415.4.8 Startup-Scripts ............................................................ 697

15.5 World Wide Web und HTML ..................................................... 70415.5.1 Analysieren von access_log (Apache) ........................... 70515.5.2 Analysieren von error_log (Apache) ............................. 709

15.6 CGI (Common Gateway Interface) .............................................. 71115.6.1 CGI-Scripts ausführen ................................................. 71215.6.2 CGI-Environment ausgeben ......................................... 71315.6.3 Einfache Ausgabe als Text ........................................... 71515.6.4 Ausgabe als HTML formatieren ................................... 71715.6.5 Systeminformationen ausgeben ................................... 72015.6.6 Kontaktformular ......................................................... 72215.6.7 Noch ein Tipp ............................................................. 725

Keine Sorge, das Hauptaugenmerk liegt dieses Mal nicht auf dem Erlernen einer weiteren Skriptsprache. Es geht vielmehr darum, das Toolkit Tk vorzustellen, durch das Tcl erst richtig bekannt wurde. 727

16 GUIs mit Tcl/Tk ...................................................................... 727

16.1 Was ist und was kann Tcl/Tk? .................................................... 72716.2 Ein Tcl/Tk-Script starten ............................................................. 72816.3 Variablen ................................................................................... 73016.4 Einfache Ausgabe ...................................................................... 73116.5 Substitutionsmechanismen ........................................................ 731

16.5.1 Variablensubstitution .................................................. 73116.5.2 Befehlssubstitution ..................................................... 73216.5.3 Backslashsubstitution .................................................. 732

16.6 Mathematische Ausdrücke ......................................................... 733

1650.book Seite 19 Dienstag, 8. Juni 2010 1:40 13

Page 18: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

20

16.7 Programmstrukturen .................................................................. 73316.7.1 Verzweigungen ........................................................... 73416.7.2 Schleifen ..................................................................... 73516.7.3 Prozeduren (Funktionen) ............................................. 737

16.8 Listen ........................................................................................ 73816.9 Stringverarbeitung ..................................................................... 73816.10 Dateizugriff ................................................................................ 738

16.10.1 open ........................................................................... 73816.10.2 puts ............................................................................ 73916.10.3 gets ............................................................................ 74016.10.4 read ............................................................................ 740

16.11 Der Rest .................................................................................... 74116.12 Das Tk-Toolkit ........................................................................... 74116.13 Eine Einführung ......................................................................... 74116.14 Eine einfache Schaltfläche – button ............................................ 74316.15 Einzeiliges Textfeld – entry ......................................................... 74416.16 Mehrzeiliger Text und ein Menü – text und menu ...................... 74516.17 Mit Ereignissen verbinden – bind ............................................... 74916.18 Layoutmanager (Geometriemanager) – grid und pack ................ 751

16.18.1 pack ............................................................................ 75116.18.2 grid ............................................................................. 754

16.19 Eine Scrollleiste – scrollbar ......................................................... 75616.20 Weitere Eingabe-Widgets – radiobutton, checkbutton,

scale und spinbox ...................................................................... 75716.20.1 radiobutton ................................................................ 75716.20.2 checkbutton ................................................................ 75816.20.3 scale ........................................................................... 75816.20.4 spinbox ....................................................................... 75916.20.5 Beispiel ....................................................................... 760

16.21 frame und labelframe ................................................................. 76216.22 Listen – listbox ........................................................................... 76216.23 Darstellen von Grafiken – canvas ............................................... 76416.24 Ein geteiltes Fenster – panedwindow ......................................... 76516.25 Widgetübersicht ........................................................................ 76616.26 Dialoge (tk_) .............................................................................. 76716.27 Tile-Erweiterung (ttk_) ............................................................... 76716.28 Weitere Empfehlungen .............................................................. 768

1650.book Seite 20 Dienstag, 8. Juni 2010 1:40 13

Page 19: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

Inhalt

21

769

Anhang .......................................................................................... 769

A.1 Shell-Builtin-Befehle .................................................................. 769A.2 Externe Kommandos .................................................................. 771A.3 Shell-Optionen .......................................................................... 772A.4 Shell-Variablen .......................................................................... 774A.5 Kommandozeile editieren .......................................................... 781A.6 Wichtige Tastenkürzel (Kontrolltasten) ...................................... 783A.7 Initialisierungsdateien der Shells ................................................ 784A.8 Signale ....................................................................................... 785A.9 Sonderzeichen und Zeichenklassen ............................................ 787A.10 Tastenunterschiede zwischen Mac- und PC-Tastaturen .............. 788A.11 Die Buch-CD ............................................................................. 790

Index .......................................................................................................... 791

1650.book Seite 21 Dienstag, 8. Juni 2010 1:40 13

Page 20: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

411

Dieses Kapitel zeigt Ihnen einige sehr hilfreiche »Funktionen«, auf die bisher noch nicht eingegangen werden konnte. Natürlich stellt dies noch lange nicht den kompletten Funktionsumfang der Shell-Funktionen dar, weshalb Sie neben der Linux-UNIX-Kommandoreferenz (Kapitel 14) in diesem Buch im Anhang noch einen Überblick zu allen »Builtins« für die jeweilige Shell finden.

9 Nützliche Funktionen

9.1 Der Befehl »eval«

Ein auf den ersten Blick etwas ungewöhnliches Kommando lautet eval. DieSyntax:

eval Kommandozeile

Mit eval können Sie Kommandos ausführen, als würden Sie diese in derKommandozeile von Tastatur eingeben. Schreiben Sie eval vor einem Kom-mando in die Kommandozeile, wird das Kommando oder die Kommando-folge zweimal ausgeführt. Im Fall einer einfachen Kommandoausführungoder -folge ohne eval ist eine doppelte Bewertung nicht sinnvoll:

you@host > eval ls -l | sort -r...

Anders hingegen sieht dies aus, wenn Sie eine Befehlsfolge in einer Variablenabspeichern wollen, um diese daraufhin ausführen zu lassen:

you@host > LSSORT="ls -l | sort -r"you@host > $LSSORTls: |: Datei oder Verzeichnis nicht gefundenls: sort: Datei oder Verzeichnis nicht gefunden

Sicherlich haben Sie etwas Derartiges schon einmal ausprobiert. Wollen Siedie Befehlsfolge, die Sie in der Variablen LSSORT gespeichert haben, jetzt aus-führen, ist das Kommando eval erforderlich. Die anschließende Fehlermel-dung sagt alles. Verwenden Sie hier am besten mal set -x und sehen Sie sichan, was die Shell aus der Variablen $LSSORT macht:

1650.book Seite 411 Dienstag, 8. Juni 2010 1:40 13

Page 21: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

412

Nützliche Funktionen9

you@host > set -xyou@host > $LSSORT+ ls -l '|' sort -rls: |: Datei oder Verzeichnis nicht gefundenls: sort: Datei oder Verzeichnis nicht gefunden

Das Problem ist hierbei also das Pipe-Zeichen. Dieses müsste von der Shellein zweites Mal bewertet werden, aber stattdessen wird die Befehlsfolgegleich ausgeführt, sodass hier das Pipe-Zeichen als Argument von ls bewertetwird. Sie können die Variable LSSORT drehen und wenden wie Sie wollen, dieShells verwenden grundsätzlich einen Ausdruck nur einmal. Hier greift evalmit seiner doppelten Ausführung ein:

you@host > eval $LSSORT...

Schalten Sie wieder die Option -x ein, können Sie erkennen, dass mithilfevon eval die Variable LSSORT zweimal ausgeführt wird:

you@host > eval $LSSORT+ eval ls -l '|' sort -r++ /bin/ls -l++ sort -r...

eval eignet sich also in Shellscripts für die Ausführung von Kommandos, dienicht im Script enthalten sind, sondern erst während der Laufzeit des Scriptsfestgelegt werden. Sinnvoll ist dies beispielsweise, wenn Sie in Ihrem Scriptein Kommando verwenden, das es auf einem bestimmten System nicht gibt.So können Sie dem etwas erfahreneren Anwender eine Möglichkeit geben,sich sein Kommando selbst zusammenzubasteln:

# Name: aeval

while truedo printf "Kommando(s) : " read eval $REPLYdone

Das Script bei der Ausführung:

you@host > ./aevalKommando(s) : var=halloKommando(s) : echo $var

1650.book Seite 412 Dienstag, 8. Juni 2010 1:40 13

Page 22: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

413

Der Befehl »eval« 9.1

halloKommando(s) : whoyou :0 Mar 30 14:45 (console)Kommando(s) : echo `expr 5 + 11`16Kommando(s) : asdf./script1: line 1: asdf: command not foundKommando(s) : ps PID TTY TIME CMD 3242 pts/41 00:00:00 bash 4719 pts/41 00:00:00 bash 4720 pts/41 00:00:00 psKommando(s) : echo $$4719Kommando(s) : exityou@host > echo $$3242

Man könnte meinen, man hat eine eigene Shell vor sich.

Es gibt noch einen besonders überzeugenden Anwendungsfall von eval. Miteval haben Sie die Möglichkeit, indirekt auf eine Variable zuzugreifen. AlteC-Fanatiker werden feuchte Augen bekommen, da sich das Ganze wie beiden Zeigern in C anhört. Das Prinzip ist eigentlich einfach, aber nicht gleichdurchschaubar. Daher ein Beispiel:

# Name: aeval_cool

Mo=backup1Di=backup2Mi=backup3Do=backup4Fr=backup5Sa=backup6So=backup7

tag=`date +"%a"`

eval backup=\$$tag

echo "Heute wird das Backup-Script $backup ausgeführt"./$backup

Das Script bei der Ausführung (an einem Mittwoch):

you@host > ./aeval_coolHeute wird das Backup-Script backup3 ausgeführt./backup3

1650.book Seite 413 Dienstag, 8. Juni 2010 1:40 13

Page 23: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

414

Nützliche Funktionen9

Durch die Kommando-Substitution wurde veranlasst, dass sich in der Vari-able »tag« die ersten zwei Zeichen des Wochentags befinden. Im Beispiel wares Mittwoch, daher ist tag=Mi. Danach wird es ein wenig seltsam, aber durch-aus logisch:

eval backup=\$$tag

Wollen Sie wissen, was da in den zwei Durchläufen passiert, verwenden Siedoch einfach wieder die Option -x:

set -xeval backup=\$$tagset +x

Ein erneuter Aufruf des Shellscripts:

you@host > ./aeval_cool++ eval 'backup=$Mi'+++ backup=backup3...

Im ersten Durchlauf wird aus \$$tag die Zeichenfolge $Mi. Die Variable »Mi«hat ja den Wert »backup3«, was korrekterweise im zweiten Durchlauf an dieVariable »backup« übergeben wird. Also wird im ersten Durchlauf der Aus-druck backup=\$$tag zu backup=$Mi. Die Zeichenfolge »Mi« hatten Sie jazuvor aus der Kommando-Substitution erhalten. Anschließend durchläufteval den Ausdruck backup=$Mi nochmals, sodass daraus backup=backup3wird. Das erste Dollarzeichen wurde im ersten Durchlauf mit einem Back-slash maskiert und somit vor einem Zugriff der Shell geschützt. Dadurch bliebim zweiten Durchlauf das Dollarzeichen bestehen, sodass hier tatsächlich eineVariable an eine andere Variable überwiesen wurde. Versuchen Sie doch ein-mal, das Ganze ohne eval-Anweisung so kurz und bündig zu gestalten.

9.2 xargs

Unter Linux/UNIX kann man fast alle Befehle auf einzelne oder auch eineganze Liste von Dateien anwenden. Wenn dies nicht möglich sein sollte odersich eine Dateiliste nicht mit einer Wildcard erstellen lässt, könnten Sie dasKommando xargs verwenden. xargs erwartet als Parameter ein Kommando,welches dann auf alle Dateien einer Liste angewandt wird, die von der Stan-dardeingabe gelesen werden. Die Syntax:

1650.book Seite 414 Dienstag, 8. Juni 2010 1:40 13

Page 24: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

415

xargs 9.2

kommando1 xargs kommando2

Hierbei rufen Sie praktisch »kommando2« mit den Argumenten auf, die»kommando1« in der Standardausgabe erstellt. Das Prinzip ist recht einfach.Das Script sucht in einer Schleife mit find nach allen Dateien im aktuellenArbeitsverzeichnis (mit Unterverzeichnissen) mit der Endung ».tmp«.

# Name: aremover1

for var in `find . -name "*.tmp"`do rm $vardone

Der Shell-Guru wird hier gleich Einspruch erheben und sagen, das geht nochkürzer:

find . -name "*.tmp" -exec rm {} \;

Ich erhebe auch keinen Anspruch, beide Lösungen dürften bezüglich derLaufzeit gleich schlecht sein. Was aber ist so schlecht an diesem Beispiel?Stellen Sie sich vor, Ihr Script findet eine Datei mit der Endung ».tmp« gleich1000 Mal im aktuellen Arbeitsverzeichnis. Dann wird nach jedem gefunde-nen Ergebnis das rm-Kommando gestartet. Es werden also 1000 Prozesse hin-tereinander gestartet und wieder beendet. Für einen Multi-User-Rechnerkann das eine ziemliche Last sein. Besser wäre es doch, wenn man dem Kom-mando rm all diese Dateien als Argument übergibt und somit einen einzigenrm-Aufruf vornimmt. Und genau das ist der Sinn von xargs. Also sieht dieVerwendung mit xargs wie folgt aus:

you@host > find . -name "*.tmp" -print | xargs rm

Jetzt werden alle aufgelisteten Files auf einmal über die Pipe an xargs weiter-geleitet. xargs übernimmt diese Argumente in einer Liste und verwendet siewiederum für den rm-Aufruf. Leider treten hier gleich wieder Probleme auf,wenn in einem Dateinamen Leerzeichen enthalten sind, wie dies häufigbspw. bei MP3-Musik- und MS-Windows-Dateien der Fall ist. Das Problemist hier nämlich, dass xargs die Dateien anhand der Leerzeichen teilt.

Hierzu können Sie xargs mit dem Schalter -0 verwenden, dann wird die Zei-chenfolge nicht mehr wegen eines Leerzeichens getrennt, sondern nach einerbinären 0. Allerdings wäre dann noch das Problem mit find, welches Sieebenfalls mit einem Schalter -print0 vermeiden können. So werden mit fol-

1650.book Seite 415 Dienstag, 8. Juni 2010 1:40 13

Page 25: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

416

Nützliche Funktionen9

gender Kommandoangabe auch diejenigen Dateien gelöscht, bei denen sichein Leerzeichen im Namen befindet:

you@host > find . -name "*.tmp" -print0 | xargs –0 rm

Aber nicht immer stehen – wie hier bei rm – die eingelesenen Listen, die inden Linux-UNIX-Befehl eingefügt werden sollen, an der richtigen Stelle. Solautet z. B. die Syntax zum Verschieben von Dateien mittels mv:

mv Dateiname Zielverzeichnis

Hierzu können Sie die Zeichenkette »{}« für die Dateinamen verwenden.Diese Zeichenfolge wird als Platzhalter für die Liste von Argumenten genutzt.Wollen Sie also, wie im Beispiel oben, nicht die Dateien mit der Endung».tmp« löschen, sondern diese zur Sicherheit erst einmal in ein separates Ver-zeichnis verschieben, so lässt sich dies mit dem Platzhalterzeichen wie folgterledigen:

you@host > find . -name "*.tmp" -print0 | \> xargs –0 mv {} $HOME/backups

Natürlich lässt sich mit xargs und den entsprechenden Optionen noch eineMenge mehr anfangen, weshalb das Lesen der Manualpage sehr empfehlens-wert ist.

9.3 dirname und basename

Mit dem Kommando dirname können Sie von einem Dateinamen den Pfad-anteil lösen und mit basename – das Gegenstück zu dirname – können Sie denreinen Dateinamen ohne Pfadanteil ermitteln. Die Syntax:

basename Dateiname [Suffix]dirname Dateiname

Geben Sie bei basename noch ein »Suffix« an, können Sie auch eine eventuellvorhandene Dateiendung entfernen. Ein einfaches Beispiel:

# Name: abasedir

echo "Scriptname : $0"echo "basename : `basename $0`"echo "dirname : `dirname $0`"

# ... oder die Endung entfernen

1650.book Seite 416 Dienstag, 8. Juni 2010 1:40 13

Page 26: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

417

umask 9.4

basename $HOME/Kap005graf.zip .zipbasename $HOME/meinText.txt .txt

Das Script bei der Ausführung:

you@host > $HOME/abasedirScriptname : /home/tot/abasedirbasename : abasedirdirname : /home/totKap005grafmeinText

9.4 umask

Das Kommando umask wird verwendet, um die Benutzerrechte (Lesen (r),Schreiben (w) und Ausführen (x)) für den Benutzer (der ersten drei rwx), dieGruppe (die nächsten drei rwx) und allen anderen (die letzten drei rwx) einzu-schränken, denn standardmäßig würden Dateien mit den Rechten rw-rw-rw(oktal 666) und Verzeichnisse mit rwxrwxrwx (oktal 0777) erstellt.

umask MASKE

Mit dem Kommando umask schränken Sie diese Rechte ein, indem vom Stan-dardwert ein entsprechender umask-Wert abgezogen (subtrahiert) wird. Hier-bei gilt es zu beachten, dass keine Ziffer in umask den Wert 7 überschreitet.Ist etwa eine umask von 26 gesetzt, so würde sich dies beim Erzeugen einerDatei wie folgt auswirken:

Datei : 666umask : 026---------------Rechte : 640

Die Datei würde hier praktisch mit den Rechten 640 (rw-r-----) erzeugt.Bitte beachten Sie außerdem, dass immer nur der Wert des zugehörigen okta-len Satzes subtrahiert wird. Eine umask von 27 hat also nicht den Effekt, dassder Rest von 6 minus 7 von den Rechten für alle anderen in die Gruppe über-tragen wird. Bei einer umask von 27 wären die Rechte, mit der die Datei ange-legt wird, dieselben wie mit 26.

Standardmäßig ist umask auf 0022 bei vielen Distributionen eingestellt. Mit-tlerweile gibt es aber schon Distributionen, die den Benutzer bei der Installa-

1650.book Seite 417 Dienstag, 8. Juni 2010 1:40 13

Page 27: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

418

Nützliche Funktionen9

tion nach einem umask-Wert fragen. Selbstverständlich kann der Wert auchzur Laufzeit auf Benutzerebene verändert werden:

you@host > umask0022you@host > touch afil1you@host > ls -l afil1-rw-r--r-- 1 tot users 0 2010-03-31 07:51 afil1you@host > umask 0177you@host > umask0177you@host > touch afil2you@host > ls -l afil2-rw------- 1 tot users 0 2010-03-31 07:52 afil2

Die Veränderung der umask gilt allerdings nur für die Sitzung der laufendenShell (oder auch des laufenden Pseudo-Terminals). Wollen Sie die Maskedauerhaft verändern, müssen Sie die entsprechende Profil- bzw. Startproze-durdatei verändern. Finden Sie nirgendwo anders einen Eintrag, gilt der Ein-trag in /etc/profile (bei FreeBSD /etc/login.conf):

you@host > grep umask /etc/profileumask 022

Ansonsten hängt es davon ab, ob Sie eine echte Login-Shell verwenden (.pro-file) oder eben ein »xterm« mit der Bash (bspw. .bashrc) bzw. mit der Korn-Shell (.kshrc).

9.5 ulimit (Builtin)

Mit ulimit können Sie den Wert einer Ressourcengrenze ausgeben lassenoder neu setzen. Die Syntax:

ulimit [Optionen] [n]

Wird n angegeben, wird eine Ressourcengrenze auf n gesetzt. Hierbei könnenSie entweder harte (-H) oder weiche (-S) Ressourcengrenzen setzen. Stan-

Hinweis

Wenn Sie beim Anlegen eines Verzeichnisses zuvor die umask verändert haben, setzenSie beim Verzeichnis die Ausführrechte (x), da Sie sonst nicht mehr auf das Verzeichniszugreifen können.

1650.book Seite 418 Dienstag, 8. Juni 2010 1:40 13

Page 28: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

419

ulimit (Builtin) 9.5

dardmäßig setzt ulimit beide Grenzen fest oder gibt die weiche Grenze aus.Mit »Optionen« legen Sie fest, welche Ressource bearbeitet werden soll.Tabelle 9.1 nennt die Optionen, die hierzu verwendet werden können.

Einen Überblick, welche Grenzen auf Ihrem System vorhanden sind, könnenSie sich mit ulimit und der Option -a verschaffen:

you@host > ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedfile size (blocks, -f) unlimitedmax locked memory (kbytes, -l) unlimitedmax memory size (kbytes, -m) unlimitedopen files (-n) 1024pipe size (512 bytes, -p) 8stack size (kbytes, -s) unlimitedcpu time (seconds, -t) unlimitedmax user processes (-u) 2046virtual memory (kbytes, -v) unlimited

Folgende ulimit-Werte werden z. B. gern eingesetzt, um primitive DOS-(Denial of Service-)Angriffe zu erschweren (natürlich sind die Werte auch

Option Bedeutung

-H Harte Grenze. Alle Benutzer dürfen eine harte Grenze herabsetzen, aber nur privilegierte Benutzer können sie erhöhen.

-S Weiche Grenze. Sie muss unterhalb der harten Grenze liegen.

-a Gibt alle Grenzwerte aus.

-c maximale Größe der Speicherabzüge (core-File)

-d maximale Größe eines Datensegments oder Heaps in Kilobyte

-f maximale Anzahl an Dateien (Standardoption)

-m maximale Größe des physischen Speichers in Kilobyte (Bash und Korn-Shell only)

-n maximale Anzahl Filedeskriptoren (plus 1)

-p Größe des Pipe-Puffers (Bash und Korn-Shell only, meistens 512 Bytes)

-s maximale Größe eines Stacksegments in Kilobyte

-t maximale CPU-Zeit in Sekunden

-u maximale Anzahl von User-Prozessen

-v maximale Größe des virtuellen Speichers in Kilobyte

Tabelle 9.1 Optionen für ulimit

1650.book Seite 419 Dienstag, 8. Juni 2010 1:40 13

Page 29: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

420

Nützliche Funktionen9

abhängig von der Anwendung eines Rechners). Am besten trägt man solcheWerte in /etc/profile ein (hierbei sind auch die anderen Profil- und Startup-Dateien in Erwägung zu ziehen). Hier also ein Eintrag in /etc/profile, um demDOS-Angreifer eine höhere Hürde zu setzen:

# Core Dumps verhindernulimit -c 0# keine Dateien größer 512 MB zulassenulimit -f 512000# weiches Limit von max. 250 Filedeskriptorenulimit -S -n 250# weiches Maximum von 100 Prozessenulimit -S -u 100# Speicherbenutzung max. 50 MBulimit -H -v 50000# weiches Limit der Speichernutzung 20 MBulimit -S -v 20000

9.6 time

Mit dem Kommando time können Sie die Zeit ermitteln, die ein Script oderein Kommando zur Ausführung benötigt hat.

time Kommando

Ein Beispiel:

you@host > time sleep 3

real 0m3.029suser 0m0.002ssys 0m0.002syou@host > time find $HOME -user tot...real 0m1.328suser 0m0.046ssys 0m0.113s

Die erste Zeit (real) zeigt Ihnen die komplette Zeit vom Start bis zum Endeeines Scripts bzw. Kommandos an. Die zweite Zeit (user) zeigt die Zeit an, diedas Script bzw. das Kommando im eigentlichen User-Modus verbracht hat,und die dritte Zeit (sys) ist die CPU-Zeit, die der Kommandoaufruf oder dasScript im Kernel-Modus (Festplattenzugriff, System-Calls usw.) benötigt hat.Beide Zeiten zusammen (user+sys) ergeben die Gesamtzeit (real).

1650.book Seite 420 Dienstag, 8. Juni 2010 1:40 13

Page 30: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

421

typeset 9.7

9.7 typeset

Das Kommando typeset hatten wir ja bereits mehrfach eingesetzt. Trotzdemwill ich es nicht versäumen, es hier nochmals mitsamt seinen Optionen zuerwähnen. Sie wissen ja aus Kapitel 2, »Variablen«, dass diese zunächstimmer vom Typ String, also eine Zeichenkette sind, und dass es egal ist, obSie jetzt Zahlen speichern oder nicht.

typset [option] [variable] [=wert]

typeset definiert dabei die Eigenschaft »option« für die Variable »variable«und setzt gegebenenfalls gleich auch den Wert, sofern dieser angegebenwurde. Die Bash bietet auch das Kommando declare an, welches denselbenZweck wie typeset erfüllt. declare ist nicht in der Korn-Shell vorhanden,weshalb man allein schon aus Kompatibilitätsgründen dem Kommandotypeset den Vorzug lassen sollte. Um die entsprechende Eigenschaft für eineVariable zu setzen, muss man das Minuszeichen verwenden. Bspw. mit

typeset -i var=1

definieren Sie die Variable »var« als eine Integer-Variable. Abschalten kön-nen Sie das Ganze wieder mit dem Pluszeichen:

typeset +i var

Nach dieser Kommandoausführung wird »var« wieder wie jede andere nor-male Variable behandelt und ist kein Integer mehr. Tabelle 9.2 listet die Opti-onen auf, die Ihnen hierbei zur Verfügung stehen.

Option Bash ksh Bedeutung

A X Array

I X x Integer-Variable

R X x Konstante (readonly-Variable)

X X x Variable exportieren

F X x Zeigt Funktionen mit ihrer Definition an.

fx X x Exportiert eine Funktion.

+f x Zeigt Funktionen ohne ihre Definition an.

F X Zeigt Funktionen ohne ihre Definition an.

fu x Deklariert Funktionen im Autoload-Mechanismus.

Tabelle 9.2 Optionen für typeset

1650.book Seite 421 Dienstag, 8. Juni 2010 1:40 13

Page 31: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

422

Nützliche Funktionen9

l x Inhalt von Variablen in Kleinbuchstaben umwandeln

u x Inhalt von Variablen in Großbuchstaben umwandeln

Ln x linksbündige Variable der Länge n

Rn x rechtsbündige Variable der Länge n

Zn x Rechtsbündige Variable der Länge n. Leerer Raum wird mit Nullen gefüllt.

Option Bash ksh Bedeutung

Tabelle 9.2 Optionen für typeset (Forts.)

1650.book Seite 422 Dienstag, 8. Juni 2010 1:40 13

Page 32: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

439

Die Verwendung von regulären Ausdrücken und grep ist Grundlage eines jeden Linux-UNIX-Anwenders. Und für einen Systemadministra-tor ist sie sowieso unerlässlich, denn es gibt kein vernünftiges System, in dem sie nicht vorkommen. Eine kurze Einführung zu den regulären Aus-drücken wie auch zum Tool grep (und seinen Nachkommen wie bspw. egrep und fgrep) erscheint daher notwendig.

11 Reguläre Ausdrücke und grep

11.1 Reguläre Ausdrücke – die Theorie

Reguläre Ausdrücke (engl. regular expression) sind eine leistungsfähige for-male Sprache, mit der sich eine bestimmte (Unter-)Menge von Zeichenkettenbeschreiben lässt. Es muss allerdings gleich erwähnt werden, dass reguläreAusdrücke kein Tool oder eine Sammlung von Funktionen sind, die voneinem Betriebssystem abhängig sind, sondern es handelt sich in der Tat umeine echte Sprache mit einer formalen Grammatik, in der jeder Ausdruckeine präzise Bedeutung hat.

Regulären Ausdrücke werden von sehr vielen Texteditoren und Programmeneingesetzt. Meistens verwendet man sie, um bestimmte Muster zu suchenund diese dann durch etwas anderes zu ersetzen. In der Linux-UNIX-Weltwerden reguläre Ausdrücke vorwiegend bei Programmen wie grep, sed undawk oder den Texteditoren vi und Emacs verwendet. Aber auch viele Pro-grammiersprachen, u.a. Perl, Java, Python, Tcl, PHP oder Ruby, bieten regu-läre Ausdrücke an.

Die Entstehungsgeschichte der regulären Ausdrücke ist schnell erzählt. DenUrsprung hat ein Mathematiker und Logiker, Stephen Kleene, gelegt. Er giltübrigens auch als Mitbegründer der theoretischen Informatik, besonders derhier behandelten formalen Sprachen und der Automatentheorie. StephenKleene verwendete eine Notation, die er selbst reguläre Menge nannte. Spä-ter verwendete dann Ken Thompson (der Miterfinder der Programmierspra-che C) diese Notationen für eine Vorgänger-Version des UNIX-Editors ed undfür das Werkzeug grep. Nach der Fertigstellung von grep wurden die regulä-

1650.book Seite 439 Dienstag, 8. Juni 2010 1:40 13

Page 33: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

440

Reguläre Ausdrücke und grep11

ren Ausdrücke in sehr vielen Programmen implementiert. Viele davon benut-zen die mittlerweile sehr bekannte Bibliothek regex von Henry Spencer.

11.1.1 Elemente für reguläre Ausdrücke (POSIX-RE)

Vorwiegend werden reguläre Ausdrücke dazu verwendet, bestimmte Zei-chenketten in einer Menge von Zeichen zu suchen und zu finden. Die nunfolgende Beschreibung ist eine sehr häufig verwendete Konvention, welchevon fast allen Programmen, die reguläre Ausdrücke verwenden, so eingesetztwird. Gewöhnlich wird dabei ein regulärer Ausdruck aus den Zeichen desAlphabets in Kombination mit den Metazeichen (die hier gleich vorgestelltwerden) gebildet.

Zeichenliterale

Als Zeichenliterale bezeichnet man die Zeichen, die wörtlich übereinstimmenmüssen. Diese werden im regulären Ausdruck direkt (als Wort) notiert. Hier-bei besteht je nach System auch die Möglichkeit, alles in hexadezimaler oderoktaler Form anzugeben.

Beliebiges Zeichen

Für ein einzelnes, beliebiges Zeichen verwendet man einen Punkt. DieserPunkt kann dann für ein fast beliebiges Zeichen stehen.

Zeichenauswahl

Die Zeichenauswahl kennen Sie ebenfalls bereits aus der Shell mit den ecki-gen Klammern [auswahl] (siehe Abschnitt 1.10.6). Alles, was Sie in den ecki-gen Klammern schreiben, gilt dann exakt für ein Zeichen aus dieser Auswahl.Bspw. [axz] steht für eines der Zeichen »a«, »x« oder »z«. Dies lässt sichnatürlich auch in Bereiche aufteilen. Bspw. bei der Angabe von [2-7] bestehtder Bereich aus den Ziffern 2 bis 7. Mit dem Zeichen ^ innerhalb der Zei-

Grenzen von »grep«

Sofern Sie Erweiterungen wie Rückwärtsreferenzen verwenden wollen, sei Perl empfoh-len, weil grep hier leistungsmäßig »ins Gras beißt«. Wobei inzwischen ja verschiedeneregexes (POSIX-RE, Extended-RE und pcre) unterschieden werden. Die Unterschiedesind in den Manuals regex und perlre zu finden. Ein Großteil der Scriptsprachen und Pro-gramme stützt sich auf die pcre (Perl Compatible Regular Expression), welche mittler-weile als die leistungsfähigste gilt.

1650.book Seite 440 Dienstag, 8. Juni 2010 1:40 13

Page 34: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

441

Reguläre Ausdrücke – die Theorie 11.1

chenauswahl können Sie auch Zeichen ausschließen. Bspw. mit [^a-f] schlie-ßen Sie die Zeichen »a«, »b«, »c«, »d«, »e« oder »f« aus.

Vordefinierte Zeichenklassen

Manche Implementationen von regulären Ausdrücken bieten auch vordefi-nierte Zeichenklassen an. Sofern Sie keine solch vordefinierten Zeichenklas-sen finden, lässt sich dies auch selbst durch eine Zeichenauswahl in eckigenKlammern beschreiben. Die vordefinierten Zeichenklassen sind letztendlichauch nur eine Kurzform der Zeichenklassen. Tabelle 11.1 nennt einigebekannte vordefinierte Zeichenklassen:

Quantifizierer

Als Quantifizierer bzw. Quantoren bezeichnet man Elemente, die es erlau-ben, den vorherigen Ausdruck in unterschiedlicher Vielfalt in einer Zeichen-kette zuzulassen (siehe Tabelle 11.2).

Vordefiniert Bedeutung Selbstdefiniert

\d eine Zahl [0-9]

\D keine Zahl [^0–9]

\w ein Buchstabe, eine Zahl oder der Unterstrich [a-zA-Z_0-9]

\W kein Buchstabe, keine Zahl und kein Unterstrich [^a-zA-Z_0-9]

\s Whitespace-Zeichen [ \f\n\r\t\v]

\S alle Zeichen außer Whitespace-Zeichen [^\f\n\r\t\v]

Tabelle 11.1 Vordefinierte Zeichenklassen

Quantifizierer Bedeutung

? Der Ausdruck, der voransteht, ist optional, d.h., er kann ein Mal vor-kommen, muss aber nicht. Der Ausdruck kommt also entweder null oder ein Mal vor.

+ Der Ausdruck muss mindestens ein Mal vorkommen, darf aber auch mehrmals vorhanden sein.

* Der Ausdruck darf beliebig oft oder auch gar nicht vorkommen.

{min,} Der voranstehende Ausdruck muss mindestens min-mal vorkommen.

{min,max} Der voranstehende Ausdruck muss mindestens min-mal, darf aber nicht mehr als max-mal vorkommen.

{n} Der voranstehende Ausdruck muss genau n-mal vorkommen.

Tabelle 11.2 Quantifizierer

1650.book Seite 441 Dienstag, 8. Juni 2010 1:40 13

Page 35: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

442

Reguläre Ausdrücke und grep11

Gruppierung

Ausdrücke können auch zwischen runden Klammern gruppiert werden.Einige Tools speichern diese Gruppierung ab und ermöglichen so eine Wie-derverwendung im regulären Ausdruck bzw. der Textersetzung über \1. Eslassen sich hiermit bis zu neun Muster abspeichern (\1, \2 ... \9). Bspw.würde man mit

s/\(string1\) \(string2\) \(string3\)/\3 \2 \1/g

erreichen, dass in einer Textdatei alle Vorkommen von

string1 string2 string3

umgeändert werden in

string3 string2 string1

\1 bezieht sich also immer auf das erste Klammernpaar, \2 auf das zweiteusw.

Alternativen

Selbstverständlich lassen sich auch Alternativen definieren. Hierfür wird dasZeichen | verwendet. Bspw.:

(asdf|ASDF)

bedeutet, dass nach »asdf« oder »ASDF« gesucht wird, nicht aber nach »AsDf«oder »asdF«.

Sonderzeichen

Da viele Tools direkt auf Textdateien zugreifen, finden Sie gewöhnlich nochfolgende Sonderzeichen definiert (siehe Tabelle 11.3):

Sonderzeichen Bedeutung

^ Steht für den Zeilenanfang.

$ Steht für das Zeilenende.

\b Steht für die leere Zeichenkette am Wortanfang oder am Wortende.

\B Steht für die leere Zeichenkette, die nicht den Anfang oder das Ende eines Wortes bildet.

\< Steht für die leere Zeichenkette am Wortanfang.

Tabelle 11.3 Sonderzeichen bei regulären Ausdrücken

1650.book Seite 442 Dienstag, 8. Juni 2010 1:40 13

Page 36: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

443

grep 11.2

Jedes dieser Metazeichen lässt sich auch mit dem Backslash (\) maskieren.

11.1.2 Zusammenfassung

Grau ist alle Theorie und trotzdem ließe sich zu den regulären Ausdrückennoch viel mehr schreiben. Damit das hier Beschriebene für Sie kein Buch mitsieben Siegeln bleibt, soll im nächsten Abschnitt mit grep darauf zurückge-griffen werden. Auch in den Abschnitten zu sed und awk hilft Ihnen das Wis-sen über reguläre Ausdrücke weiter. Mehr zu den regulären Ausdrücken fin-den Sie im Internet unter http://www.lrz-muenchen.de/services/schulung/unterlagen/regul/. Wollen Sie gar wissen, wie man reguläre Ausdrücke selbstprogrammieren kann, finden Sie in »C von A bis Z« einen kleinen Abschnittdazu, welchen Sie auch online auf meiner Webseite unter www.pronix.de ein-sehen können.

11.2 grep

Zum Suchen nach bestimmten Mustern in Dateien wird häufig grep verwen-det. grep steht für »Global search for a Regular Expression and Print out mat-ched lines«. Es gibt mittlerweile vier verschiedene solcher grep-Kommandos:

� grep – der Klassiker

� egrep – Kurzform für »Extended Grep«, also ein erweitertes grep, welchesim Gegensatz zu grep noch mehr reguläre Ausdrücke versteht

\> Steht für die leere Zeichenkette am Wortende.

\d Ziffer

\D keine Ziffer

\s Whitespace

\S kein Whitespace

. Zeichen

+ voriger Ausdruck mindestens ein Mal

* voriger Ausdruck beliebig oft

? voriger Ausdruck null oder ein Mal

Sonderzeichen Bedeutung

Tabelle 11.3 Sonderzeichen bei regulären Ausdrücken (Forts.)

1650.book Seite 443 Dienstag, 8. Juni 2010 1:40 13

Page 37: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

444

Reguläre Ausdrücke und grep11

� fgrep – Kurzform für »Fixed Grep« (oder gern auch »Faster Grep«), wel-ches weniger reguläre Ausdrücke als grep versteht und dadurch erheblichschneller bei der Suche in großen Dateien ist als grep oder egrep

� rgrep – Kurzform für »Rekursive Grep«. rgrep wird für die rekursiveSuche in Unterverzeichnissen verwendet. Es muss allerdings erwähntwerden, dass rgrep die Unterverzeichnisse auch komplett durchläuft.

11.2.1 Wie arbeitet grep?

Das grep-Kommando sucht nach einem Muster von Zeichen in einer odermehreren Datei(en). Enthält das Muster ein Whitespace, muss es entspre-chend gequotet werden. Das Muster ist also entweder eine gequotete Zei-chenkette oder ein einfaches Wort. Alle anderen Worte hinter dem Musterwerden von grep dann als Datei(en) verwendet, in denen nach dem Mustergesucht wird. Die Ausgabe sendet grep an die Standardausgabe (meistensdem Bildschirm) und nimmt auch keinerlei Änderung an der Eingabedateivor. Die Syntax: grep wort datei1 [datei2] ... [datein]

Ein viel zitiertes Beispiel:

you@host > grep john /etc/passwdjohn:x:1002:100:Jonathan Wolf:/home/john:/bin/csh

grep sucht hier nach dem Muster »john« in der Datei /etc/passwd. Bei Erfolgwird die entsprechende Zeile auf dem Bildschirm ausgegeben. Wird das Mus-ter nicht gefunden, gibt es keine Ausgabe und auch keine Fehlermeldung.Existiert die Datei nicht, wird eine Fehlermeldung auf dem Bildschirm ausge-geben.

Als Rückgabewert von grep erhalten Sie bei einer erfolgreichen Suche denWert 0. Wird ein Muster nicht gefunden, gibt grep 1 als Exit-Code zurück,und wird die Datei nicht gefunden, wird 2 zurückgegeben. Der Rückgabe-wert von grep ist in den Shellscripts häufig von Bedeutung, da Sie relativ sel-ten die Ausgaben auf dem Bildschirm machen werden. Und vom Exit-Codehängt es häufig auch ab, wie Ihr Script weiterlaufen soll.

grep gibt den Exit-Code 0 zurück, also wurde ein Muster gefunden:

you@host > grep you /etc/passwd > /dev/nullyou@host > echo $?0

1650.book Seite 444 Dienstag, 8. Juni 2010 1:40 13

Page 38: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

445

grep 11.2

grep gibt den Exit-Code 1 zurück, somit wurde kein übereinstimmendesMuster gefunden:

you@host > grep gibtsnicht /etc/passwd > /dev/nullyou@host > echo $?1

grep gibt den Exit-Code 2 zurück, die Datei scheint nicht zu existieren (oderwurde, wie hier, falsch geschrieben):

you@host > grep you /etc/PASSwd > /dev/null 2>&1you@host > echo $?2

grep kann seine Eingabe neben Dateien auch von der Standardeingabe odereiner Pipe erhalten.

you@host > grep echo < script1echo "Ausgabe1"echo "Ausgabe2"you@host > cat script1 | grep echoecho "Ausgabe1"echo "Ausgabe2"

Auch grep kennt eine ganze Menge regulärer Ausdrücke. Metazeichen helfenIhnen dabei, sich mit grep ein Suchmuster zu erstellen. Und natürlich unter-stützt auch grep viele Optionen, die Sie dem Kommando mitgeben können.Auf einige dieser Features wird in den folgenden Abschnitten eingegangen.

11.2.2 grep mit regulären Ausdrücken

Das grep eines der ältesten Programme ist, das reguläre Ausdrücke kennt,wurde bereits beschrieben. Welche regulären Ausdrücke grep so alles kennt,wird in Tabelle 11.4 aufgelistet. Allerdings kennt grep nicht alle regulärenAusdrücke, weshalb es außerdem das Kommando egrep gibt, das noch eini-ges mehr versteht (siehe Tabelle 11.5).

Zeichen Funktion Beispiel Bedeutung

^ Anfang der Zeile '^wort' Gibt alle Zeilen aus, die mit »wort« beginnen.

$ Ende der Zeile 'wort$' Gibt alle Zeilen aus, die mit »wort« enden.

Tabelle 11.4 Reguläre Ausdrücke von grep

1650.book Seite 445 Dienstag, 8. Juni 2010 1:40 13

Page 39: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

446

Reguläre Ausdrücke und grep11

^$ komplette Zeile '^wort$' Gibt alle vollständige Zeilen mit dem Muster »wort« aus.

. beliebiges Zeichen 'w.rt' Gibt alle Zeilen aus, die ein »w«, einen beliebigen Buchstaben und »rt« enthalten (bspw. »wort«, »wert«, »wirt«, »wart«).

* beliebig oft 'wort*' Gibt alle Zeilen aus mit beliebig vielen (oder auch gar keinen) des vorangegangenen Zeichens.

.* beliebig viele 'wort.*wort' Die Kombination .* steht für beliebig viele Zeichen.

[] ein Zeichen aus dem Bereich

'[Ww]ort' Gibt alle Zeilen aus, welche Zei-chen in dem angegebenen Bereich (im Beispiel nach »Wort« oder »wort«) enthalten.

[^] kein Zeichen aus dem Bereich

'[^A-VX-Za-z]ort' Die Zeichen, die im angegebe-nen Bereich stehen, werden nicht beachtet (im Beispiel kann »Wort« gefunden werden, nicht aber »Tort« oder »Sort« und auch nicht »wort«).

\< Anfang eines Wortes

'\<wort' Findet hier alles, was mit »wort« beginnt (bspw. »wort«, »wort-reich« aber nicht »Vorwort« oder »Nachwort«).

\> Ende eines Wortes

'wort\>' Findet alle Zeilen, welche mit »wort« enden (bspw. »Vorwort« oder »Nachwort«, nicht aber »wort« oder »wortreich«).

\<\> ein Wort '\<wort\>' Findet exakt »wort« und nicht »Nachwort« oder »wortreich«.

\(...\) Backreferenz '\(wort\)' Merkt sich die eingeschlossenen Muster vor, um darauf später über \1 zuzugreifen. Bis zu neun Muster können auf diese Weise gespeichert werden.

x\{m\} exakte Wiederho-lung des Zeichens

x\{3\} Exakt 3-maliges Auftreten des Zeichens »x«.

Zeichen Funktion Beispiel Bedeutung

Tabelle 11.4 Reguläre Ausdrücke von grep (Forts.)

1650.book Seite 446 Dienstag, 8. Juni 2010 1:40 13

Page 40: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

447

grep 11.2

Zu diesen regulären Ausdrücken kennt egrep noch folgende:

Hier jetzt einige Beispiele zu den regulären Ausdrücken mit grep. FolgendeDatei mit folgendem Muster sei hierfür gegeben:

you@host > cat mrolymia.datLarry Scott USA 1965 1966Sergio Oliva USA 1967 1968 1969Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975Franco Columbu Argentinien 1976 1981Chris Dickerson USA 1982Samir Bannout Libanon 1983Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Einfachstes Beispiel:

you@host > grep Libanon mrolymia.datSamir Bannout Libanon 1983

Hierbei werden alle Zeilen ausgegeben, die den regulären Ausdruck »Liba-non« in der Datei mrolympia.dat enthalten. Nächstes Beispiel:

x\{m,\} mindestens Wie-derholung des Zeichens

x\{3,\} Mindestens ein 3-maliges Auf-treten des Zeichens »x«.

x\{m,n\} mindestens bis maxmiale Wieder-holung des Zei-chens

x\{3,6\} Mindestens ein 3-maliges Auf-treten des Zeichens »x« bis maxi-mal 6-maliges Auftreten (nicht mehr).

Zeichen Funktion Beispiel Bedeutung

+ mindestens ein Mal 'wort[0–9]+' Es muss mindestens eine Ziffer aus dem Bereich vorkommen.

? null oder ein Mal 'wort[0–9]?' Eine Ziffer aus dem Bereich darf, muss aber nicht vorkommen.

| Alternativen 'worta|wort' das Wort »worta« oder »wortb«

Tabelle 11.5 Weitere reguläre Ausdrucke von egrep

Zeichen Funktion Beispiel Bedeutung

Tabelle 11.4 Reguläre Ausdrücke von grep (Forts.)

1650.book Seite 447 Dienstag, 8. Juni 2010 1:40 13

Page 41: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

448

Reguläre Ausdrücke und grep11

you@host > grep '^S' mrolymia.datSergio Oliva USA 1967 1968 1969Samir Bannout Libanon 1983

Hiermit werden alle Zeilen ausgegeben, die mit dem Zeichen »S« beginnen.Das Caret-Zeichen (^) steht immer für den Anfang einer Zeile. Nächstes Bei-spiel:

you@host > grep '1$' mrolymia.datFranco Columbu Argentinien 1976 1981Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991

Hiermit werden alle Zeilen ausgegeben, die mit dem Zeichen »1« enden. DasDollarzeichen steht hierbei für das Ende einer Zeile. Nächstes Beispiel:

you@host > grep Sergio Yates mrolymia.datgrep: Yates: Datei oder Verzeichnis nicht gefundenmrolymia.dat:Sergio Oliva USA 1967 1968 1969

Hier wurde ein Fehler gemacht, da grep das dritte Argument bereits als eineDateiangabe, in der nach einem Muster gesucht wird, behandelt. EinenNamen wie »Sergio Yates« gibt es nämlich nicht in dieser Datei. Damit dasMuster auch komplett zum Vergleich für grep verwendet wird, müssen Sie eszwischen Single Quoten stellen.

you@host > grep 'Sergio Yates' mrolymia.datyou@host > echo $?1

Das nächste Beispiel:

you@host > grep '197.' mrolymia.datArnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975 Franco Columbu Argentinien 1976 1981

Wer war hier in den 70-ern am besten. Damit geben Sie alle Zeilen aus, indenen sich das Muster »197« und ein weiteres beliebiges einzelnes Zeichenbefindet. Sofern Sie wirklich nach einem Punkt suchen, müssen Sie einBackslash davor setzen. Dies gilt übrigens für alle Metazeichen. Nächstes Bei-spiel:

you@host > grep '^[AS]' mrolymia.datSergio Oliva USA 1967 1968 1969Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975Samir Bannout Libanon 1983

1650.book Seite 448 Dienstag, 8. Juni 2010 1:40 13

Page 42: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

449

grep 11.2

Hier wird jede Zeile ausgegeben, die mit dem Zeichen »A« und »S« beginnt.Nächstes Beispiel:

you@host > grep '^[^AS]' mrolymia.datLarry Scott USA 1965 1966Franco Columbu Argentinien 1976 1981Chris Dickerson USA 1982Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Jetzt werden alle Zeilen ausgegeben, die nicht ([^AS]) mit dem Zeichen »A«oder »S« beginnen. Nächstes Beispiel:

you@host > grep '^S.*Libanon' mrolymia.datSamir Bannout Libanon 1983

Hier liefert grep die Zeile zurück, die mit einem Zeichen »S« beginnt, gefolgtvon beliebig vielen Zeichen und die Zeichenfolge »Libanon« enthält. Nächs-tes Beispiel:

you@host > grep '^S.*196.' mrolymia.datSergio Oliva USA 1967 1968 1969

Ähnlich wie im Beispiel zuvor werden die Zeilen ausgegeben, die mit demZeichen »S« beginnen und die Textfolge »196« mit einem beliebigen weiterenZeichen enthalten. Nächstes Beispiel:

you@host > grep '[a-z]\{14\}' mrolymia.datArnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997

Gibt alle Zeilen aus, in denen 14 Buchstaben hintereinander Kleinbuchstabensind. Nächstes Beispiel:

you@host > grep '\<Col' mrolymia.datFranco Columbu Argentinien 1976 1981Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Hier werden alle Zeilen ausgegeben, in denen sich ein Wort befindet, das mit»Col« beginnt. Nächstes Beispiel:

you@host > grep 'A\>' mrolymia.datLarry Scott USA 1965 1966Sergio Oliva USA 1967 1968 1969Chris Dickerson USA 1982

1650.book Seite 449 Dienstag, 8. Juni 2010 1:40 13

Page 43: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

450

Reguläre Ausdrücke und grep11

Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Das Gegenteil vom Beispiel zuvor. Hier werden alle Zeilen ausgegeben, indenen sich ein Wort befindet, welches mit »A« endet. Nächstes Beispiel:

you@host > grep '\<Coleman\>' mrolymia.datRonnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Hierbei wird nach einem vollständigen Wort »Coleman« gesucht. Also kein»AColeman« und auch kein »Colemann«. Nächstes Beispiel:

you@host > grep '\<.*ien.*\>' mrolymia.datFranco Columbu Argentinien 1976 1981Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997

Hier werden alle Zeilen ausgegeben, die ein Wort mit der Zeichenfolge »ien«enthalten. Davor und danach können sich beliebig viele Zeichen befinden.Nächstes Beispiel:

you@host > grep '\<[G].*ien\>' mrolymia.datDorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997

Hier wird nach einem Wort gesucht, das mit dem Großbuchstaben »G«beginnt und mit der Zeichenfolge »ien« endet. Dazwischen können sichbeliebig viele Zeichen befinden.

Natürlich können Sie grep auch dazu verwenden, in einem ganzen Verzeich-nis die Dateien nach einem bestimmten Muster abzusuchen. Hier können Siewieder das Metazeichen * als Platzhalter für alle Dateien im Verzeichnis ver-wenden:

you@host > grep 'echo' *...

Hier werden im aktuellen Arbeitsverzeichnis alle Dateien nach dem Muster»echo« durchsucht.

11.2.3 grep mit Pipes

Häufig wird grep in Verbindung mit einer Pipe verwendet. Hierbei überge-ben Sie grep dann statt einer Datei als drittes Argument für die Eingabe dieDaten durch eine Pipe von der Standardausgabe eines anderen Kommandos.Bspw.:

you@host > ps -ef | grep $USER

1650.book Seite 450 Dienstag, 8. Juni 2010 1:40 13

Page 44: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

451

grep 11.2

Hiermit bekommen Sie alle Prozesse aufgelistet, deren Eigentümer der aktu-elle User ist bzw. die dieser gestartet hat. Dabei gibt ps seine Ausgabe durchdie Pipe an die Standardeingabe von grep. grep wiederum sucht dann in derentsprechenden Ausgabe nach dem entsprechenden Muster und gibt gegebe-nenfalls die Zeile(n) aus, die mit dem Muster übereinstimmen. Natürlichkönnen Sie hierbei auch, wie schon gehabt, die regulären Ausdrücke verwen-den. Die Syntax:

kommando | grep muster

Ebenfalls relativ häufig wird grep mit ls zur Suche bestimmter Dateien ver-wendet:

you@host > ls | grep '^scr.*'script1script1~script2script2~

Im Abschnitt zuvor haben Sie mit

you@host > grep 'echo' *

alle Dateien nach dem Muster »echo« durchsucht. Meistens, mir ging eszumindest so, haben Sie neben einfachen Scripts auch noch eine MengeDokumentationen im Verzeichnis herumliegen. Wollen Sie jetzt auch nochdie Dateinamen mithilfe regulärer Ausdrücke eingrenzen, können Sie dieAusgabe von grep an die Eingabe eines weiteren grep-Aufrufs hängen:

you@host > grep 'echo' * | grep 'scrip.*'...

Jetzt wird in allen Dateien des aktuellen Verzeichnisses nach dem Muster»echo« gesucht (erstes grep) und anschließend (zweites grep) werden nur dieDateien berücksichtigt, die mit der Zeichenfolge »scrip« beginnen, gefolgtvon beliebig vielen weiteren Zeichen.

11.2.4 grep mit Optionen

Natürlich bietet Ihnen grep neben den regulären Ausdrücken auch noch eineMenge weiterer Optionen an, mit denen Sie das Verhalten, insbesondere derStandardausgabe steuern können. Im folgenden Abschnitt finden Sie eineListe mit den interessantesten und gängigsten Optionen (was bedeutet, dassdies längst nicht alle sind). Reichen Ihnen diese Optionen nicht aus, müssen

1650.book Seite 451 Dienstag, 8. Juni 2010 1:40 13

Page 45: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

452

Reguläre Ausdrücke und grep11

Sie in den Manualpages blättern. Als Beispiel dient wieder unsere Dateimrolympia.dat:

you@host > cat mrolymia.datLarry Scott USA 1965 1966Sergio Oliva USA 1967 1968 1969Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975Franco Columbu Argentinien 1976 1981Chris Dickerson USA 1982Samir Bannout Libanon 1983Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

� -n – damit wird die Zeile zurückgegeben, in der das Suchmuster gefundenwurde, und zwar mit zusätzlich n Zeilen vor und nach dieser Zeile. In derPraxis:

you@host > grep –1 Sergio mrolymia.datLarry Scott USA 1965 1966Sergio Oliva USA 1967 1968 1969Arnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975

Hierbei wurde vor und nach der gefundenen Zeile jeweils eine zusätzlicheZeile ausgegeben. Dies ist in der Praxis bei einen etwas längeren Text mitmehreren Abschnitten sehr sinnvoll, da man häufig mit einem ausgegebe-nen Teilsatz aus der Zeile 343 nicht viel anfangen kann.

� -A anzahl – ähnlich wie -n, nur dass noch zusätzlich »anzahl« Zeilen mitausgegeben werden, die nach der Zeile enthalten sind.

� -B anzahl – wie -A anzahl, nur dass »anzahl« Zeilen ausgegeben werden,die vor der Zeile enthalten sind, in welcher der reguläre Ausdruck abge-deckt wurde.

� -c – (für count) hiermit wird nur die Anzahl von Zeilen ausgegeben, diedurch den regulären Ausdruck abgedeckt werden.

you@host > grep -c '.*' mrolymia.dat9you@host > grep -c 'USA' mrolymia.dat5

Hier wurden zum Beispiel die Daten aller Sportler ausgegeben und beimnächsten Ausdruck nur noch die Teilnehmer aus den »USA«. 5 von den 9ehemaligen Titelträgern kamen also aus den USA.

1650.book Seite 452 Dienstag, 8. Juni 2010 1:40 13

Page 46: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

453

grep 11.2

� -h – bei dieser Option wird der Dateiname, in dem der Suchstring gefun-den wurde, nicht vor den Zeilen mit ausgegeben:

you@host > grep 'Ausgabe1' *script1:echo "Ausgabe1"script1~:echo "Ausgabe1"you@host > grep -h 'Ausgabe1' *echo "Ausgabe1"echo "Ausgabe1"

� -i – es wird nicht zwischen Groß- und Kleinschreibung unterschieden. EinBeispiel:

you@host > grep 'uSa' mrolymia.datyou@host > grep -i 'uSa' mrolymia.datLarry Scott USA 1965 1966Sergio Oliva USA 1967 1968 1969Chris Dickerson USA 1982Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

� -l – bei dieser Option werden nur die Dateinamen aufgelistet, in deneneine Zeile mit dem entsprechenden Suchmuster gefunden wurde:

you@host > grep -l echo *Kap 1 bis 9.docksh.2010-02-02.linux.i386script1script1~script2script2~

� -n – hiermit wird vor jeder gefundenen Zeile in der Datei die laufende Zei-lennummer mit ausgegeben. Bspw.:

you@host > grep -n echo *script1:4: echo "Die Ausgabe wollen wir nicht!!!"script1:7:echo "Ausgabe1"script1:11:echo "Ausgabe2"...script2:9: echo "Starte script1 ..."script2~:7: echo "Warte ein wenig ..."script2~:9: echo "Starte script1 ..."

� -q – bei Verwendung dieser Option erfolgt keine Ausgabe, sondern eswird 0 zurückgegeben, wenn ein Suchtext gefunden wurde, oder 1, wenn

1650.book Seite 453 Dienstag, 8. Juni 2010 1:40 13

Page 47: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

454

Reguläre Ausdrücke und grep11

Suche erfolglos war. Diese Option wird gewöhnlich in Shellscripts ver-wendet, bei denen man sich meistens nur dafür interessiert, ob eine Dateieinen Suchtext enthält oder nicht.

� -s – mit dieser Option werden keine Fehlermeldungen ausgegeben, wenneine Datei nicht existiert.

you@host > grep test /etc/gibtsnichtgrep: /etc/gibtsnicht: Datei oder Verzeichnis nicht gefundenyou@host > grep -s test /etc/gibtsnichtyou@host >

� -v – damit werden alle Zeilen ausgegeben, die nicht durch den angegebe-nen regulären Ausdruck abgedeckt werden:

you@host > grep -v 'USA' mrolymia.datArnold Schwarzenegger Österreich 1970 1971 1972 1973 1974 1975Franco Columbu Argentinien 1976 1981Samir Bannout Libanon 1983Dorian Yates Grossbritannien 1992 1993 1994 1995 1996 1997

� -w – eine Abkürzung für \<wort\>. Damit wird nach ganzen Wörtern imSuchtext gesucht:

you@host > grep 'Lib' mrolymia.datSamir Bannout Libanon 1983you@host > grep -w 'Lib' mrolymia.datyou@host >

11.2.5 egrep (extended grep)

Wie Sie bereits erfahren haben, lassen sich mit egrep erweiterte und weitauskomplexere reguläre Ausdrücke bilden. Allerdings wird Otto Normalverbrau-cher (wie auch die meisten Systemadministratoren) mit grep mehr als zufrie-den sein. Komplexere reguläre Ausdrücke gehen natürlich enorm auf Kostender Ausführgeschwindigkeit. Übrigens können Sie einen egrep-Aufruf auchmit grep und der Option -E realisieren:

grep -E regex Datei

Einige Beispiele mit egrep:

you@host > egrep 'Colombo|Columbu' mrolymia.datFranco Columbu Argentinien 1976 1981you@host > egrep 'Colombo|Columbu|Col' mrolymia.dat

1650.book Seite 454 Dienstag, 8. Juni 2010 1:40 13

Page 48: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

455

grep 11.2

Franco Columbu Argentinien 1976 1981Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Wissen Sie nicht genau, wie man einen bestimmten Namen schreibt, könnenSie mit | mehrere Suchmuster miteinander verknüpfen. Im Beispiel wirdnach »Colombo« oder »Columbu« und im zweiten Beispiel noch zusätzlichnach einer Zeichenfolge »Col« gesucht. Kennen Sie mehrere Personen mitdem Namen »Olivia« und wollen nach einem »Sergio Olivia« und »GregorOlivia« suchen, können Sie das Ganze folgendermaßen definieren:

egrep '(Sergio|Gregor) Olivia' mrolympia.dat

Nächstes Beispiel:

you@host > egrep 'y+' mrolymia.datLarry Scott USA 1965 1966Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991

Mit dem + wird nach mindestens einem »y«-Zeichen gesucht. Wollen Siebspw. alle Zeilen einer Datei ausgeben, die mit mindestens einem oder meh-reren Leerzeichen beginnen, können Sie dies folgendermaßen definieren:

you@host > egrep '^ +' mrolymia.dat

Nächstes Beispiel:

you@host > egrep 'US?' mrolymia.datLarry Scott USA 1965 1966Sergio Oliva USA 1967 1968 1969Chris Dickerson USA 1982Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004

Wissen Sie jetzt nicht, ob die Zeichenfolge für die USA »USA« oder »US« lau-tet, können Sie das Fragezeichen verwenden. Damit legen Sie fest, dass hierein Zeichen sein darf, aber nicht muss. Somit wird sowohl die Zeichenfolge»US« als auch »USA« gefunden.

11.2.6 fgrep (fixed oder fast grep)

fgrep wird vorwiegend für »schnelle greps« verwendet (fgrep = fast grep).Allerdings ist nur eine Suche nach einfachen Zeichenketten möglich. Regu-läre Ausdrücke gibt es hierbei nicht – ein Vorteil, wenn Sie nach Zeichenfol-gen suchen, die Metazeichen enthalten.

1650.book Seite 455 Dienstag, 8. Juni 2010 1:40 13

Page 49: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

456

Reguläre Ausdrücke und grep11

11.2.7 rgrep

Weil grep nur im aktuellen Verzeichnis sucht, wurde rgrep entwickelt. rgrepsucht mit einer rekursiven Suche in Unterverzeichnissen nach entsprechen-den Mustern. Bei einer großen Verzeichnistiefe kann dies allerdings proble-matisch werden. Wenn Sie bspw. nur das aktuelle Verzeichnis und die direk-ten Unterverzeichnisse durchsuchen wollen, so würde auch ein grep wie

grep regex */*

ausreichen. Mehr zu rgrep entnehmen Sie bitte der Manualpage.

1650.book Seite 456 Dienstag, 8. Juni 2010 1:40 13

Page 50: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

791

Index

!-Operator 201!(...|...) 94!=-Operator 190, 195# 66#! 64$! 148$# 149, 157$$ 147$(...) 128$* 149, 155$? 148$@ 149, 157$_ 149${var:+wort} 170${var:=wort} 170${var:?wort} 171${var:-wort} 170$0 146$1 .. $9 153$HOME/.profile 405%-Operator 234& 63&&-Operator 201, 202' (Single Quote) 123( ) (Subshell) 381(DoubleQuote) 123* 89*(...|...) 94+(...|...) 94. 51.. 51.-Operator 66, 137, 338/ 50/dev/null 79/dev/pts 241/dev/ttyp* 241/etc/inputrc 406/etc/profile 400, 405/etc/termcap 250/home 50< - Operator 195<< (Here-Dokument) 259<> (Umlenkung) 287==-Operator 195=-Operator 190

> - Operator 195? 89?(...|...) 94@(...|...) 94` (Back Quotes) 125| (Pipe) 85|| - Operator 201||-Operator 204~ 94

A

access_log 705adduser 668afio 603alias 39, 356, 645allow_null_glob_expansion 145anacron 394Apache

access_log 705error_log 709Fehler-Logdateien analysieren 709Logdatei analysieren 705

apropos 642Argumente 153

Anzahl 157jenseits $9 161Leerzeichen 160setzen 162Vorgabewerte setzen 169

Arithmetische Operatoren 108arp 621Arrays 128

einlesen mit read 269Elemente löschen 131for 224kopieren 132Liste von Werten zuweisen 130löschen 131String-Manipulation 132Werte zuweisen 129Zugriff auf alle Elemente 131Zugriff auf Elemente 131

ash 42A-Shell 42

1650.book Seite 791 Dienstag, 8. Juni 2010 1:40 13

Page 51: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

792

Index

at 580Aufrufreihenfolge 340Ausführzeit ermitteln 420Ausgabe 242

Bildschirm löschen 250echo 46, 242print 246printf 246tput 250Umlenken mit exec 279

autoload 359Autovervollständigung 782awk 117, 485

$0 512Adressen 500Aktionsteil 488Anzahl Felder 496ARGC 511, 512ARGV 511, 512arithmetische Operatoren 518Array 513assoziative Arrays 514Aufbau 488Aufruf 488Ausgabefunktionen 537Bedingungsoperatoren 521BEGIN-Block 506benutzerdefinierte Funktionen 541break 528close 539continue 528Dekrementoperator 521do while-Schleife 526Einführung 485Eingabefunktionen 538Elemente 493END-Block 506ENVIRON 512exit 528Felder ausgeben 495Feldoperator 522FILENAME 512FNR 512formatierte Ausgabe 497for-Schleife 525FS 512function 541Funktionen 529gawk 486

getline 538gsub 531History 486if-Verzweigung 524index 532Inkrementoperator 521Kommandozeile 491Kommandozeilen-Argumente 511Kommandozeilenoptionen 490Kontext 517Kontrollstrukturen 523Leerzeichen 522length 532logische Operatoren 520match 533mathematische Funktionen 529Muster 500Musterteil 488nawk 486next 528NF 496, 512NR 494, 512oawk 486ODER-Verknüpfung 506OFMT 512OFS 512Operatoren 517Optionen 490ORS 512print 537reguläre Ausdrücke 503RLENGTH 512RS 512RSTART 512Script 493, 508Shebang-Zeile 508Shellscript 491split 533sprintf 533Sprungbefehle 528strftime 535Stringfunktionen 118, 530sub 531SUBSEP 512substr 534Syntax 488Systemfunktionen 537systime 535tolower 534

1650.book Seite 792 Dienstag, 8. Juni 2010 1:40 13

Page 52: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

793

Index

toupper 534UND-Verknüpfung 506Variablen 509Vergleichsausdrücke 501Vergleichsoperatoren 501Versionen 486vordefinierte Variablen 512while-Schleife 526Wörter ausgeben 495Zeichenkettenfunktionen 530Zeichenkettenvergleiche 500Zeilen ausgeben 494Zeilennummer ausgeben 494Zeitfunktionen 535zusammengesetzte Ausdrücke 506

B

Back Quotes 125Backslashsubstitution 732Backup 681

cpio 694gzip 694mail 694rsync 691Sicherungsmedien 682ssh 684Strategien 683synchronisieren 691tar 684uuencode 694Varianten 683Warum 681

badblocks 590basename 416, 574BASH 151Bash 41BASH_ENV 144, 404, 406bash_login 401, 405bash_logout 406bash_profile 401, 405BASH_VERSINFO 144BASH_VERSION 151bashrc 401, 404batch 581bc 108, 645

bin 110dec 110hex 110

Befehlssubstitution 732Benutzerdefinierte Signale 361Benutzeroberfläche 33

grafische Oberfläche 33Kommandozeile 33

Benutzer-Verwaltung 656, 668Betriebssystem 44bg 392, 582Bourne-Again-Shell 41Bourne-Shell 41Brace Extension 92break 234Builtin 39, 340, 341, 409Builtin-Befehle 769bunzip2 602bzcat 554bzip2 602

C

cal 617case 210

esac 210Kommandozeilenoptionen 216Vergleichsmuster 212Wildcards 214

cat 47, 554cd 52, 574cdable_vars 145CDPATH 141cfdisk 591CGI-Scripte 711

ausführen 712chgrp 554chmod 60, 556chown 557cksum 555clear 640cmp 557COLUMNS 142comm 558command.com 33command_oriented_history 145compress 603continue 233Core-Dump 362cp 48, 559cpio 603, 694cron 394, 582

1650.book Seite 793 Dienstag, 8. Juni 2010 1:40 13

Page 53: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

794

Index

cron-daemon 394crontab 394

-e 398Eintrag (Syntax) 396-l 398-r 398

crypt 606csh 41C-Shell 41csplit 559cut 112, 560

D

Daemon-Prozess 73daemons 394

anacron 394cron 394

date 617Dateiart 56Dateiattribute 55Dateien 55

Attribute 55auflisten 47ausgeben 47Dateityp 56Dateityp ermitteln 198Endung verändern 653erzeugen 49Existenz überprüfen 198kopieren 48löschen 49Namen 54Namen mit Leerzeichen 652Status ermitteln 197suchen und ersetzen 475umbennenen 49Utilities 652vergleichen 655verschieben 49versteckte 92Wörter zählen 48Zeichen ersetzen 479Zeichen zählen 48Zeilen einfügen 467, 471Zeilen ersetzen 468Zeilen löschen 469Zeilen zählen 48zeilenweise einlesen 257

Zeitstempel vergleichen 198Zugriffsrechte 56Zugriffsrechte ermitteln 198

Dateikreierungsmaske 417Dateiname 54Dateinamen-Substitution 219Dateityp 56Datenfluss 76Datenstrom 76

Ausgabe umleiten 77Eingabe umleiten 82Fehlerausgabe umleiten 79

dd 271, 591dd_rescue 593Debuggen 70, 423, 428

DEBUG 431Debug-Ausgabe 436ERR 431LINENO 433Syntax überprüfen 436Tracen 429Variablen überprüfen 435

Debugging-Tools 437DEBUG-Signal 431Deskriptoren 282Device File 55df 588, 675dialog 295

--backtitle 306--checklist (Auswahlliste zum ankreuzen)

302--clear 306--gauge (Fortschrittszustand) 304--infobox (Hinweisfenster ohne Bestäti-

gung) 299--inputbox (Text-Eingabezeile) 299--menu (Menü) 301--msgbox (Nachrichtenbox mit Bestätigung)

298--radiolist (Radiobuttons zum auswählen)

303--textbox (Dateibetrachter) 300--title 306--yesno (Entscheidungsfrage) 296

Dialogfenster 295diff 560diff3 561dig 631dircmp 575

1650.book Seite 794 Dienstag, 8. Juni 2010 1:40 13

Page 54: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

795

Index

dirname 416, 575DIRSTACK 144dmesg 618do 218done 218dos2unix 562Double Quotes 123Druckerbefehle 620du 588dump 606dumpe2fs 594

E

e2fsck 594echo 46, 242, 341, 651

gnuplot 320Echtzeit-Prozesse 378Editieren

Kommandozeile 781EDITOR 142Editor 58egrep 443, 454Eingabe 255

Arrays einlesen 269einzelnes Zeichen einlesen 271Funktionstasten abfragen 272Here-Dokument 259Inline-Eingabeumleitung 259Passworteingabe 279Pfeiltasten abfragen 272read 255Tastendruck abfragen 271umlenken mit exec 279

elif 183else 181Endlosschleifen 236ENV 142, 402, 406env 645ERRNO 151error_log 709ERR-Signal 431Ersatzmuster 87

* 89? 89Brace Extension 92Muster-Alternativen 93Zeichenbereiche 90Zeichenklassen 91

esac 210Escape-Sequenzen 245, 787EUID 151eval 411exec 279exit 68, 352, 576Exit-Status 69, 148expand 562Expansion 87Expansionen 407export 134Exportieren

Funktionen 338expr 103Externe Kommandos 771

F

Fallunterscheidungcase 210

false 228, 237FCEDIT 142fdformat 595fdisk 596Fehler-Logdateien analysieren 709Fehlersuche 423, 428

DEBUG 431Debug-Ausgabe 436ERR 431LINENO 433Syntax überprüfen 436Tools 437Tracen 429Variablen überprüfen 435

fg 392, 582fgrep 444, 455fi 173FIFO-Prinzip 288FIGNORE 144file 562Filedeskriptoren 282, 287

Anwendungsgebiete 285neuen Filedeskriptor verwenden 284Standarddeskriptoren 282

find 563finger 576Fließkomma-Zahlen 108fold 564

1650.book Seite 795 Dienstag, 8. Juni 2010 1:40 13

Page 55: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

796

Index

for 217Arrays 224Dateinamen-Substitution 219do 218done 218Kommando-Substitution 221mit Schleifenzähler 225Variablen-Interpolation 224

FPATH 143, 359free 589fsck 597ftp 622FUNCNAME 346function 336Funktionen 40, 335

alias 356Auflisten 342Aufruf 336Aufrufreihenfolge 340autoload 359Bibliothek 339Definition 335exit 352exportieren 338FUNCNAME 346function 336globale Variablen 352Kommando-Substitution 349local 355lokale Variablen 351, 352Name der Funktion ermitteln 346Parameterübergabe 344return 348Rückgabe mehrerer Werte 350Rückgabewert 347Typ bestimmen 341Typ ermitteln 340unalias 357weitere Funktionen aufrufen 342

Funktionstasten abfragen 272

G

gawk 486Gerätedatei 55Gerätename 55Gerätesignale 361getline 538

getopts 166getty 239glob_dot_filenames 145Globbing 87GLOBIGNORE 144gnuplot 308

3D-Plots 332Abstand der Ausgabe 326Anwendungsgebiete 309ausführen 309Ausgabe 313Batch-Betrieb 319Batch-Datei 319Beschriftung 323echo 320eigene Funktionen 314Größe der Ausgabe 326Here-Dokument 320Laden eines Plots 319Linien 324neu zeichnen 318Offset für X-Achse 327Parameter 311plot 310Plot-Style festlegen 321Punkte 324replot 318Samplerate verändern 327Shellscript 320speichern eines Plots 319splot 332Textdaten interpretieren 315Variablen 311, 314Zeit-Daten 329

grep 443egrep 454Grundlagen 444Optionen 451Pipes 450reguläre Ausdrücke 445

groupadd 577groupdel 577groupmod 577GROUPS 144groups 577gsub 531gunzip 609gzip 609, 694

1650.book Seite 796 Dienstag, 8. Juni 2010 1:40 13

Page 56: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

797

Index

H

halt 619head 565, 666Heim-Verzeichnis 50Here-Dokument 259

gnuplot 320read 262

Hintergrundprozess 63, 379$! 148bg 392fg 392hervorholen 379Job-Verwaltung 390nohup 380SIGHUP 380

histchars 146HISTCMD 151HISTCONTROL 144HISTFILE 143HISTFILESIZE 144HISTIGNORE 144history_control 146HISTSIZE 143Holdspace 458HOME 141host 631HOSTFILE 144HOSTNAME 145hostname 627hostname_completion_file 146HOSTTYPE 151

I

id 577if 173

elif 183else 181Kommandos testen 175Kommandoverkettung 178Pipes 178

ifconfig 627IFS 141, 263IGNOREEOF 145index 532info 643init 698

Runlevel 698

init-Scripte 697Inline-Eingabeumleitung 259INPUTRC 145inputrc 406Integerarithmetik 103, 105

J

jobs 391, 582Job-Verwaltung 390

bg 392fg 392jobs 391

K

kill 365, 391, 582killall 583Kommando 39

adduser 579, 668afio 603Alias 39alias 356, 645apropos 642arp 621at 580auf mehreren Rechnern ausführen 676awk 117, 485badblocks 590basename 416, 574batch 581bc 108, 645bg 392, 582Builtin 39, 341, 769bunzip2 602bzcat 554bzip2 602cal 617cat 47, 554cd 52, 574cfdisk 591chgrp 554chmod 60, 556chown 557cksum 555clear 640cmp 557comm 558compress 603

1650.book Seite 797 Dienstag, 8. Juni 2010 1:40 13

Page 57: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

798

Index

cp 48, 559cpio 603, 694cron 394, 582crypt 606csplit 559cut 112, 560date 617dd 271, 591dd_rescue 593df 588, 675diff 560diff3 561dig 631dircmp 575dirname 416, 575dmesg 618dos2unix 562Drucker- 620du 588dump 606dumpe2fs 594e2fsck 594echo 46, 242, 651egrep 454env 645ereignisabhängige Ausführung 207eval 411exec 279exit 68, 576expand 562export 134expr 103Extern- 771fdformat 595fdisk 596fg 392, 582fgrep 455file 562find 563finger 576fold 564free 589fsck 597ftp 622Funktionen 40getopts 166grep 443groupadd 577groupdel 577

groupmod 577groups 577gunzip 609gzip 609, 694halt 619head 565, 666host 631hostname 627id 577ifconfig 627info 643jobs 391, 582kill 365, 582killall 583last 577, 666less 565let 106, 189ln 565logname 578logout 76, 576ls 47, 566mail 629, 694mailx 629, 694man 643md5 555md5sum 555mesg 639mkdir 53, 575mkfifo 288mkfs 598mknod 288mkswap 599more 566mount 600mt 610mv 49, 566netstat 631newgrp 578nice 377, 583nl 567nohup 380, 583nslookup 631od 568pack 611parted 601passwd 578, 668paste 114, 568pcat 568pgrep 585

1650.book Seite 798 Dienstag, 8. Juni 2010 1:40 13

Page 58: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

799

Index

ping 632Postscript- 645print 246printenv 645printf 246Programme 40prtvtoc 601ps 73, 584pstree 585pwd 50, 575rcp 633read 255, 409reboot 619renice 377, 585reset 640restore 606return 348rgrep 456r-Kommandos 633rlogin 633rm 49, 568rmdir 53, 576rsh 633rsync 636, 691rwho 633scp 634sed 117select 290set 162setterm 640Shellscript 40shift 158shutdown 619sleep 586sort 569split 569ssh 633, 676, 684ssh-keygen 635stty 271, 641su 586sudo 587sum 555swap 590swapoff 601swapon 601sync 601tac 570tail 570tar 611, 684

tee 86, 571test 186time 420, 587top 73, 588touch 49, 571tput 250, 642tr 115, 572traceroute 638trap 366tty 395, 642type 340, 572typeset 107, 139, 421ufsdump 606ufsrestore 606ulimit 418umask 417, 572umount 600unalias 357, 645uname 618uncompress 603uniq 573unix2dos 573unpack 611unset 101unzip 615uptime 618useradd 579, 668userdel 579usermod 579uudecode 630uuencode 630, 694wait 378wall 638wc 48, 573whatis 644whereis 574who 45, 580whoami 45, 580write 639xargs 414zcat 574zip 615zless 574zmore 574

Kommandoersetzung 125Kommando-Substitution 122, 125, 221

erweiterte Syntax 128Funktionen 349Kommandozeilen-Parameter setzen 164

1650.book Seite 799 Dienstag, 8. Juni 2010 1:40 13

Page 59: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

800

Index

Kommandoverkettung 178Kommandozeile 33

Autovervollständigung 782Crashkurs 45editieren 781

Kommandozeilenoptionenauswerten 166getopts 166

Kommandozeilen-Parameter 153Anzahl überprüfen 188Setzen 162über $9 161verschieben 158Vorgabewerte setzen 169

Kommentare 66Konstante 102, 426Kontrollstrukturen 173

bedingte Anweisung 173case 210elif 183else 181for 217if 173Kommandos testen 175Schleifen 217Sprünge 232until 229while 227

Kontrolltasten 783Konvertierungen 110Korn-Shell 41ksh 41kshrc 402, 404, 406

L

LANG 143last 577, 666LC_ALL 143LC_COLLATE 143LC_CTYPE 143LC_MESSAGES 143length 532less 565let 106, 189Limits

ermitteln 418setzen 418

LINENO 150, 433

LINES 143ln 565local 355Logdateien analysieren 705Login-Shell 75Logische Ausdrücke

Klammern 205Logische Fehler 428Logische Verknüpfung 201LOGNAME 141logname 578logout 76, 576ls 47, 566

M

MAIL 141mail 629, 694MAILCHECK 141MAILPATH 142MAILTO 398mailx 629, 694man 643MANPATH 142match 533MATCHTYPE 145Mathematische Funktionen 108md5 555md5sum 555Menüs

select 290mesg 639mingetty 240mkdir 53, 575mkfifo 288mkfs 598mknod 288mkswap 599more 566mount 600mt 610Muster-Alternativen 93mv 49, 566

N

Named Pipe 288, 387nawk 486Negationsoperator 201

1650.book Seite 800 Dienstag, 8. Juni 2010 1:40 13

Page 60: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

801

Index

netstat 631newgrp 578nice 377, 583nl 567NLSPATH 143no_exit_on_failed_exec 146noclobber 146nohup 380, 583nolinks 146notify 146nslookup 631

O

oawk 486od 568ODER-Operator 201

|| 201-o 201

ODER-Verknüpfung 204OLDPWD 150Operator

arithmetisch 108logische 201Negation 201

OPTARG 150OPTERR 145OPTIND 150OSTYPE 151

P

pack 611Parameter 153parted 601passwd 578, 668Passworteingabe 279paste 114, 568PATH 142Patternspace 458pcat 568pdksh 41Perl 38pgrep 585PID 73ping 632Pipes 85

grep 450named 288, 387

PIPESTATUS auswerten 179Pipestatus auswerten 180zeilenweise einlesen 258

PIPESTATUS 145, 179Plattenplatzbenutzung 656Plotter

gnuplot 308Positionsparameter

verschieben 158Postscript-Kommandos 645PPID 150print 246printenv 645printf 246Profildaten 399profile 401Programm 39, 40PROMPT_COMMAND 151Prozess 73

Ausführzeit ermitteln 420Daemon 73Echtzeit 378gestoppt 379Hintergrundprozess 379Job-Verwaltung 390Kennung 73nohup 380Nummer 73Priorität 377Priorität erhöhen 378Priorität verringern 378Profildaten 399ps 73Shellscript 73Startprozess 399Subshell 73, 381Timesharing 377top 73Umgebungsvariablen 140warten 378

Prozesse beendenSIGKILL 663SIGTERM 663

Prozesskennung 73Prozess-Verwaltung 659prtctoc 601ps 73, 584PS1 142PS2 142

1650.book Seite 801 Dienstag, 8. Juni 2010 1:40 13

Page 61: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

802

Index

PS3 143PS4 71, 143pstree 585pts 240PWD 150pwd 50, 575

Q

Quantifizierer 441Quoting 122

Back Quotes 125Double Quotes 123Leerzeichen 124Single Quotes 123Zeilenumbruch 124

R

RANDOM 150rbash 42rcp 633read 255, 409

Arrays einlesen 269Ausgabetext vorgeben 270Default-Variable 271Here-Dokument 262Optionen 256Pipes 258REPLY 271systemabhängiges 270Taste abfragen 272zeilenweise einlesen einer Datei 257

readonly 102reboot 619Rechnen 103

Fließkomma-Zahlen 108mathematische Funktionen 108

Reguläre Ausdrücke 439, 442, 443, 478$ 442* 443+ 443. 440? 443^ 442Alternativen 442awk 503beliebiges Zeichen 440Einführung 439

Elemente (POSIX) 440grep 445Gruppierung 442Quantifizierer 441sed 466Sonderzeichen 442Zeichenauswahl 440Zeichenklassen 441Zeichenliterale 440

Remote Shell 44renice 377, 585REPLY 150, 271reset 640restore 606Restrict Shell 42return 348rgrep 444, 456r-Kommandos 633rlogin 633rm 49, 568rmdir 53, 576rsh 44, 633rsync 636, 691Rückgabewert 348Runlevel 698rwho 633rzsh 42

S

Scheduling-Algorithmus 377Schleifen 217

abbrechen mit Signalen 372break 234continue 233Endlosschleifen 236for 217Sprünge 232until 229while 227

scp 634SECONDS 150Secure Shell 44sed 117, 457

Adressen 462a-Kommando 467arbeiten mit Puffern 469Ausgabe 459, 472beenden 473

1650.book Seite 802 Dienstag, 8. Juni 2010 1:40 13

Page 62: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

803

Index

c-Kommando 468Dateien 460d-Kommando 469Flags 465g-Flag 475G-Kommando 469g-Kommando 469globale Ersetzung 475Grundlagen 457H-Kommando 469h-Kommando 469Holdspace 458, 469i-Kommando 471Kommandos 464Optionen 465Patternspace 458, 469p-Kommando 472Probleme 478Puffer 457, 469q-Kommando 473reguläre Ausdrücke 466, 478r-Kommando 473Schreiben 459Scripts 480s-Kommando 475suchen und ersetzen 475Syntax 458Versionen 457w-Kommando 473x-Kommando 469y-Kommando 479Zeichen ersetzen 479Zeilen einfügen 467, 471Zeilen ersetzen 468Zeilen löschen 469

select 290do 291done 291PS3 292REPLY 291

set 162, 342-u 435-x 429

setterm 640sh 41SHACCT 142Shebang-Zeile 64SHELL 142

Shell 33Alias 39Builtin 39Builtin-Befehle 769externe Kommandos 771Festlegen 63Funktionen 40History 34Initialisierungsdateien 784Kommandozeile editieren 781Login-Shell 75Optionen 772Profildaten 399Signale 785Sonderzeichen 787Startprozess 399Subshell 63, 381Tastaturkürzel 783Variablen- 774Zeichenklassen 788

Shelloptionen 772SHELLOPTS 145Shellscript 39, 40

andere Programmiersprachen 37ausführen 58, 59, 137ausführen ohne Subshell 137Ausführrecht setzen 60awk 491beenden 68beenden mit Signalen 372Datenrückgabe an Scripte 385Datenübergabe zwischen Scripte 383debuggen 70, 423erstellen 58Exit-Status 69Expansionen 407Fehlerarten 427Fehlersuche 423Funktionen 335gnuplot verwenden 320Hintergrundprozess 63Kommandofehler 428Kommandos 407Kommentare 66Kommunikation zwischen Scripten 383Koordinieren 383logische Fehler 428Name 59Named Pipe 387

1650.book Seite 803 Dienstag, 8. Juni 2010 1:40 13

Page 63: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

804

Index

ohne Subshell starten 66optimieren 409planen 423Programmierstil 425Prozess 73Scripte synchronisieren 388sed 480Subshell 73Syntaxfehler 427Syntaxüberprüfung 407Testen 424Vorgänge bei der Ausführung 406Was ist ein ... 36Wozu ... 36zeitgesteuertes ausführen 393

Shellvariablen 146, 774IFS 263Umgebungsvariablen 141

Shellvarianten 40shift 158SHLVL 151Short Circuit Test 207shutdown 619SIGINT 237SIGKILL 365Signale 361, 785

abfangen 366Beendigung abfangen 373benutzerdefiniert 361DEBUG 431ERR 431EXIT abfangen 373Gerätesignale 361ignorieren 362, 374kill 365Script beenden 372Scripte synchronisieren 388Senden 365SIGABRT 363, 785SIGALRM 364, 786SIGBUS 363, 785SIGCHLD 364, 786SIGCLD 364, 787SIGCONT 364, 391, 786SIGEMT 363, 785SIGFPE 363, 785SIGHUP 363, 786SIGILL 363, 785SIGINT 363, 786SIGIO 364, 786

SIGIOT 363, 785SIGKILL 363, 365, 663, 786SIGLOST 364, 787Signalhandler einrichten 369SIGPIPE 364, 787SIGPOLL 364, 786SIGPROF 364, 786SIGQUIT 363, 786SIGSEGV 363, 785SIGSTOP 364, 391, 786SIGSYS 363, 785SIGTERM 363, 365, 663, 786SIGTRAP 363, 785SIGTSTP 364, 786SIGTTIN 364, 786SIGTTOU 364, 787SIGURG 364, 786SIGUSR1 365, 787SIGUSR2 365, 787SIGVTALRM 364, 786SIGWINCH 365, 787SIGXCPU 365, 787SIGXFSZ 365, 787Standardaktion 361Systemsignale 361trap 366Übersicht 363zurücksetzen 375

SIGSTOP 391SIGTERM 365Single Quotes 123sleep 586Sonderzeichen 787sort 569split 533, 569sprintf 533ssh 44, 633, 676, 684ssh-keygen 635Standardausgabe 76

Umleiten 77Standardeingabe 76

Umleiten 82Standardfehlerausgabe 76

Umleiten 79Startprozess 399Startup-Scripte 697stderr 76stdin 76stdout 76

1650.book Seite 804 Dienstag, 8. Juni 2010 1:40 13

Page 64: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

805

Index

Steuerzeichen 243Stream-Editor 457strftime 535Stringfunktionen 530Strings 111

abschneiden 121aneinanderreihen 120Länge ermitteln 119Teile entfernen 120, 122übersetzen 115Vergleichen 190zusammenfügen 114zuschneiden 112

Stringverarbeitung 738stty 271, 272, 641

echo 279raw 271

su 586sub 531Subshell 63, 381

Prozess 73Variablen der Elternshell 135

Substitutionsmechanismen 731substr 534sudo 587sum 555swap 590swapoff 601swapon 601sync 601Synchronisieren 388, 691Syntaxfehler 427Syntaxüberprüfung 407System-Administration 656

access_log 705Backup 681Benutzer-Verwaltung 656, 668CGI-Scripte 711Fehler-Logdateien analysieren 709HTML 704init-Scripte 697Logdateien analysieren 705Plattenplatzbenutzung 656Prozesse beenden 663Prozess-Verwaltung 659Startup-Scripte 697synchronisieren 691Sys-V-Init-Scripte 697Überwachung 666World Wide Web 704

Systemsignale 361Systemzugang 33systime 535Sys-V-Init-Scripte 697

T

tac 570tail 570tar 611, 684Tastaturkürzel 783Tastendruck abfragen 271Tcl/Tk-Script 728tcsh 42TC-Shell 42tee 86, 571TERM 142Terminal 239

Ausgabe 239, 242Bildschirm löschen 250Cursor steuern 253Eingabe 239, 255Escape-Sequenzen 243Farbe verändern 253Informationen ermitteln 251Pseudo 239pts 240Steuerung 250Steuerzeichen 243Textattribute verändern 251tput 250ttyp 240

terminfo 250test 186

!= 190< 195= 190== 195> 195-0 198-a 201, 202-b 198-c 198-d 198Dateistatus ermitteln 197Dateityp ermitteln 198-e 198-ef 198-eq 187

1650.book Seite 805 Dienstag, 8. Juni 2010 1:40 13

Page 65: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

806

Index

Existenz überprüfen 198-f 198-G 198-g 198-ge 187-gt 187-h 198-k 198-L 198-le 187logische Operatoren 201-lt 187-n 190-ne 187-nt 198-o 201, 204-ot 198-p 198-r 198-S 198-s 198-t 198-u 198-w 198-x 198-z 190Zahlen vergleichen 187Zeichenketten vergleichen 190Zeitstempel vergleichen 198Zugriffsrechte ermitteln 198

then 173Tilde-Expansion 94time 420, 587TIMEFORMAT 145Timesharing-Prozesse 377Tischenrechner 108Tk-Toolkit 741TMOUT 143top 73, 588touch 49, 571tput 250, 642

blink 252bold 251boldoff 251clear 254colors 251cols 251cup 254dch1 254

dl1 254Farben verändern 253home 254il1 254Informationen 251lines 251pairs 251rev 252rmu1 252sgr0 252smu1 252Terminal steuern 253Textattribute verändern 251

tr 115, 572traceroute 638trap 366Trennungszeichen

IFS 263true 228, 237tty 395, 642ttyp 240type 340, 572typeset 107, 421

-F 342-f 342Optionen 421Variablen exportieren 139

TZ 142

U

ufsdump 606ufsrestore 606UID 151ulimit 418

Optionen 419umask 417, 572Umgebungsvariablen 140

IFS 263LINENO 71PS4 71Shellvariablen 141

umount 600unalias 357, 645uname 618uncompress 603UND-Operator 201

&& 201-a 201

1650.book Seite 806 Dienstag, 8. Juni 2010 1:40 13

Page 66: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

807

Index

UND-Verknüpfung 202uniq 573unix2dos 573Unix-Timestamp 535unpack 611unset 101until 229

do 230done 230

unzip 615uptime 618useradd 668userdel 579usermod 579uudecode 630uuencode 630, 694

V

Variablen 97$! 148$# 157$$ 147$* 155$? 148$@ 157$0 146$1 .. $9 153arithmetische Ausdrücke 106Array 128automatische Shellvariablen 146awk 509definieren 97exportieren 134exportieren mit typeset 139Global 352IFS 263Integer 103Integerarithmetik 105Interpolation 98Kommandozeilen-Parameter 153Konstante 102local 355lokal 351, 352löschen 101Namen 426Namen abgrenzen 100Shell 774Strings 111Stringverarbeitung 112

typeset 107überprüfen 435undefiniert 100vererben an (Sub)Subshell 136Vererbung an Subshell 135Vorgabewerte setzen 169Zahlen 102Zahlen konvertieren 110Zahlen vergleichen 187Zeichenkette 111Zugriff 97

Variablen-Interpolation 224Variablensubstitution 731Versteckte Dateien 92Verzeichnisname 54Verzeichnisse 50

. 51

.. 51absolute Pfadangabe 51Arbeitsverzeichnis ermitteln 50erstellen 53Grundlagen 50Hierarchien 50Home 50löschen 53Namen 54relative Pfadangabe 51vollständige Pfadangabe 51wechseln 52Wurzelverzeichnis 50Zugriffsrechte 56

VISUAL 143

W

wait 378wall 638wc 48, 573Webserver

Logdateien analysieren 705whatis 644whereis 574while 227

do 228done 228

who 45, 580whoami 45, 580Wildcards 87write 639

1650.book Seite 807 Dienstag, 8. Juni 2010 1:40 13

Page 67: Jürgen Wolf - Amazon S3 › gxmedia.galileo-press...5.9.11 Tricks für die Achsen ..... 327 5.9.12 Die dritte Dimension ..... 332 5.9.13 Zusammenfassung ..... 334 Je länger die Klammern

808

Index

X

xargs 414Xdialog 295

Z

Zahlen konvertieren 110Zahlen vergleichen 187

let 189zcat 574Zeichenauswahl 440Zeichenketten 111

abschneiden 121aneinanderreihen 120awk-Funktionen 118Länge ermitteln 119Teile entfernen 120, 122übersetzen 115

vergleichen 190zusammenfügen 114zuschneiden 112

Zeichenketten vergleichenBash 195Korn-Shell 195

Zeichenkettenfunktionen 530Zeichenkettenvergleiche 500Zeichenklassen 441, 788Zeichenliterale 440Zeitfunktionen 535zgrep 574zip 615zless 574zmore 574zsh 42Z-Shell 42Zugriffsrechte 56

ermitteln 198

1650.book Seite 808 Dienstag, 8. Juni 2010 1:40 13