| |
|
GUIDES UND TUTORIAL |
|
|
|
|
|
Allgemeines
Notieren Sie sich bei der Bearbeitung der Aufgaben jeweis das/die notwendige(n) Kommando(s)
und die Ergebnisse, welche die Anwendung des/der Kommando(s) bringt. Bei Aufgaben mitShellskripts ist nicht nur das dokumentierte(!) Skript, sondern auch eine typischeAusgabe vorzulegen. Die ersten Aufgaben sollen auch zum Erforschen des Systems dienen, weshalb die Aufgaben so gehalten sind, daß Sie noch Zeit übrig haben.Einstieg- Loggen Sie sich mit Ihrem Benutzerkennzeichen ein und geben Sie ein neues
Paßwort ein. Öffnen Sie dazu ein Shell-Fenster.
- Stellen Sie fest, in welchem Verzeichnis Sie sich befinden.
- Stellen Sie fest, welche Dateien und Verzeichnisse sich in Ihrem Home-Directory
befinden.
- Betrachten Sie den Inhalt der Datei .profile. Falls es keine solche Datei
geben sollte, kopieren Sie sich diese aus dem Verzeichnis /etc/skel in
Ihr Heimatverzeichnis. Ist auch dort keine vorhanden, legen Sie eine solche Datei an,
indem Sie das folgende Kommando ausführen (Achtung: Die verschiedenen
Anführungszeichen beachten!)
echo "echo 'Hallo'" > .profile
- Wer arbeitet noch am Rechner?
- An welchem Terminal arbeiten Sie selbst?
- Öffnen Sie ein zweites Shell-Fenster.
- Geben Sie den Inhalt des Verzeichnisses "/etc" aus. Verwenden Sie verschiedene
Optionen des ls-Kommandos. Verwenden Sie für längere Ausgaben eine Pipe aus
"ls" und "more".
- Informieren Sie sich über den Gebrauch des Kommandos "banner".
- Legen Sie in Ihrem Home-Directory die Unterverzeichnisse mit den Namen "demo"
und "bin" an.
- Welche Zugriffsrechte haben die beiden neu angelegten Verzeichnisse?
- Kopieren Sie einige Dateien aus "/etc" in Ihr Verzeichnis "demo". Wie haben sich
Eigentümer- und Zugriffrechte gegenüber den Originalen geändert?
- Setzen Sie die Zugriffsrechte des Verzeichnisses "bin" in Ihrem Heimatverzeichnis
so, daß für User, Group und Others die "execute"- und "read"-Erlaubnis,
Schreibrecht aber nur für den User gesetzt ist.
- Kopieren Sie die Datei ".profile" in das Unterverzeichnis "demo"; sie soll
dort den Namen "pr1" haben.
- Versuchen Sie das Ganze mit einem anderen Kommando und E/A-Umleitung,
diesmal mit der Zieldatei "pr2".
- Wechseln Sie in das Verzeichnis demo und geben Sie die Datei "pr1" auf
dem Bildschirm aus.
- Benennen Sie die Datei "pr2" in "prof" um.
- Erzeugen Sie ein (Hard-)link auf die Datei "prof"; es soll den Namen
"prof1" haben.
- Erzeugen Sie ein Softlink (symbolisches Link) auf die Datei "prof"; es soll
den Namen "prof2" haben.
- Sorgen Sie dafür, daß im Directory "demo" keine Dateien gelöscht
werden können.
- Versuchen Sie, die Datei "prof" zu löschen. Was geschieht? Setzen Sie die
Zugriffsrechte von "prof" auf 000.
- Nehmen Sie den Schutz von "demo" wieder zurück und versuchen Sie, "prof"
nun zu löschen. Was geschieht? Wie verhalten sich die beiden Links prof1 und prof2
nach dem Löschen von prof?
- Suchen Sie die Benutzer-, Gruppen und Paßwortdatei auf der Platte. Welche
Zugriffsrechte haben diese Dateien?
- Welche Prozeßnummern haben Ihre Prozesse?
- Welche Prozesse fallen unter die "Top 10" (Tip: Kommando "top" im Shell-Fenster
aufrufen)? Starten Sie den Internet-Browser und beobachten Sie, wie sich die Anzeige
ändert.
- Rufen Sie eine zweite Shell auf (sh). wie ist das Verwandtschaftsverhältnis
zur Login-shell (Kommando "ps -f")?
- Rufen Sie nun noch eine andere Shell, die "bash" auf. Wie sieht nun Ihre
Prozeßliste aus?
- Bauen Sie nun die Shell-Prozesse mit CTRL-D schrittweise wieder ab. Was
passiert beim Abbau der Login-Shell?
- Loggen Sie sich wieder ein und probieren Sie diesmal die Überlagerung
der aktuellen Shell mit der "bash", indem Sie das Kommando "exec bash" eingeben. Was
passiert, wenn Sie die "bash" beenden?
- Erzeugen Sie eine Shellvariable namens "HI" mit dem Wert "Hi, wie geht es?"
Überprüfen Sie den Variableninhalt.
- Öffen Sie nun wieder eine zweite Shell. Welchen Wert hat "HI" jetzt?
Weisen Sie der Shell-Variablen den Wert "Hi Fan!" zu und überprüfen Sie den
Wert. Beenden Sie die zweite Shell und überprüfen Sie nochmals den Wert von "HI".
Wiederholen Sie die o. g. Schritte, aber exportieren Sie "HI" gleich am Anfang.
Editor vi (optional)
- Machen Sie sich mit dem Editor "vi" vertraut. Üben Sie besonders
das Eingeben und Löschen von Zeilen und einzelnen Zeichen sowie das Ersetzen von
Zeichen. Geben Sie dazu folgenden Text ein
und speichern Sie ihn auf der Platte unter dem Namen "text1". Denken Sie daran, daß
am Ende jeder Zeile die Return-Taste gedrückt werden muß. Vermeiden Sie auch den
Gebrauch von Umlauten. Verwenden Sie stattdessen die Umschreibungen 'ae', 'oe', 'ue',
'Ae', 'Oe', 'Ue', 'ss' oder die beim Satzsystem TEX übliche Form
'"a', '"o', '"u', '"A', '"O', '"U', '"s'.
"Denken Sie, wie schön der Krieger, der die Botschaft, die den Sieg, den die
Athener bei Marathon, obwohl sie in der Minderheit waren, nach Athen, das in großer
Sorge, ob es die Perser nicht zerstören würden, schwebte, erfochten hatten,
verkündete, brachte, starb!"
(Auch wenn Sie es nicht glauben - das ist ein korrekter deutscher Schachtelsatz).
Nach Korrektur der Tippfehler speichern Sie den Text ab und ersetzen Sie nun alle
Vorkommen von "Athen" durch "München". Was geschah mit den "Athenern"?
- Kopieren Sie "text1" auf "text2" und bearbeiten Sie nun "text2".
Ersetzen Sie "München" wieder durch "Athen".
Fügen Sie nun die beiden Zeichen "> "
(Größerzeichen und Leerzeichen) am Zeilenanfang ein (global ersetzen)
und speichern Sie die Datei. Verlassen Sie den "vi" und drucken Sie beide Texte aus.
Prozesse und Pipes
- Lassen Sie den Inhalt des Verzeichnisses /home rekursiv (Langfassung) im
Hintergrund auf die Datei "home.aus" in Ihrem Home-Directory ausgeben.
- Informieren Sie sich über alle gerade im System laufenden Prozesse.
War Ihr Hintergrundprozeß noch dabei?
- Sehen Sie sich die Datei "home.aus" an, sobald Ihr Hintergrundprozeß
beendet ist und löschen Sie diese danach.
- Versuchen Sie dasselbe mit einem Prozeß, der durch das Kommando
"sleep 300 &" erzeugt wird.
- Mit Pipes kann man recht komfortable Kommandos bilden. Verwenden Sie die
Hintereinanderschaltung von "ps -ef" und "grep", um die Prozesse eine bestimmten
Benutzers oder eines bestimmten Terminals anzuzeigen.
- Geht es auch einfacher, die Prozesse eines Benutzers anzuzeigen? Falls ja, wie?
- Das Kommando "find" wird verwendet, um Dateien nach bestimmten Kriterien zu suchen.
- Geben Sie einen Aufruf von "find" an, der im Verzeichnis /home alle Dateien
sucht, auf die innerhalb der letzten 10 Tage zugegriffen wurde.
- Geben Sie einen Aufruf von "find" an, der im Verzeichnis /var alle Dateien
sucht, die dem User "root" gehören.
- Wie können Sie die Fehlermeldungen ("...permission denied...") loswerden?
- Noch eine Theorie-Frage. Welches find-Kommando müßte man
verwenden, um in allen Dateien auf der Platte mit der Endung ".txt" nach der
Zeichenkette "UNIX" zu suchen. Nicht ausprobieren, sondern theoretisch
beantworten!
- Verwenden Sie das at-Kommando, um eines oder mehrere Kommandos eine
Viertelstunde später ausführen zu lassen. Beachten Sie dabei, daß
die Ausgabe der abgesetzten Aufträge in eine Datei geschrieben werden soll
(Umleitung). Kontrollieren Sie die abgesetzen Aufträge und später die
erfolgreiche Ausführung der Kommandos. Löschen Sie eventuell noch vorhandene
at-Jobs vor dem Logout mit
at -r `at -l | cut -f1`
Erklären Sie obige Kommandofolge.
Einstieg Shell-Programmierung
- Nun wird das erste Shell-Skript erzeugt. Wechseln Sie in Ihr "bin"-Verzeichnis.
Legen Sie eine Datei "run" an und schreiben Sie einige Kommandos (echo, ls, cd, pwd,
usw.) in diese Datei. Setzen sie das Ausführungsrecht (User) für diese Datei.
Durch Aufruf von "run" werden nun die darin stehenden Kommandos ausgeführt.
Probieren Sie verschiedene Kommandos aus und entwerfen Sie weitere Skripten.
- Schreiben Sie ein Shell-Skript, das in einer Endlosschleife
alle 10 Sekunden die Uhrzeit (Stunde und Minute) per "banner"-Kommando auf
den Bildschirm ausgibt und vorher den Bildschirm löscht. Das Skript
kommt natürlich wieder in Ihr "bin"-Verzeichnis.
Wie können Sie das Skript beenden?
Was passiert, wenn Sie das Skript im Hintergrund starten? Wie können Sie
es nun beenden?
- Mit dem Kommando nohup kann man Hintergrundaufträge absetzen, die auch
nach dem Logout am Terminal weiterlaufen. Eventuelle Ausgaben werden in die Datei
"nohup.out" im gerade aktuellen Verzeichnis geschrieben. Estellen Sie ein Shellskript
namens "bat", das zunächst ins Heimatverzeichnis des Benutzers wechselt und dann
die Parameterzeile an "nohup" übergibt (Start als Hintergrundprozeß nicht
vergessen).
Kommunikation
- Machen Sie sich mit den E-Mail-Kommando "mailx" vertraut. Senden Sie zunächst
Post mit dem Kommando "mailx" an sich selbst. Wie kann man den Usernamen eines
Empfängers auf dem lokalen Rechner herausfinden?
- Verschicken Sie einen Brief unter Verwendung von "mailx" duch ein Kommando
auf der Eingabezeile (also ohne "mailx" interaktiv zu bedienen). Der Brieftext soll
aus einer bereits vorhandenen Datei kommen, auf der Kommandozeile sollen Betreff und
Enmpfänger angegeben werden.
- Schicken Sie weitere Briefe an sich selbst und an andere. Verwenden Sie
zum Senden und Lesen das Kommando "pine". Informieren Sie sich gegebenenfalls per
"man"-Kommando oder die Online-Hilfe über die Funktion von "pine".
- Machen Sie sich mit den Kommandos "telnet", "finger" und "ftp" vertraut.
- Simulieren Sie den Wechsel per "telnet" auf einen anderen Rechner mit dem
Kommando "telnet localhost".
- Fragen Sie mit "finger" einige Benutzeraccounts ab. Was geschieht beim
Aufruf von "finger @pegasus"?
- Der Linux-Rechner "ftp.ee.fhm.edu" hat keine Studenten-Accounts, sie
können sich daher dort nicht einloggen. Zum Dateitransfer mit FTP ist dort
jedoch ein sogenannter "anonymer FTP" eingerichtet. Verwenden Sie das Kommando "ftp"
und geben Sie als Benutzerkennung "ftp" und als Passwort Ihre Mailadresse ein. Welche
Kommandos können Sie benutzen? Wie stellt sich die Dateistruktur dar? Holen Sie
sich Dateien, die Sie interessieren, auf Ihren Rechner.
Shell-Programmierung
- Zu Beginn etwas Mathematik. Schreiben Sie ein Shell-Skript "ggt", daß den
größten gemeinsamen Teiler der als Parameter übergebenen beiden Zahlen
berechnet. Formulieren Sie die Berechnung des GGT als Shell-Funktion. Der Algorithmus
lautet folgendermaßen:
ggt(x,y):
solange x =/ y wiederhole
falls x > y dann x := x - y
sonst y := y - x;
Denken Sie daran, daß man zum Rechnen das Kommando "expr" braucht.
- Formulieren Sie ein Shell-Skript, das als Eingangsparameter ein beliebiges
Verzeichnis hat und dieses Verzeichnis und alle seine Unterverzeichnisse bearbeitet.
Es soll dabei zählen:
- wieviele normale Dateien vorhanden sind,
- wieviele Verzeichnisse vorhanden sind,
- wieviele sonstige Dateien (Softlinks, Devicefiles, etc.) vorhanden sind
und dieser drei Zahlen ausgeben.
Überprüfen Sie zuerst, ob der Parameter vorhanden ist und eine Verzeichnisangabe
enthält.
Hinweis: Verwenden Sie das find-Kommando um alle Datei- und Verzeichnisnamen zu ermitteln
und bearbeiten Sie dann in einer Schleife die Ausgabe des find-Kommandos.
- Manche Benutzer achten nicht auf den verbrauchten Plattenplatz. Als Systemverwalter
wollen Sie natürlich die Überwachung der Platte automatisieren. Schreiben Sie
ein Shellskript "check", das die Belegung der einzelnen Verzeichnisse im Directory "/home"
ermittelt und die Verzeichnisse auflistet, deren Dateien insgesamt einen vorgegebenen
Wert MAXBLOCKS überschreitet.
Um den belegten Platz eines Verzeichnisses zu ermitteln, wird das Kommando
"du -s <Verzeichnisname>" verwendet. Es werden die Anzahl der belegten Blöcke
und das Verzeichnis ausgegeben. Benötigt wird aber nur der Zahlenwert. "du"
muß also für jedes Verzeichnis in "/home" getrennt aufgerufen werden.
Bei Überschreiten von MAXBLOCKS wird eine Zeile an die Datei "$HOME/du-list"
angehängt, die den Verzeichnisnamen und die Anzahl der belegten Blöcke
enthält.
- In der Vorlesung haben Sie gesehen, daß mit dem trap-Kommando beim logout
ein Shell-Skript gestartet werden (Signal 0). Erweitern Sie ihre Datei ".profile"
dahingehend, daß beim Login eine Datei ".lastlog" auf dem Bildschirm angezeigt
wird. Danach wird die Datei mit dem Text:
"Letztes Login: ", gefolgt vom aktuellen Datum/Uhrzeit
überschrieben. Erweitern Sie ".profile" um einen Trap-Befehl, der an die Datei
".lastlog" eine zweite Zeile mit dem Text:
"Letztes Logout: ", gefolgt vom aktuellen Datum/Uhrzeit
erweitert. Bei jedem Login werden nun die Zeilen ausgegeben und Sie können so
überprüfen, ob jemand Fremdes mit Ihrer Benutzerberechtigung gearbeitet hat.
|
|
|
|
|
|