Betriebssysteme Letschert - Übung 2-4

Aufgabe 4 (Bonusaufgabe)

  1. Informieren Sie sich mit Hilfe der Online-Unterlagen von Dr. Jäger über die Bash. Erläutern Sie die Aufgaben der Dateien .profile und .bashrc.

    .profile wird von Login-Shells gelesen und enthaält Voreinstellungen wie Umgebungsvariablen, Aliase, den Pfad usw.
    .bashrc hat dieselbe Aufgabe, wird aber von allen Nicht-Login-Shells gelesen.

  2. Erlätern Sie die Wirkung folgender Kommandos:
    # IF Anweisung
    if ! test -d Verz; then mkdir Verz; else echo Schon Da; fi
    
    -------------------------
    
    for f in *.c
    do
        mv $f ${f%.c}.cc
    done
    
    -------------------------
    
    a = $1
    case $a in
      J*) echo JA ;;
      N*) echo NEIN ;;
      *)  echo SONSTWAS ;;
    esac
    

    Die if-Anweisung prüft, ob das Verzeichnis "Verz" schon da ist und erstellt es gegenenfalls. Sonst wird eine Fehlermeldung ausgegeben.

    Die for-Schleife benennt alle .c-Dateien in .cc-Dateien um.

    Die case-Struktur Prüft den ersten Parameter der Kommandprozedur, on er mit J oder N anfängt.

  3. Was ist eine Kommandoprozedur, was ein Shellskript? Welche Bedeutung hat die Zeile
    #! /usr/bin/perl
    
    am Anfang einer Datei?

    Das Skript kann mit der "magischen Zeile" direkt gestartet werden.

  4. Schreiben Sie eine Kommandoprozedur reinige die in ein als Parameter übergebenes Verzeichnis wechselt und dort alle Dateien mit der Endung .log, .aux, .tmp und .o sowie alle Sicherungsdateien des Emacs löscht.

    reinige

  5. Schreiben Sie eine Kommandoprozedur, die alle ihre Argumente ausgibt.

    print_args.sh

  6. Schreiben Sie ein C++-Programm, das seine Kommandozeilenparameter ausgibt. Übersetzen Sie dieses Programm und schreiben Sie eine Kommandoprozedur mit Interpreterausruf. Ihr übersetztes Programm ist der Interpreter. Erläutern Sie die Wirkung der Kommandoprozedur!

    print_args.cc
    ue6.sh
    Das Betriebssystem ruft den Interpreter für die Kommandoprozedur automatisch auf mit der Kommandoprozedur als Argument.

  7. Schreiben Sie eine möglichst einfache Kommandoprozedur selbstmord, die sich bei Aufruf selbst löscht.

    selbstmord

  8. Nehmen Sie an, cmd sei eine korrekt ausführbare Kommandoprozedur, die Shellkommandos enthält. Ohne die "magische Zeile" des Interpreteraufrufs führt der Aufruf
    strace cmd
    
    zum Fehler. Mit ihr jedoch nicht. Ansonsten macht die "magische Zeile" keinen Unterschied. Erklären Sie!

    Der Aufruf einer Kommandoprozedur ohne "magische Zeile" erzeugt keinen neuen Prozess. Genau das aber versucht strace. Ohne die "magische Zeile" kann kein neuer Prozess erzeugt werden.

  9. Schreiben Sie ein C++-Programm zur Promfaktorzerlegung und starten Sie mit at einen Batchjob, der abends um 10.15 Uhr mit Hilfe einer Make-Datei prüft, ob es bereits übersetzt und gebunden wurde, bei Bedarf übersetzt und/oder bindet und dann mit dem erzeugten Programm die Zahlen aus der Datei prim-eingabe.txt zerlegt und das Ergebnis in prim-ausgabe.txt in Ihrem Heimatverzeichnis schreibt. Das ausführbare Programm und eventuelle Objektdateien sollen wieder gelöscht werden.

    primfaktoren.cc
    atjob.sh
    prim-eingabe.txt
    prim-ausgabe.txt
    Der Befehl zum Aktivieren des at-Jobs ist:

    at -f atjob.sh '22:15'