Übungen zu ``Shellprogrammierung''


Sommersemester 97

Blatt 6 vom: 2.6.97
letzter Abgabetermin: 9.6.97 (vor 10.00 Uhr)

Aufgabe 1 (1 Punkt)

Schreiben Sie ein Shell-Skript, das unter Verwendung von if und while n! berechnet. Beachten Sie, daß Ihr Programm auch mit fehlerhafter Eingabe zurechtkommen muß.

Aufgabe 2 (2 Punkte)

Schreiben Sie ein Shell-Skript, welches alle Primzahlen bis zu einer angegebenen Zahl ausgibt. Beachten Sie, daß Ihr Programm auch mit fehlerhafter Eingabe zurechtkommen muß.

isolde Loesung 1 prim 10
1
2
3
5
7
isolde Loesung 2 time prim 250 > /dev/null
      120.1 real        58.9 user        46.8 sys

Wer schreibt die schnellste Version? Benutzen Sie zur Lösung der Aufgabe nur fertige Kommandos.

Aufgabe 3 (2 Punkte)

a)
Schreiben Sie ein Shell-Skript, das alle Rechner einer Netzgruppe (applied, praxis oder lehre) auf einer Zeile liefert.
b)
Schreiben Sie ein Shell-Skript, das testet, welche Rechner einer Netzgruppe eingeschaltet sind. Folgende Zeilen könnten helfen:
isolde Loesung 3 ping arnold 1 1
PING arnold: 1 data bytes

----arnold PING Statistics----
1 packets transmitted, 0 packets received, 100% packet loss
isolde Loesung 4 ping thor 1 1
PING thor: 1 data bytes
9 bytes from 131.173.161.1: icmp_seq=0. 

----thor PING Statistics----
1 packets transmitted, 1 packets received, 0% packet loss

Ein Beispiel:
lyra Loesung 21 testHosts applied
artos ok
orff ok
mozart ok
perky rip
...

Aufgabe 4 (1 Punkt)

Wie groß kann eine Datei maximal werden, falls die dinode Struktur aus Kapitel 4.6 vorausgesetzt wird und

1.
ein Block 512 Byte enthält,
2.
die Datenblöcke mittels bis zu dreifach indirekter Adressen adressiert werden und
3.
in di_addr drei Einträge für die indirekte Adressierung vorgesehen sind.

Bevor Sie diese Aufgabe angehen, sollten Sie sich über die Verwendung von di_addr im klaren sein.

Aufgabe 5 (2 Punkte)

Stellen Sie folgenden Sachverhalt graphisch dar:

  1 $ ls -lRi
  .:
    2 drwxr-xr-x 2   0/0      128 ./dev
    9 drwxr-xr-x 1   0/0      128 ./man
   10 drwxr-xr-x 1   0/0       48 ./tmp
  ./dev:
    3 br-------- 1   0/0    0,  0 ./dev/root
    4 br-------- 0   0/0    1,  0 ./dev/A:
    5 br-------- 1   0/0    1,  1 ./dev/B:
    6 crw-r--r-- 1   0/0    0,  0 ./dev/null
    7 crw-r--r-- 1   0/0    1,  0 ./dev/tty
    8 crw-r--r-- 1   0/0    1,  2 ./dev/err
  ./man:
   13 -rw-r--r-- 1   0/0     1024 ./man/stdio
  ./tmp:
   11 drwxr-xr-x 3   0/0       48 ./tmp/Old
  ./tmp/Old:
   12 -rw-r--r-- 2   0/0        3 ./tmp/Old/xx
  1 $ mount /dev/A: /tmp
  1 $ cd /tmp

Bei der Betrachtung der Daten werden Sie feststellen, daß einiges nicht konsistent ist. Korrigieren Sie die Daten entsprechend, und stellen Sie auch das reparierte Dateisystem graphisch dar. Sie sollten das Problem mit dem Hintergedanken lösen, daß keine Daten verlorengehen dürfen.

Aus Ihren Skizzen muß hervorgehen:

1.
Zusammenhang zwischen Dateiname und Inodenummer,
2.
Zusammenhang zwischen Inode und Datenblöcken,
3.
die Information von di_nlink,
4.
wie sich das Dateisystem durch den mount-Aufruf verändert.

Aufgabe 6 (2 Punkte)

Nachdem ein Rechner unerwartet vom Strom getrennt wird, kann die logische Struktur auf der Platte in Unordnung sein. Nennen Sie vier, in ihrer Art unterschiedliche Probleme, die auftreten können, und geben Sie jeweils einen vernünftigen Lösungsvorschlag an. Verwenden Sie für Ihre Reparaturvorschläge unter anderem folgende Begriffe: freie Liste, belegte Blöcke, Inode-Liste, freie Inodes und disjunkt.