UNIX-Tools
- Reguläre Ausdrücke
-
- Beschreibung (regular expressions)
-
- reguläre Ausdrücke werden von verschiedenen Kommandos verarbeitet, u.a. von:
-
- grep
- ed, sed, ex, vi
- expr
- more, pg
- awk
- sdb
- reguläre Ausdrücke sind ein wertvolles Werkzeug bei der Bearbeitung von Textfiles.
- es können s.g. Textmuster gebildet werden
- Prinzip ist bereits bekannt --> Metazeichen der Shell/C-Shell (?, *, [])
- nicht verwechseln: regulärer Ausdruck <--> Filenamengenerierung
- viele Sonderzeichen, die in regulären Ausdrücken benutzt werden können, besitzen eine Sonderbedeutung für die Shell (z.B. bei Filenamengenerierung, Zugriff auf Shell-Variable)
- Zeichen mit Sonderbedeutung flüchten, damit die Shell einen regulären Ausdruck unverändert an das Kommando weitergibt
- regulären Ausdruck in Hochkomma einschließen (s. folgender Abschnitt)
- ein regulärer Ausdruck bestimmt eine Menge von Zeichenfolgen; umgangssprachlich: reg_expaßt auf eine Menge von Zeichenfolgen
- reguläre Ausdrücke bestehen aus einfachen Zeichen und Metazeichen
- es wird zwischen einfachen und erweiterten regulären Ausdrücken unterschieden (nur einfache werden behandelt)
Regulärer
AusdruckBedeutung Bemerkung
zu Shellsx Zeichen x selbst, x ist kein Metazeichen dto. \x Zeichen x selbst, x kann Metazeichen sein dto. ^r regulärer Ausdruck r am Anfang der Zeile
z.B.: ^Am- r$ regulärer Ausdruck r am Ende der Zeile
z.B.: Ende$- . ein beliebiges Zeichen ? [s] ein Zeichen aus der nichtleeren Zeichenfolge s
s ist eine Folge einzelner Zeichen
z.B.: [abc], [123456789]
Zeichenbereiche werden in der Form [x1-x2] angegeben
z.B.: [a-z], [A-Z], [0-9]
Besonderheit: wenn ] oder - als erstes Zeichen in s stehen, werden sie als Element von s betrachtet
wenn ^ nicht als erstes Zeichen von s auftritt, wird es als Element von s betrachtetdto. [^s] jedes beliebige Zeichen, daß nicht in s enthalten ist
s wie oben
z.B.: [^a] - jedes Zeichen außer a
[^abc] - jedes Zeichen außer a, b oder c
[^a-z] - jedes Zeichen, nur kein kleiner Buchstabe[!s] r* 0, 1 oder mehrmaliges Auftreten des regulären Ausdrucks r
z.B.: a* - 0, 1 oder beliebig viele a
.* - 0, 1 oder beliebig viele Zeichen- *
rt regulärer Ausdruck r gefolgt von regulärem Ausdruck t
z.B.: [a-z][A-Z] - ein kleiner Buchstabe gefolgt von einem großen Buchstaben
[a-zA-z] - ein Buchstabe (klein oder groß)
[^a-zA-Z0-9] - ein Sonderzeichendto. r\ {m,n\ } m bis n maliges Auftreten des regulären Ausdruck r - r\{m\} genau m maliges Auftreten von r - r\{m,\} mindestens m maliges Auftreten von r
z.B.: a\ {1,2\ } - a oder aa
[^a-zA-Z0-9]\ {3\ } - Folge von 3 Sonderzeichen- \(r\) der reguläre Ausdruck r selbst
z.B.: \ ([a-z][0-9]\ )\ {4\ } - viermal die Folge Kleinbuchstabe Ziffer- \n n - ganze Zahl von 1-9
\ n in einem regulären Ausdruck steht für den r.A. t, der vorher im verketteten r.A. als n-ter in \ ( und \ ) eingeschlossene r.A. angegeben ist
Diese Form wird besonders für Substitutions-Kommandos von Editoren benutzt.-
Anmerkungen:
Innerhalb eines regulären Ausdruckes stehen alle alphanumerischen Zeichen (sowie viele Sonderzeichen) für sich selbst.
Folgende Zeichen besitzten innerhalb eines einfachen regulären Ausdruckes eine Sonderbedeutung (Metazeichen)
Dei Sonderbedeutung ist z.T. abhängig von der Position im regulären Ausdruck.
Die Zeichen . * [ \ sind Metazeichen, vorausgesetzt, sie sind nicht in [] eingeschlossen und es steht kein \ davor.
Die Zeichen ^ und $ haben nur dann Sonderbedeutung, wenn sie am Anfang oder Ende eines regulären Ausdrucks stehen.
Das Zeichen - hat Sonderbedeutung in [], außer in den Fällen [-x] und [x-].
Das Zeichen ^ hat Sonderbedeutung in [], wenn es an erster Stelle nach [ steht.
Frage: Was bedeutet der reguläre Ausdruck [][-] ?
- eines der Zeichen ][-
- Fluchtsymbole
-
- Oft ist es notwendig, daß einem Kommando Zeichen übergeben werden müssen, die für die Shell eine Sonderbedeutung besitzen (z.B. reguläre Ausdrücke) --> es muß einen Mechanismus geben, der diese Sonderbedeutung aufhebt.
- verschiedene Bezeichnungen: flüchten, apostrophieren, quoting, ...
- Zeichen mit Sonderbedeutung für die Shell (bereits bekannt; Wiederholung):
-
- Leerzeichen, Tabulator --> Argumenttrennung
- Zeilenende --> Abschluß Kommandozeile
- * --> Filenamengenerierung
- ? --> Filenamengenerierung
- [ --> Filenamengenerierung
- ] --> Filenamengenerierung
- > --> Fileumlenkung
- < -->Fileumlenkung
- | --> Pipe
- & --> Hintergrundkommando
- ! --> Historie (C-Shell)
- ...
- Die Sonderbedeutung eines einzelnen Zeichens für die Shell kann durch Voranstellen des Zeichens \ aufgehoben werden.
- Eine Zeichenfolge, die in Apostrophe ( ' ) eingeschlossen ist, wird unverändert dem Kommando übergeben (ein Argument).
- In einer Zeichenfolge, die in Doppel-Apostrophe ( " ) eingeschlossen ist, behalten die Zeichen $ (Zugriff auf Shell-Variable; wird später behandelt), ` (Kommandosubstitution; wird später behandelt) und ! (History bei C-Shell) ihre Sonderbedeutung für die Shell
- Pipes und Filter
-
- Prinzip
-
Häufig kommt es vor, daß die Standard-Ausgabe eines Kommandos von einem nachfolgendem Kommando weiterbearbeitet werden soll. Dies ist mit folgender Vorgehensweise realisierbar:
aber umständlichcmd1 >tmp_file
cmd2 <tmp_fileDurch eine Pipe kann die Standardausgabe eines Kommandos in die Standardeingabe des folgenden Kommandos umgeleitet werden. Eine Pipe ist nicht auf zwei Kommandos beschränkt, sondern kann sich über mehrere Kommandos erstrecken:
cmd1 | cmd2 | cmd3 | ... | cmdn
Alle Prozesse werden von der Shell syncron gestartet, die Prozesse werden parallel abgearbeitet.
Die Datenübergabe erfolgt über interne Puffer
Man nennt Programme, die ihre Standardeingabe lesen und in ihre Standardausgabe schreiben Filter, da sie den Datenstrom, der durch die Pipe fließt ,,filtern``.
Bereits bekannt ist catstdin --> filter --> stdout
Viele Kommandos lesen aus der Standardeingabe, wenn kein Name eines Eingabefiles in der Argumentliste angeben wird.
Programme, die nur ihre Standardeingabe lesen, können am Ende einer Pipe stehen (pg, lp, lpr)
Programme, die nur ihre Standardausgabe schreiben, können am Anfang einer Pipe stehen (ls, ps, who, date).
Programme, die die weder ihre Standardeingabe lesen noch in die Standardausgabe schreiben, können nicht in einer Pipe stehen (cd, cp, mv, rm, mkdir).Normalerweise merkt ein Programm (Kommando) nicht, ob und wie die E/A umgelenkt wurde (Dienst der Shell) . Es wird immer die gleichen Ergebnisse erzielen.
Wer selbst Programme (oder Kommandoprozeduren) entwickelt, sollte immer prüfen, ob die Problemstellung (bzw. Teile davon) als Filter realisierbar ist. --> Wiederverwendbarkeit, da sehr flexibel einsetzbar
UNIX-Systeme enthalten zahlreiche Filter (vor allem im Umfeld der Textverarbeitung). Nachfolgend werden einige univesell verwendbare Filter vorgestellt.
Diese Filter lösen kleine überschaubare Aufgaben.
- Kommandos zur Textsuche - die grep-Familie
-
- Kommandos grep, fgrep, egrep
dienen der Textsuche, wobei der gesuchte Text in unterschiedlicher Form angegeben wird:
grep - regulärer Ausdruck
fgrep - feste Zeichenfolge
egrep - erweiterter regulärer Ausdruck- hier nur behandeln: fgrep und grep
der Name grep stammt vom ed-Kommando: g/regular expression/p- fgrep [optionen] [string] [file ... ]
-
- sucht die Zeichenfolge string in den angegebenen Files file ... oder in stdin und gibt alle Zeilen auf stdout aus, die die Zeichenfolge enthalten
- Optionen:
-
-v Zeilen ausgeben, die string nicht enthalten -x Zeilen nur dann ausgeben, wenn sie vollständig string entsprechen -c nur Anzahl der Zeilen ausgeben, die string enthalten -i zwischen Groß- und Kleinbuchstaben nicht unterscheiden -l nur Filenamen ausgeben, die string enthalten -n zusätzlich Zeilennummer ausgeben -s string string kann mit - beginnen -f file zu suchende strings stehen in file
- Beispiele:
fgrep main *.c
fgrep -n main *.c
fgrep nutzername /etc/passwd- Problem: Wie findet man die Zeilen in allen C-Quelltexten eines Verzeichnisses, in denen ein Kommentar beginnt?
fgrep /* *.c wird nicht funktionieren, da /* bereits vom Kommandointerpreter aufgelöst wird
Suchmuster in Apostrophe (') einschliessen:
fgrep '/*' *.c
- grep [optionen] regular_expression [file ...]
-
- durchsucht die angegebenen Files file ... bzw. stdin nach Zeilen, die eine Zeichenfolge enthalten, die dem regulären Ausdruck regular_expression entspricht und gibt diese Zeilen über stdout aus
- Optionen
die Optionen -v, -c, -i, -e und -n haben die gleiche Bedeutung wie die gleichlautenden Optionen des Kommandos fgrep
-s Fehlernachrichten bzgl. nicht existierender bzw. nicht lesbarer Files unterdrücken- Beispiel:
Ermitteln der Nutzer, die an der Terminals ttyp01, ttyp02, ttyp03 arbeiten:
who | grep 'ttyp0[1-3]'- Aufgaben:
-
- Welche Files im Verzeichnis /etc sind wiederum Verzeichnisse?
ls -l /etc | grep '^d'
ls -F /etc | grep '.*/'- Welche Files im aktuellen Verzeichnis dürfen andere Nutzer lesen und schreiben?
ls -l | grep '^.......rw'- Wieviele leere Zeilen enthalten Ihre C-Programme?
grep -c '^$' *.c
- Zählen von Teilen, Worten, Zeichen
-
wc [-lwc] [file ...]
- Zählen von Zeilen, Worten und Zeichen in den angegebenen Files file ... bzw. stdin
- gibt außerdem Gesamtzahl dieser Werte für alle Files aus
- Wort: Zeichenfolge begrenzt durch Leerzeichen, Tabulator oder Newline
- Optionen:
-
-l Zeilen zählen -w Worte zählen -c Zeichen zählen
- Standard: -lwc
- Beispiele:
wc *.c
who | wc -l --> wieviele Nutzer sind angemeldet?
ls -1 | wc -l --> wieviele Files im aktuellen Verzeichnis?
- Wieviel Prozesse sind aktiv ?
ps -e | wc -l (System V)
ps -agx | wc -l (BSD)- Wieviel Subverzeichnisse existieren im aktuellen Verzeichnis?
ls -l | grep '^d' | wc -l
- Sortieren und Mischen von Files
-
(Optionen sind unvollständig)
sort [optionen] [file ...]- sortieren aller Zeilen aller angegebenen Files file ... bzw. von stdin und Ausgabe auf stdout
- es ist möglich, ein oder mehrere Sortierkriterien anzugeben
- Standard: Sortiermerkmal ist die ganze Zeile, dabei wird die Zeile als Bytefolge aufgefaßt, die in einer lexikografischen Ordnung sortiert wird
- einige Optionen:
-
-c Sortierreihenfolge nur prüfen, eine Ausgabe erfolgt nur, wenn die Eingabefiles unsortiert sind -m nur mischen, Eingabefiles müssen bereits sortiert sein -u von aufeinanderfolgenden Zeilen mit gleichem Sortiermerkmal jeweils nur eine ausgeben -ooutput Ausgabe wird in angegebenes File output gelenkt und nicht nach stdout (output kann Eingabefile sein) -n entsprechend numerischem Wert sortieren: Sortierkriterium ist eine numerische Zeichenfolge aus Leerzeichen, Tabulatoren, Minuszeichen, keiner oder mehreren Ziffern mit und ohne Dezimalpunkt
impliziert -b-b ignorieren führender Leerzeichen und Tabulatoren im Sortierkriterium -r umgekehrte Sortierreihenfolge -tx x = Feldseperatorzeichen, x ist nicht Bestandteil des Feldes
jedes Auftreten von x ist signifikant --> xx bedeutet leeres Feld+pos1 -pos2 Die Werte pos1 und pos2 begrenzen das Sortiermerkmal. Für den Wert pos1 kann eine Zahl gefolgt von einer der Optionen b bzw. n angegeben werden.
Für den Wert pos2 kann eine Zahl angegeben werden. Das so begrenzte Sortiermerkmal beginnt am +pos1+1. Feld und geht bis zum pos2. Feld. Ohne die Angabe von pos2 reicht das Sortiermerkmal bis zum Zeilenende.
Die Werte pos1 und pos2 haben die Form m.n (n-te Zeichenposition im Feld m)
- Beispiele:
-
- Sortieren der Liste aller angemeldeten Nutzer nach dem Nutzerkennzeichen:
who | sort
sgr ttyq0 May 13 10:40
sgr ttyq1 May 13 10:45
thm bip0 May 13 16:18
thm ttyia May 13 07:08
thm ttyq2 May 13 16:18- Sortieren der Liste aller angemeldeten Nutzer nach der Anmeldezeit:
who | sort +4n
thm ttyia May 13 07:08
sgr ttyq0 May 13 10:40
sgr ttyq1 May 13 10:45
thm bip0 May 13 16:18
thm ttyq2 May 13 16:18- Sortieren von /etc/passwd nach Nutzerkennzeichen:
sort -t: /etc/passwd
- Aufgaben:
-
- Sortieren der Liste aller Files im aktuellen Verzeichnis nach der Filegröße!
ls -l | sort +4n -5- Sortieren der Liste aller Files im aktuellen Verzeichnis nach Filenamen in umgekehrter Reihenfolge!
ls -l | sort -r +8- Sortieren der Liste der Files im aktuellen Verzeichnis, für andere Nutzer nicht schreibberechtigt sind, nach der Filegröße in umgekehrter Reihenfolge!
ls -l | grep '^........-' | sort -nr +4 -5- Sortieren von /etc/passwd nach Gruppen-ID (gid) und innerhalb einer Gruppe nach Nutzerkennzeichen!
sort -t: +3n -4 +0 -1 /etc/passwd
- Zerlegung von Files in Spalten
-
cut -clist [file ...]
bzw.
cut -flist [-dc] [file ...]- schneidet einzelne Felder heraus
- list ist ein durch Kommas getrennte aufsteigende Folge von ganzen Zahlen (z.B. 1,4,7)
- cut -c4-9
schneidet die Zeichen 4 bis 9 jeder Zeile heraus- wird die Option -f benutzt, geht cut davon aus, daß die Eingabezeilen in Felder untergliedert sind. Begrenzungszeichen der Felder ist das Zeichen c, das nach der Option -d angebenen wird (kein Leerzeichen zwischen d und c). (Standard ist der Tabulator)
- cut -f1,6 -d: /etc/passwd
aus dem File /etc/passwd wird das Feld 1 (Nutzerkennzeichen) und das Feld 6 (HOME-Verzeichnis) heraus geschnitten.
- Zusammenfügen von Zeilen verschiedener Files
-
Dieses Kommando ermöglicht die parallele oder serielle Verknüpfung von Zeilen der Eingabefiles zu einer Zeile der Standardausgabe.
(hier nur parallele Verknüpfung)
paste [-dlist] file1 file2 [file3 ...]- wird anstelle eines Filenamens ein Minuszeichen angegeben, wird an dieser Stelle die Standardeingabe gelesen
- die Option -d erlaubt es Spaltentrennzewichen für die Ausgabe festzulegen (Standard: Tabulator)
- Beispiel:
-
gegeben sind vier Files mit folgendem Inhalt:
Filename: f1 f2 f3 f4 Inhalt a1 b1 c1 d1 der a2 b2 c2 d2 Files a3 c3 d3 paste -d':;\n' f1 f2 f3 f4
erzeugt folgenden Ausgabestrom:
a1:b1;c1
d1
a2:b2;c2
d2
a3:;c3
d3 - Beispiel:
ls | paste - - -
erzeugt eine dreispaltige Ausgabe des ls-Kommandos- paste mit cut kombieniert, erlaubt das Umordnen von Spalten einer Tabelle
- Hinweis auf join --> Zeilen kombinieren, anhand eines Schlüsselbegriffes
- Kopieren des letzten Teils eines Files
-
tail [-|+Nlbcf] [file]
- option l --> Zeilen
- option c --> Zeichen
- option b --> Blöcke
- -option --> vor Fileende
- +option --> ab Fileanfang
- N Zeilen|Zeichen|Blöcke
- Standard -10l
- Option -f zur Überwachung eines ,,wachsenden`` Files, daß ein anderer Prozeß erzeugt
- Umwandeln von Zeichen
-
tr [-cds] [string1 [string2]]
kopiert stdin nach stdout, wobei ausgewählte Zeichen ersetzt bzw. gelöscht werden- Ersetzen: Zeichen, die in string1 enthalten sind, werden durch das entsprechende Zeichen von string2 ersetzt.
- Option -s --> komprimiert sich wiederholende Zeichen, die in string2 enthalten sind, zu einem Zeichen
- Beispiel:
-
ls -l | tr -s ' ' ' ' | cut -f4,8 -d' 'Aus der von ls -l erzeugten Liste werden die Filegröße und der Filename heraus geschnitten.
- Löschen (Option -d): Zeichen, die in string1 enthalten sind, werden nicht kopiert.
- Beispiel:
-
tr -d '\015' <msdos_file >unix_fileIm MS-Dos wird das Zeilenende durch die Zeichen LF und CR codiert; im UNIX nur durch LF (entspricht NL); o.g. Kommando löscht alle Zeichen CR. Das Zeichen CR wurde oktal dargestellt.
(natürlich gibt es auch Tools, die beim Filetransfer eine entsprechende Konvertierung vornehmen)
a-z steht für alle Kleinbuchstaben (System V: [a-z])
0-9 steht für alle Ziffern
usw.Beispiel:
tr -c "0-9A-Za-b\012" " " (BSD) tr -c "[0-9][A-Z][a-b]\012" "[ *]" (System V)
Alle Zeichen, die keine Ziffer und kein Groß- bzw. Kleinbuchstabe sowie kein Newline sind, werden durch Leerzeichen ersetzt. Die Option -c steht für Komplement.
Aufgabe: In einem File sind alle Kleinbuchstaben durch den entsprechenden Großbuchstaben zu ersetzen.
- Stream-Editor
-
Kommando sed
- auch Pipe-Editor genannt
- aus Zeileneditor ed abgeleitet; dient zur Verarbeitung von Datenströmen
- übliche Editoren lesen die Editor-Kommandos von stdin (Tastatur) und modifizieren bzw. erfassen ein File, welches sich im Filesystem (auf Platte) befindet.
- der Streameditor liest seine Kommandos aus einem File bzw. aus seiner Argumentliste und modifiziert die Standardeingabe.
-
- Syntax:
sed [-optionen] 'ed-kommandoliste' [file ...]
- Grundprinzipien:
-
- Es können ASCII-Datenströme editiert werden
- Es besteht keine Beschränkung hinsichtlich der Größe des Eingabestromes
- Alle sed-Kommandos werden auf jede Zeile des Eingabestromes angewendet, die anschließend in die Standardausgabe geschrieben wird.
print (ed-Kommando p) wird automatisch realisiert - kann durch Option -n unterdrückt werden)- Der Datenstrom wird nur einmal bearbeitet; Rückpositinierung ist nicht möglich (in Pipes generell nicht möglich!)
- Es können reguläre Ausdrücke verwendet werden
- Beispiele:
-
cat kap1 kap2 kap3 | sed 's/AIX/UNIX/g' >artikel
(Die Files kap1, kap2 und kap3 werden zusammengefügt; durch den sed wird die Zeichenfolge UNIX global durch die Zeichenfolge Linux ersetzt; die Ausgabe des sed wird ins File artikel umgelenkt)
sed 's/^/ /'
(Alle Zeilen der Standardeingabe werden eingerückt.)
sed '1,10d'
(Zeilen 1 bis 10 löschen)
sed -n '5,20p'
(nur Zeilen 5 bis 20 kopieren)
ls -l | sed 's/ .* / /'
(nur die Zugriffrechte und die Filenamen der ls-Liste werden angezeigt. Der zu substituierende Ausdruck (Leerzeichen; beliebig viele beliebige Zeichen; Leerzeichen) paßt auf mehrere Muster --> das längste gilt)
-rw-r--r-- 1 dgr 7608 Apr 9 13:31 basics.aux **** ++++++++ ---------------------- .......................... =================================== (gilt)
cat filex | sed '/muster/q'(Anzeige von filex bis muster in einer Zeile auftritt)
cat filex | sed '/muster/d'
(Die Zeilen von filex, die muster enthalten, werden gelöscht)
- Dump
-
od [-option] [file] [offset]
- Das angegebene File bzw. die Standardeingabe werden in einem oder in mehreren Datenformaten in die Standardausgabe geschrieben.
- Die Datenformate werden durch Optionen ausgewählt.
- Optionen (Auswahl):
-
-b Oktaldarstellung (byteweise) -x Hexadezimaldarstellung (2-Byte-Einheiten) -c ASCII-Darstellung
nicht darstellbare Zeichen in folgender Form:
\ n (Newline)
\ t (Horizontaltabulator)
\ b (Backspace)
\ 377 (oktale Codierung)-o Oktaldarstellung (2-Byte-Einheiten)
Nachteil: Die Bytegrenze verläuft durch die Hunderterstelle der Oktalzahl
--> identische Bitkombinationen werden im linken Teil der Oktalzahl
anders als im rechten Teil dargestellt.
- Kombinationen der Optionen sind möglich
- Anzapfen einer pipe
-
tee [-optionen] [file ...]
- stdin wird unverändert nach stdout kopiert
- Kopien von stdin werden in den angegebenen Files erzeugt
- als Filename kann natürlich auch der Name eines Spezialfiles angegeben werden (z.B. /dev/tty)
- Weitere Kommandos
-
- Finden von Files
-
- Der Filebaum (bzw. Teile davon) wird rekursiv nach Files durchsucht, die bestimmten Bedingungen entsprechen.
- Mit den Files, die den Bedingungen entsprechen können Aktionen ausgeführt werden.
- expression ist kein regulärer Ausdruck!
- zwei Bestandteile von expression
-
- bedingung
- aktion
- zu bedingung:
-
-name filename alle Files des Namens filename (Metazeichen sind möglich) -mtime n Modifikationszeit
+n alle Files, die vor mehr als n Tagen verändert wurden
-n alle Files, die vor weniger als n Tagen verändert wurden
(weniger als 1 Tag bedeutet, in den letzten 24h)-user uname alle Files des Nutzers uname -group gname alle Files der Nutzergruppe gname -type c alle Files des Typs c, Werte für c z.B.
d (Verzeichnis)
b (blockorientiertes Spezialfile)-perm onum alle Files, welche die Rechte onum besitzen
onum = Oktalzahl --> exakte Übereinstimmung aller Rechte
onum = negative Oktalzahl --> nur das eine angegebene Recht
- nacheinander aufgeführte Bedingungen -->UND-Verknüpfung (ODER-Verknüpfung s. letztes Beispiel)
- zu aktion:
-
-print alle Filenamen, die bedingung entsprechen, werden angezeigt -exec cmd cmd wird auf alle Files angewendet, die bedingung entsprechen -ok cmd cmd wird interaktiv auf alle Files angewendet, die bedingung entsprechen
- Das Ende von cmd wird durch \; gekennzeichnet
- das Argument {} in cmd wird jeweils durch den aktuell gefundenen Pfadnamen ersetzt.
- -exec und -ok sind nicht nur aktion, sondern auch bedingung. Diese hat den Wert wahr, wenn cmd den Exitstatus Null liefert.
- find . -name file1 -print
- find / -name ``*.c`` -print
- find . -perm 0777 - print
- find / -type d -print
- find / -user nutzerkennzeichen -print
- find / -group sme -print
- find /tmp -user nutzerkennzeichen - exec rm {} \;
- find / -user nutzerkennzeichen -mtime +14 -ok rm {} \;
- find . -exec grep muster {} \; -print
- find / \( -name y -o -name ``*.x`` \) -mtime +7 -exec rm {} \;
- Welche Files wurde nach dem 18. 10. 1989 modifiziert?
-
- find / -mtime +643 -print am 22.7.91
- touch 1018000089 revolution
find / -newer revolution -print
- Wie lauten die vollständigen Pfadnamen aller Files im Filesystem?
find / -print- Wieviele Files wurden seit Beginn des Jahres angelegt?
touch 0101000091 neujahr
find / - newer neujahr -print | wc -l- Ermitteln Sie die Größe aller Ihnen gehörenden Files im System!
find -user nutzerkennzeichen -exec ls -l {} \;
- Archivieren von Files
-
tar [-optionen] [archivdev] [blocksize] [file ... ]
- Mit dem Kommando tar (Tape-Archivar) können einzelne Files oder komplette Verzeichnisse auf externen Speichermedien (Streamer-Tape, Dat-Kassette, Exabyte-Kassette, Diskette, ...) archiviert werden.
- Ziel: Datensicherung, Softwareübergabe, ...
- Die Filesystemstruktur bleibt im Archiv erhalten.
- Grundfunktionen:
-
- Erstellen des Archivs
- Anfügen an ein bestehendes Archiv
- Lesen aus einem Archiv
- Inhaltsverzeichnis eines Archives anzeigen
- Die Grundfunktion wird mit einer der folgenden Optionen ausgewählt:
-
c Archiv erzeugen; Archivmedium wird überschrieben
(auf ursprünglich enthaltene Daten kann nicht mehr zugegriffen werden)r Anfügen an das Ende des Archives u Anfügen der angegebenen Files an das Archivende, wenn diese noch nicht darin enthalten sind, oder wenn sie nach dem letzten Schreiben in das Archiv modifiziert wurden. x Lesen der angegebenen Files aus dem Archiv. t Die Pfadnamen der Files, die im Archiv vorkommen, werden angezeigt.
- Hinweise für das Schreiben eines Archives:
-
- wird ein Verzeichnisname angegeben, werden alle Files (mit allen Unterverzeichnissen) archiviert
- UID und GID (numerischer Wert) sowie Filemodus werden mit archiviert.
- Files niemals mit vollständigem Pfadnamen ins Archiv schreiben --> Probleme beim Lesen des Archives. Soll der vollständige Pfadname erhalten bleiben--> cd /; tar c ./pfadname
- Wird ein Archiv auf Diskette, Magnetband o.ä. erzeugt, fordert tar - falls dies erforderlich ist - Folgedatenträger an.
Hinweis: bei einigen Versionen des tar sind diese Folgedatenträger auch einzeln lesbar, bei anderen Versionen nur der komplette Datenträgersatz.
- Hinweise für das Lesen eines Archives:
-
- ist kein Filename angegeben, wird das komplette Archiv gelesen.
- Das Archiv wird immer bis zum Ende gelesen, da mehrere Files mit gleichem Namen im Archiv enthalten sein können.
- existiert das rückzustellende File noch nicht, werden die archivierten Zugriffrechte (außer set-Uid) und der Fileeigentümer übernommen
- existiert das rückzustellende File bereits, werden Zugriffrechte und Fileeigentümer nicht verändert.
- in Verbindung mit einer der o.g. Optionen können wertere Optionen angegeben werden (Auswahl):
-
v die Namen der übertragenen Files werden angezeigt
(in Verbindung mit der Option -t auch Fileeigentümer und Filemodus)w Abfrage vor jeder Fileübertragung (positive Quittung ist: y) o (in Verbindung mit Option -x) als Eigentümer wird der Nutzer eingetragen, der das Archiv liest f als nächstes Argument wird der Name des Archivfiles erwartet. Standardmäßig wird jenes Spezialfile angenommen, welches das Standard-Backupmedium repräsentiert (systemabhängig; abhängig von der Geräteausstattung). Das Zeichen - steht für stdin bzw. stdout n (n = Ziffer) wählt ein Gerät aus, auf dem sich das Archiv befindet (in Verbindung mit File: /etc/default/tar) (existiert nicht in allen Systemen)
Beispiele:
- tar -cvf /dev/mt .
Die Files des aktuellen Verzeichnisses - incl. aller Subverzeichnisse - werden auf Magnetband geschrieben (ab Bandanfang). Die Files erhalten im Archiv den Namen ./pfadname- cd /tmp
tar -xvf /dev/mt
Das Magnetband-Archiv wird ins Verzeichnis /tmp eingelesen (sofern im Archiv keine vollständigen Pfadnamen enthalten sind).- cd /
tar -cv0 ./usr/local/home/*.c
Alle C-Programme aus Verzeichnis /usr/local/home werden auf Gerät 0 abgezogen. Gerät 0 wird durch das File /etc/default/tar bestimmt. Der vollständige Pfadname steht mit im Archiv, da relativ zur Wurzel abgezogen wird.- tar -xv *.c
-
Beliebter Fehler! Es werden nicht alle C-Programme, die im Archiv stehen, eigelesen.Die Shell führt die Filenamengenerierung aus, bevor tar gestartet werden jene Files des Archivs gelesen, deren Name mit einem bereits vorhandenen Namen, der auf .c endet, übereinstimmt.
- tar -cvf *.c
Fehler! Das Archiv wird im ersten der Files *.c erzeugt!- (cd von; tar -cf - .) | (cd nach; tar xvf -)
- Vergleich von Text-Files
-
diff [-optionen] file1 file2- der Inhalt beider Files wird verglichen (vor allem sinnvoll für zwei unterschiedliche Versionen eines Files)
- in der Standardausgabe werden die Abweichungen angezeigt
- diff ermittelt, welche Zeilen geändert werden müßten, um die Files in Übereinstimmung zu bringen (der diff-Algorithmus liefert meist die optimale Variante der erforderlichen Änderungen)
- die Abweichungen werden markiert:
< Originalzeile aus file1
> Originalzeile aus file2- zuvor werden Zeilen dieser Form ausgegeben:
-
n1 a n3,n4 (append) n1,n2 d n3 (delete) n1,n2 c n3,n4 (change) - diese Zeilen ähneln ed-Kommandos zur Umwandlung von file1 in file2
- n1 bis n4 sind die Nummern jener Zeilen, welche die abweichenden Fileabschnitte begrenzen
- n1 und n2 beziehen sich auf file1; n3 und n4 auf file2
- wenn n1=n2 (nur eine Zeile weicht ab) wird lediglich n1 angezeigt (analog: wenn n3=n4 nur n3)
- Optionen (Auswahl):
-
- -b ignoriert führende Leerzeichen und Tabulatoren
- -e erzeugt eine Folge von ed-Befehlen, mit der file2 auf den Zustand von file1 gebracht würde
- Protokoll der Terminalsitzung
-
script [-optionen] [file]
- kopiert alle Bildschirmausgaben in file
- dazu gehören auch die Tastatureingaben, die auf dem Bildschirm ,,ge-echot`` werden
- für die Protokollierung bildschirmorientiert arbeitender Programme (z.B. vi) kaum geeignet
- mit Ctrl-d wird die Protokollierung beendet
- Optionen --> s. Manual
- Textmanipulation
-
awk [-option] [argument ...] [ -f programmfile] [file ... ]awk ist ein mächtiges Werkzeug zur Ver- bzw. Bearbeitung von Text, als Filter einsetzbar!
Grundprinzip:
Eingabedaten in file ... werden zeilenweise verarbeitet. Die Bearbeitung besteht je Zeile aus zwei Phasen:
- Phase1: pattern matching
- Phase2: action (Datenmanipulation)
- awk '/^[A-Z]/{print "";print $0}' textfile
-
# Jeder mit einem Großbuchstaben beginnende Zeile wird eine Leerzeile vorangestellt.
- cat /etc/passwd | awk -F: '{printf "%s
\t%s\n",$1,$6}'
# Ausgabe der Nutzerkennzeichen und des zugehörigen HOME-Verzeichnisses, Feldtrennzeichen ist ":"
je Zeile wird folgende Anweisung ausgeführt: muster {aktion}
Weitere Informationen siehe Manual!
![]() |
Zur Homepage des URZ D.Grunewald, Christoph Ziegler, letzte Überarbeitung 19. Februar 1999 |