ZIV

  Linux-Einführung

Weitere Befehle

 

WWU


Die Bash zurck vor Shell-Programmierung

Weitere Unix-Befehle

Zählen: »wc«

wc (word count) zählt wahlweise Zeilen, Worte und Zeichen.

wc [option].. [argument ..]

 

Option Bedeutung
-c Anzahl der Zeichen
-l Anzahl der Zeilen
-w Anzahl der Worte

$ wc *.html
    651    1916   20562 Bash.html
    975    2483   25884 Befehle1.html
    911    2327   23986 Dateisystem.html
    418    1055   10272 Einfuehrung.html
    508    1541   15799 ErsteSchritte.html
    113     439    4567 Literatur.html
     71     168    2056 Uebersicht.html
     71     168    2056 index.html
   3718   10097  105182 insgesamt

 

Pager: »less«

Um sich Dateien anzusehen, die länger als eine Bildschirmseite sind, verwendet man less. Dieser Pager gibt jeweils eine Bildschirmseite aus und wartet dann auf einen Befehl. less wird auch zur Anzeige der Hilfeseiten bei man benutzt. Ein nicht ganz so leistungsfähiger Pager ist more.

less [option] [datei] ..

 

Befehl Bedeutung
h Gibt eine Onlinehilfe aus
<space>, f Blättert eine Seite weiter
b Blättert eine Seite zurück
<enter>, <Pfeil nach unten> Blättert eine Zeile weiter
<Pfeil nach oben> Blättert eine Zeile zurück
/muster , ?muster Sucht das Muster vorwärts bzw rückwärts
n, N Sucht das nächste bzw. vorige Vorkommen des Suchmusters
q Beendet das Programm

Dateien verbinden: »cat«

cat (concatenate) liest eine oder mehrere Dateien und schreibt sie auf stdout.

cat [option].. [datei] ..

 

Option Bedeutung
--help Gibt eine Liste aller Optionen aus
-v Zeigt auch nichtdarstellbare Zeichen an
Hat man zum Beispiel acht Dateien, »text1« bis »text8« und möchte diese hintereinander in eine Datei »text« kopieren: cat text[1-8] >text

Datei zerlegen: »split«

split zerlegt eine Datei in gleich große Teile. Die Datei selbst bleibt unverändert, ihre Teilstücke heißen PREFIXaa, PREFIXab usw.

split [option].. [datei [prefix]]

 

Option Bedeutung
-b size Größe der Outputdateien in Byte (-b 1024), Kilobyte (-b 2k) oder Megabyte (-b 1m)
-l n, -n n Zeilen pro Outputdatei
Die im letzten Beispiel zusammengefügte Datei »text« soll in Teilstücke zu jeweils 50 Zeilen zerlegt werden: split -l 50 text text-neu.
Die Teilstücke heißen »text-neu.aa« usw.

Beide Beispiel in einer pipe zusammengefaßt:

cat text[1-8] | split -l 50 - text-new.
 

Ein T-Stück: »tee«

tee liest von stdin und schreibt sowohl auf stdout als auch in eine Datei.

tee [option].. datei

 

Option Bedeutung
-a Fügt an die Datei an
Im vorigen Beispiel  wird keine Datei »text« erzeugt. Mit tee ist dies möglich:
cat text[1-8] | tee text | split -l 50 - text-new.

Zeilen zerlegen: »cut«

cut  gibt ausgewählte Spalten von Dateizeilen auf stdout aus.

cut [option].. [datei] ..

 

Option Bedeutung
-c spalten Gibt die angegebene(n) Spalte(n) aus
-f felder Gibt die angegebenen Felder aus
-d zeichen Trennzeichen zwischen den einzelnen Feldern. Default ist TAB.
Spalten und Felder sind dabei durch Kommata getrennte Listen. Ihre Elemente können auch in der Form m-n angegeben werden.

Beispiel

Benutzerinformationen findet man in der Datei »/etc/passwd«. Pro Nutzer gibt es eine Zeile mit sieben Feldern, die durch »:« getrennt werden.
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
lp:x:4:7:lp daemon:/var/spool/lpd:/bin/bash
news:x:9:13:News system:/etc/news:/bin/bash
cut -d ':' -f 1,6 /etc/passwd druckt den Login-Namen und die HOME-Directory:
root:/root
bin:/bin
daemon:/sbin
lp:/var/spool/lpd
news:/etc/news

Zeilen aneinanderkleben: »paste«

paste fügt die Zeilen von zwei oder mehr Dateien, getrennt durch einen Tabulator, in Spalten zusammen.

paste [option].. datei ..

 

Option Bedeutung
-d zeichen Angabe eines anderen Trennzeichens
Will man Zeilen nach komplexeren Regeln zusammenfügen, so lohnt ein Blick auf join.

Zeilen sortieren: »sort«

sort sortiert Dateien nach Sortierfeldern.

 sort [option].. [datei] ..

 

Option Bedeutung
+pos1 [-pos2] Sortiert nach den Feldern pos1 bis ausschliesslich pos2
-b Ignoriert Leerzeichen am Anfang von Sortierfeldern
-n Sortiert numerisch
-o datei Gibt in eine Datei aus
-r Dreht die Sortierreihenfolge um
-t zeichen Gibt das Trennzeichen zwischen den Feldern an
sort /etc/passwd sortiert die Datei aufsteigend.
adabas:x:36:100:Adabas-D Database Admin:/usr/lib/adabas:/bin/bash
amanda:x:37:6:Amanda Admin:/var/lib/amanda:/bin/bash
at:x:25:25::/var/spool/atjobs:/bin/bash
basti:x:501:100:Sebastian Bader:/home/basti:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
sort -r /etc/passwd sortiert die Datei absteigend.
zope:x:64:2:Zope Server:/var/lib/zope:/bin/false
yard:x:29:29:YARD Database Admin:/usr/lib/YARD:/bin/bash
wwwrun:x:30:65534:Daemon user for apache:/var/lib/wwwrun:/bin/bash
virtuoso:x:45:100:Virtuoso Admin:/opt/virtuoso-lite:/bin/bash
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
sort +2 -n -r -t ':' /etc/passwd sortiert die Datei nach dem dritten Feld numerisch absteigend.
nobody:x:65534:65534:nobody:/var/lib/nobody:/bin/bash
basti:x:501:100:Sebastian Bader:/home/basti:/bin/bash
stefan:x:500:100:Stefan Ost:/home/stefan:/bin/bash
cyrus:x:96:12:User for Imapd:/usr/cyrus:/bin/bash
zope:x:64:2:Zope Server:/var/lib/zope:/bin/false

Doppelte Zeilen entfernen: »uniq«

uniq (unique) gibt eine sortierte Datei ohne doppelte Zeilen aus. Es wird häufig in pipes in Verbindung mit sort verwendet.

uniq [option].. datei

 

Option Bedeutung
-d Gibt nur mehrfach vorkommende Zeilen aus
-u Gibt nur genau einmal vorkommende Zeilen aus

Den Dateikopf anzeigen: »head«

head liest die ersten Zeilen der Eingabedateien:

head [option].. [datei] ..

 

Option Bedeutung
-n n, -n Gibt die ersten n Zeilen aus
head ist praktisch bei großen Dateien und wenn man weiß, dass relevante Informationen am Dateianfang stehen. In pipes kann man die Ausgabemenge reduzieren. So wurden die 5 Zeilen der sort-Beispiele mit einer head-pipe erzeugt:
sort +2 -n -r -t ':' /etc/passwd | head -5

Das Dateiende ansehen: »tail«

tail gibt die letzten Zeilen der Dateien aus.

tail [option].. [datei]...

 

Option Bedeutung
-n n, -n Gibt die letzten n Zeilen aus. Wenn n mit einem + beginnt, wird ab Zeile n ausgegeben
-f Fügt an die Ausgabe an, wenn die Datei wächst
Sehr praktisch ist die -f Option, die Dateiergänzungen sofort anzeigt:
tail -f /var/log/messages
zeigt neue Systemmeldungen sofort an, indem das Programm auf Änderungen in der Datei wartet und diese ausgibt.

Prozesse anzeigen: »ps«

ps (process status) listet Informationen über laufende Prozesse auf. Syntaktisch treffen hier zwei Unix-Welten aufeinander: Optionen mit und ohne vorangestelltes Minus-Zeichen. Linux vereinigt beide Welten und fügt Eigenes hinzu.

ps [option]..

 

Option Bedeutung
-e Gibt alle Prozesse aus
-l "long"
-f "full"
-u user nur die Prozesse des angegebenen Benutzers

Beispiele

ps -ef listet jeden Prozess full auf, was man nicht mit "alles" übersetzen darf.
===== ux02 (ost) /dfs/u/o/ost =====
  ost> ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Aug11 ?        00:00:48 init [3]
root         2     1  0 Aug11 ?        00:00:11 [kswapd]
root         3     1  0 Aug11 ?        00:00:00 [kflushd]
root         4     1  0 Aug11 ?        00:00:07 [kupdate]
bin        324     1  0 Aug11 ?        00:00:12 portmap
root       346     1  0 Aug11 ?        00:00:00 rpc.statd
root       366     1  0 Aug11 ?        00:00:25 /usr/sbin/sshd
root       405     1  0 Aug11 ?        00:00:19 syslogd -m 0
root       414     1  0 Aug11 ?        00:00:00 klogd
daemon     446     1  0 Aug11 ?        00:00:00 /usr/sbin/atd
root       460     1  0 Aug11 ?        00:00:03 crond
root       478     1  0 Aug11 ?        00:00:00 inetd
root       553     1  0 Aug11 ?        00:00:00 gpm -t ps/2
root       674     1  0 Aug11 tty2     00:00:00 /sbin/mingetty tty2
root       675     1  0 Aug11 tty3     00:00:00 /sbin/mingetty tty3
root       676     1  0 Aug11 tty4     00:00:00 /sbin/mingetty tty4
root       677     1  0 Aug11 tty5     00:00:00 /sbin/mingetty tty5
root       678     1  0 Aug11 tty6     00:00:00 /sbin/mingetty tty6
root       708     1  0 Aug11 tty1     00:00:00 /sbin/mingetty tty1
root       830     1  0 Aug11 ?        00:00:16 [rpciod]
root       831     1  0 Aug11 ?        00:00:00 [lockd]
root     10609     1  0 Aug14 ?        00:00:00 /usr/sbin/sendmail -q1h
root     11551     1  0 Aug15 ?        00:00:00 lpd
xfs      21886     1  0 Aug21 ?        00:00:09 xfs -droppriv -daemon
root      7578     1  0 Aug31 ?        00:00:01 /usr/bin/kdm
root       973   366  0 08:28 ?        00:00:00 /usr/sbin/sshd
holters    977   973  0 08:28 pts/1    00:00:00 -ksh
root      1005   977  0 08:28 pts/1    00:00:00 su -
root      1009  1005  0 08:28 pts/1    00:00:00 -bash
root      3196   366  0 15:15 ?        00:00:00 /usr/sbin/sshd
ost       3199  3196  0 15:15 pts/2    00:00:00 -bash
ost       3247  3199  0 15:26 pts/2    00:00:00 ps -ef
Fast alles über die Prozessumgebung liefert die Option e in Verbindung mit einem doppelten w (Die Ausgabe ist der besseren Lesbarkeit wegen umformatiert):
===== ux02 (ost) /dfs/u/o/ost =====
  ost> ps eww
  PID TTY      STAT   TIME COMMAND
 3199 pts/2    S      0:00 -bash HOME=/dfs/u/o/ost USER=ost LOGNAME=ost PATH=/usr/bin:/bin:/usr/bin
                           MAIL=/var/spool/mail/ost SHELL=/usr/local/bin/bash SSH_CLIENT=128.176.184.62 627 22 
                           SSH_TTY=/dev/pts/2 TERM=kvt
 3262 pts/2    R      0:00 ps eww LESSOPEN=|/usr/bin/lesspipe.sh %s HISTSIZE=1000 HOSTNAME=ux02 LOGNAME=ost 
                           SSH_TTY=/dev/pts/2 MAIL=/dfs/u/o/ost/.briefkasten PAGER=less TERM=kvt HOSTTYPE=i386 
                           PATH=/usr/bin:/bin:/usr/bin:/usr/X11R6/bin:/dfs/a/urz/bin:/dfs/u/o/ost/bin 
                           KDEDIR=/usr HOME=/dfs/u/o/ost INPUTRC=/etc/inputrc SHELL=/usr/local/bin/bash 
                           PS1====== $HOSTNAME ($LOGNAME) $PWD =====?  ${PWD##?*/}>  
                           PS2=>  FMHOME=/dfs/a/urz/frame/version_5.5 PS4=[$LINENO]  USER=ost LANGUAGE=de 
                           LESSCHARSET=latin1 PGPPATH=/usr/local/ost/.pgp LANG=en_US SSH_CLIENT=128.176.184.62 627 22 
                           HISTFILE=/dfs/u/o/ost/.history/history.ux02 MAILHOST=pylartes.uni-muenster.de 
                           OSTYPE=Linux SHLVL=1 LS_COLORS= EDITOR=vi _=/bin/ps

Einen Prozess vorzeitig beenden: »kill«

Hat man einen Prozess gestartet, so kann man ihn mit Strg-C abbrechen. Einem Prozess, der im Hintergrund läuft, ist so nicht beizukommen.
kill process-id
schickt dem Prozess ein Signal, das, wenn der Prozess es nicht abfängt, zu seinem »Tode« führt.
kill -9 process-id
schickt ein Signal, das der Prozess nicht ignorieren kann und ihn beendet. Sterben Prozesse auch dann nicht, so warten sie in der Regel auf ausstehende I/O-Operationen.
Man kann nur seine eigenen Prozesse umbringen. Als root darf man auch gegenüber Prozessen alles.

Die Haupt-CPU-Verbraucher kontinuierlich anzeigen: »top«

top listet die Haupt-CPU-Verbraucher auf. Die Anzeige wird periodisch aufgefrischt.

top

Dateien mit bestimmten Eigenschaften suchen: »find«

find sucht nach Dateien mit bestimmten Attributen.

find verzeichnis .. [attribut].. aktion

 

Attribut Bedeutung
-name name Sucht nach Dateien mit dem angegebenen Namen
-newer datei Sucht nach Dateien, die neuer sind als datei
 

Aktion Bedeutung
-print, -ls Gibt den Dateinamen aus
-exec  befehl .. \;
-ok befehl .. \;
Führt mit den gefundenen Dateien die angegebenen Befehle aus. Dabei wird in den Befehlen {} durch den Dateinamen ersetzt. -ok bewirkt, dass vor der Befehlsausführung nachgefragt wird.
Einige typische Beispiele:

In Dateien nach bestimmten Zeilen suchen: »grep«

grep sucht in Dateien nach Zeilen, die durch ein Suchmuster beschrieben werden. Die Suchmuster werden als reguläre Ausdrücke (regular expressions) formuliert. Die exakte Behandlung der regulären Ausdrücke sprengt den Rahmen dieser Vorlesung, deshalb mögen einige Beispiele genügen. Wer es genauer wissen will, dem sei das Buch Mastering Regular Expressions von Jeffrey E. F. Friedl empfohlen.
 


Suchmuster Passt auf
Tiger Die Zeichenkette Tiger
^Tiger Tiger am Zeilenanfang.
Tiger$ Tiger am Zeilenende.
^Tiger$ Tiger ist das einzige Wort auf der Zeile.
[tT]iger tiger oder Tiger.
T[aeiou]ger 5 Zeichen, davon 4 wie angegeben. Das zweite Zeichen ist ein beliebiger Vokal.
T[^aeiou]ger 5 Zeichen, davon 4 wie angegeben. Das zweite Zeichen ist jedes Zeichen außer einem Vokal.
^...$ Jede Zeile, die genau drei Zeichen enthält.
^\. Jede Zeile, die mit einem Punkt beginnt. Der \ maskiert wie gewohnt.
^[^.] Jede Zeile, die nicht mit einem Punkt beginnt.
Tiger.* Tiger, gefolgt von einer auch leeren beliebigen Zeichenfolge: Tiger, Tigerin, Tigerhöhle, ...
[A-Z][A-Z]* Ein oder mehrere Großbuchstaben
[A-Z].* Ein Großbuchstabe, gefolgt von einer auch leeren, beliebigen Zeichenfolge.
[A-Z]* Eine auch leere Folge von Großbuchstaben.
grep gibt es in drei Varianten:
 
  • fgrep (grep -F) kennt keine Suchmuster und sucht nur nach festen Zeichenketten.
  • egrep (grep -E) kennt einen erweiterten Satz reguärer Ausdrücke und
  • grep (grep -G) selbst ein Basis-Satz.

  •  

     

    grep [option].. muster [datei] ..



    Option Bedeutung
    -i Ignoriert Groß- und Kleinschreibung
    -v Gibt die Zeilen aus, auf die das Muster nicht passt
    -n Gibt zusätzlich die Zeilennummern aus
    -l Gibt die Namen der Dateien mit Übereinstimmungen aus
    -L Gibt die Namen der Dateien ohne Übereinstimmungen aus
    -c Zählt die Anzahl der Übereinstimmungen

    Einige Beispiele

    Zeichen übersetzen: »tr«

    tr (translate) liest Zeichen und schreibt sie wieder. Die Zeichen können dabei Zusätzlich ist es möglich, Folgen von gleichen Zeichen zu verdichten.

    Wenn man keine Option angibt, wird jedes Zeichen der Zeichenfolge, das in »Satz1« vorkommt, wird durch das korrespondierende Zeichen in »Satz2« ersetzt. Kommt das Zeichen in »Satz1« nicht vor, so bleibt es unverändert. (siehe abschließendes Beispiel).
    Wenn »Satz1« länger ist als »Satz2«, wird das letzte Zeichen in »Satz2« so oft wiederholt, bis beide Zeichenketten gleich lang sind.

    tr [option].. Satz1 [Satz2]



    Option Bedeutung
    -d Entfernt die Zeichen in Satz1 aus der Zeichenfolge
    -s Entfernt mehrfache Vorkommen der Zeichen in Satz1
    -c Ersetzt die Zeichen, die nicht in Satz1 vorkommen

    Beispiele

    tr -d ':' </etc/passwd
    liest /etc/passwd und entfernt aus diesem Zeichenstrom alle Doppelpunkte.

    tr -s '\n'
    ersetzt doppelte oder mehrfache Leerzeilen durch eine einzige.

    Wörter zählen

    Zum Abschluss der Besprechung der Unix-Kommandos möchte ich eine pipe vorstellen, die die Häufigkeitsverteilung der Wörter in einem Text ermittelt. Wie beim Programmieren auch, braucht man zunächst eine Lösungsidee:
    1. Ermittle, welche Zeichen Wörter trennen.
    2. Ersetze diese Zeichen durch \n-Zeichen, so dass auf jeder Zeile nur ein Wort steht.
    3. Entferne leere Zeilen.
    4. Wandle alle Großbuchstaben in Kleinbuchstaben um.
    5. Sortiere alles.
    6. Zähle die mehrfach vorkommenden Zeilen und gebe die Statistik aus.
    Als pipe formuliert sieht die Lösung wie folgt aus:
      tr  ' :.,;()"' '\n\n\n\n\n\n\n\n' <Eingabe.txt |   # 1, 2
      grep -v '^$' |                                     # 3
      tr 'A-ZÖÜÄ' 'a-zöüä' |                             # 4
      sort |                                             # 5  
      uniq -c                                            # 6

    Drucken

    Drucken ist ein sehr komplexes Thema, deswegen an dieser Stelle nur das Wesentliche:

    Wenn man einen PostScript-Drucker besitzt, oder auf eine bestehende PostScript-Drucker-Infrastruktur (wie im ZIV) zurückgreifen kann, hat man unter Linux keine Probleme. Sowohl lokale als auch remote Drucker können benutzt werden. Remote-Drucker können von Unix- oder Windows-Servern betrieben werden.

    Hat man keinen PostScript-Drucker, so muss der Datenstrom durch ein geeignetes Programm (ghostscript) übersetzt werden. Für lokale Drucker kann man das automatisieren, siehe die SuSE-Drucker-Konfiguration mit dem Dienstprogramm yast.

    Gedruckt wird aus der Anwendung heraus: Netscape, Acrobat-Reader, emacs, usw. können PostScript-Druckaufträge generieren.

    Für Text-Dateien, wie etwa C-Programme oder E-Mails, ist a2ps (ascii to postscript) nützlich. a2ps kennt etwa die Syntax von C-Programmen und formatiert die Seiten entsprechend.

    Übungen

    1. Erstellen Sie im Verzeichnis wildcard eine Datei, die zeilenweise die Dateinamen enthält. Geben Sie mit Hilfe eines regulären Ausdrucks alle Zeilen dieser Datei aus, die
      1. mit "a" anfangen
      2. nicht mit "a" anfangen
      3. ein "a" enthalten
      4. als zweites Zeichen ein "a" enthalten
      5. aus zwei Zeichen bestehen
      6. So langsam wird das langweilig ? Dann geben Sie bitte alle Zeilen aus, die kein "a" enthalten.

    2. Geben Sie alle Dateinamen des Verzeichnisses wildcard aus, die kein "a" enthalten.


    Vorlesungsübersicht zurck vor Shell-Programmierung

    Zentrum für Informationsverarbeitung / © Stefan Ost, Mathias Grote / Letzte Änderung: 24. August 2004