Beruflich Dokumente
Kultur Dokumente
1. UNIX-Tools
In diesem abschliessenden Kapitel sollen einige Anregungen aus der Praxis vermittelt
werden. Der Kurs wird schliesslich mit der Betrachtung einiger UNIX-Tools wie grep,
sed, tr, find und der Vorstellung einiger Public Domain Tools abgerundet. Ein kurzer Aus-
blick in die UNIX-Zukunft soll verdeutlichen, dass UNIX kein totes Betriebssystem ist,
sondern von verschiedenen Firmen, Gremien, Universitten und Konsortien weiterent-
wickelt wird.
Suchen aller Files welche "pattern" enthalten mit Angabe der Zeile
$ find . -type f -exec grep "stdio.h" /dev/null {} \;
./Xm/examples/dogs/Dog.c:#include <stdio.h>
./Xm/examples/dogs/Square.c:#include <stdio.h>
sed
Commandfile
Beispiele
# #
# # ###### # # ####
# # # # # # #
####### ##### # # # #
# # # # # # #
# # # # # # #
# # ###### ###### ###### ####
Script "killbyname"
Damit knnen Processe bequem mittels Process-Namen gestoppt werden.
Beispiel: killbyname xterm
Damit werden alle xterms gestoppt
#!/bin/sh
kill -9 ps -ax | grep $1 | sed -e "s/^ *//" | sed -e "s/ .*//"
Zuerst werden am Anfang jeder Zeile alle Leerzeichen entfernt (s/^ *), dann wird alles
nach dem ersten Leerzeichen gelscht (s/ .*//). Damit verbleiben die PIDs welche dem
Kommando kill bergeben werden.
Alle Leerzeilen in File lschen
$ sed -e /^ *$/d file1 > file2
$ sed -e s/^$// file1 > file2
Blanks am Ende einer Zeile lschen
$ sed -e s/ *$// file1 > file2
Beispiele
gemeinsame Zeilen
Zeilen nur in File-2 Zeilen nur in File-1
Zeilen, welche nur im file-1 enthalten sind, stehen in der ersten Spalte, Zeilen welche in
beiden Files vorhanden sind stehen in der mittleren Spalte und Zeilen welche nur im
file-2 vorhanden stehen in der dritten Spalte.
ndere in old.c die Linie 10 von "getenv()" auf "getpwnam()" um eine bereinstim-
mung mit new.c zu erhalten.
27a28
> /* -------- */
Fge in old.c auf der Linie 27, die Zeile /* -------- */ ein, welche sich in new.c auf der
Linie 28 befindet, um eine bereinstimmung zu erreichen.
Beispiel: Das C-Programm old.c wurde an Kunden versendet. Man stellt spter Fehler
an diesem Programm fest und generiert das neue Programm new.c. Dieses
Programm ist sehr gross, so dass die Telephon-Kosten (Modem) sehr teuer
zu stehen kommen. Anstelle des gesamten Programms new.c versendet man
ein durch diff -e generiertes ed-Script, das old.c in new.c berfhrt.
Im generierten ed-Script mssen noch die ed-Kommandos w zum speichern und q zum
verlassen des ed Editors eingefgt werden
$ vi new.ed
Es wurden 3774 Zeichen gelesen und 3791 gespeichert. Ein erneuter Vergleich zeigt,
dass die Files nun bereinstimmen:
$ diff old.c new.c
1.2 Filter-Kommandos
Filter-Kommandos stehen praktisch immer in Pipes. Sie verndern den Datenfluss von
Kommando zu Kommando in einer bestimmten Weise; sie wirken als Filter. Typische
Filter sind sort, grep, cut, tee, uniq, tr und weitere.
1.2.1 sort (sort and collate lines)
Sort sortiert eine Datei alphanumerisch oder numerisch unter Bercksichtigung des ln-
derspezifischen Zeichensatzes (Vergleich mit Zeichensatz = collate). Standardmssig
wird der ASCII-Zeichensatz verwendet. Wird das UNIX-System in der lnderspezifi-
schen Version betrieben (NLS-Zusatz), so wird der entsprechende Zeichensatz gewhlt.
Sort wird hufig auf tabellenartige Files angewendet. Die Sortierung erfolgt dabei grund-
stzlich auf der ersten Spalte.
0 1 2 3 4
Erste Spalte = 0
Beispiele
$ sort /etc/passwd Alphanumerisch nach Login-Namen sortieren
$ sort -r /etc/passwd Reverse sortieren nach Login-Namen
$ ls -l | sort -n +3 ls -l numerisch nach der Filegrsse sortieren,
dies ist unter SUNOS-4.1 das Feld 3
$ sort -t: +2n -3 /etc/passwd Sortiere /etc/passwd nach den UIDs.
+2n heisst: Sortiere die Spalte Nr. 2 numerisch
und stoppe in der Spalte Nr 3. Damit wird nur
nach den UIDs sortiert.
Datenstrme mischen und sortieren
Sort ist in der Lage mehrere Files zu mischen und zu sortieren (sort file1 file2). Etwas
schwieriger wird es, wenn sort seinen Input aus einer Pipe liest, und dieser mit einem File
gemischt und sortiert werden soll, wie das folgende Beispiel zeigt.
Beispiel: Der Output von ls -1 soll mit der Datei file gemischt und sortiert werden.
$ ls -l $ cat file ls -1 | sort - file
adm bin adm
boot cnode bin
demo etb boot
diag cnode
dict demo
etc diag
export dict
games etb
etc
export
games
Sort liest ls -1 via Pipe und speichert intern die gelesenen Daten. Anschliessend wird der
Standard-Input mittels "-" explizit fr das Argument files geffnet und der Inhalt eingele-
sen. Dann erfolgt intern die Sortierung der zwei Datenkanle.
File
Spalten
file1 file2
file
Beispiele
echo ""
echo "calculating disk space ..."
echo ""
sum=0
for i in df | sed "s/.*[a-z][ ]*\([0-9]*[ ]\).*/\1/"
do
sum=expr $sum + $i
done
echo "total space .......: $sum kbytes"
sum=0
for i in df | sed "s/.*[a-z][ ]*[0-9]*[ ]*\([0-9]*[ ]\).*/\1/"
do
sum=expr $sum + $i
done
echo "total used ........: $sum kbytes"
sum=0
for i in df | sed "s/.*[a-z][ ]*[0-9]*[ ]*[0-9]*[ ]*\([0-9]*[ ]\).*/\1/"
do
sum=expr $sum + $i
done
echo "total available ...: $sum kbytes"
old="$1"
new="$2"
shift 2
print -p
pipe
stdout (1)
stdout (1)
read -p pipe
Das Shellscript bertrgt Daten mittels print -p an den Co-Process und liest Daten mittels
read -p von diesem.
Beispiele
if [ $# -lt 1 ]
then
echo "Usage: $0 loginname"
exit 1
fi
loginname="$1"
main()
{
char c;
read(0,&c,1);
write(1,&c,1);
}
stty raw
answer=input_nowait
stty -raw