A.7 Lösungen zu Kapitel 11
Die größten Programme
Es sollen die zehn größten ausführbaren Programme und Skripte in den Verzeichnissen der Variablen PATH in einer sortierten Top-Ten-Liste ausgegeben werden.
Antwort:
Listing A.6 a1-Lösung
$ cat /tmp/script.sh
#!/bin/bash
MYPATH=`echo $PATH | tr : \ `
{
for DIR in $MYPATH; do
cd $DIR
ls -lF | grep \* | awk '{ print $5 " " $9 }'
done
} | sort -n | uniq | tail –10 | sed s/*// | \
awk 'BEGIN {
platz=10;
}
{
print "Platz " platz-- ": " $2 " (" $1 " bytes)"
}'
$ /tmp/script.sh
Platz 10: postgres (2336018 bytes)
Platz 9: XF86_S3 (2357997 bytes)
Platz 8: XF86_SVGA (2785184 bytes)
Platz 7: scummvm (3138692 bytes)
Platz 6: wine (3160548 bytes)
Platz 5: Xnest (3749689 bytes)
Platz 4: Xvfb (3943162 bytes)
Platz 3: centericq (4244996 bytes)
Platz 2: Xprt (4393472 bytes)
Platz 1: lyx (5398916 bytes)
Zur Lösung: Zunächst werden mittels tr alle Doppelpunkte aus der PATH-Variablen entfernt. Diese neuen Werte legen wir in der Variablen MYPATH ab. Mit einer for- Schleife durchlaufen wir diese Variable und geben die ausführbaren Dateien (mit einem * gekennzeichnet, das wir mittels grep filtern) an awk weiter. Dabei gibt awk nur die Größe der Datei und deren Namen aus.
Diese Ausgabe leiten wir als Kommandogruppe an das Kommando sort weiter, das uns die Werte nach Größe aufsteigend sortiert. Das Programm uniq wirft alle doppelten Einträge heraus, und tail gibt nur die letzten zehn Einträge wieder. Daraufhin entfernen wir (und das ist auch nur Kosmetik) alle *-Zeichen der ausführbaren Dateien mit sed und leiten die Ausgabe an awk weiter.
Rausschmiss!
Die zweite Aufgabe bestand darin, eine Funktion zu schreiben, die Sie in die Startdatei Ihrer Shell integrieren können. Diese Funktion sollte einen angemeldeten Benutzer aus dem System werfen, wozu alle Prozesse des Benutzers beendet werden müssen.
Antwort:
Listing A.7 killuser()
function killuser()
{
if [ `ps auxw | \
nawk '$1 ~ /'"${1}"'/ { print }' | \
wc -l | nawk '{
if($1<1) {
print "0"
} else {
print "1"
}
}'` = 0 ]; then
echo "Keine Prozesse gefunden."
else
echo "--* Beende die folgenden Prozesse: *--"
ps auxw| nawk '$1 ~ /'"${1}"'/ { print }'
kill –9 `ps auxw | nawk '$1 ~ /'"${1}"'/ \
{ print $2 }'`
echo "--------------* done. *---------------"
fi
}
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.