• Keine Ergebnisse gefunden

Ubung Technische Praxis der Computersysteme 1 ¨

N/A
N/A
Protected

Academic year: 2021

Aktie "Ubung Technische Praxis der Computersysteme 1 ¨"

Copied!
8
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Fakult¨at f¨ur Mathematik Letzte ¨Anderung am 26. Oktober 2015 Universit¨at Wien, Wintersemester 2015

Ubung Technische Praxis der Computersysteme 1 ¨

29.10., 05.11., 12.11., 19.11, 26.11. und 03.12.

jeweils von 15:40 - 19:25

im PC-Unterrichtsraum 6, W¨ahringer Straße 29

Ubungsleiter: Thomas Leitner¨ Tutoren: Mario Sassmann

Praxis-Homepage:http://mat.univie.ac.at/praxis

Allgemeines

• Die Aufgaben k¨onnen in beliebiger Reihenfolge gemacht werden, allerdings ist es f¨ur Anf¨anger leichter, die Aufgaben der Reihe nach zu erledigen.

• Zusammenarbeit bei den Aufgaben ist erlaubt, die Abgabe der Aufgaben kann aber maximal in Zweiergruppen erfolgen, wobei beide Studierende alle m¨oglicherweise auf- tauchenden Fragen beantworten k¨onnen m¨ussen.

• Die Abgabe von Aufgaben ist auf Deutsch oder Englisch m¨oglich – ausreichende Kennt- nisse in einer dieser Sprachen sind Voraussetzung f¨ur die Teilnahme an der ¨Ubung!

• Die Aufgaben sind in Gruppen eingeteilt und die Abgabe von Aufgaben erfolgt aus- schließlich in diesen Gruppen (d.h. sobald man alle Aufgaben einer Gruppe erledigt hat, kann man diese Gruppe abgeben). Schafft man nicht alle Aufgaben einer Gruppe, so kann man nat¨urlich auch nur die bearbeiteten Aufgaben abgeben.

Jede Gruppe von Aufgaben kann aber nur einmal abgegeben werden (d.h. das Nach- bringen von Aufgaben einer bereits abgegebenen Gruppe ist nicht m¨oglich).

• Die Abgabe einer Aufgabengruppe erfolgt ausschließlich zu obigen ¨Ubungszeiten, und zwar durch Vorzeigen der Aufgaben am Computer und durch die entsprechenden Er- kl¨arungen. Ohne Letztere k¨onnen wir aufgrund der f¨ur alle identen Angaben ein Bei- spiel nicht werten - auch wenn es richtig eingetippt ist. Das Herzeigen am Rechner soll in Echtzeit erfolgen (History allein reicht nicht) – Ausnahmen sind bei den jeweiligen Aufgaben explizit angef¨uhrt.

• Es ist m¨oglich, die Aufgaben am eigenen Laptop (zu Hause) vorzubereiten, man muss sie nicht erst in der ¨Ubung machen. Das ¨andert aber nichts an der Art und Weise der Abgabe (siehe obige Punkte).

(2)

• Die Aufgabengruppen sollen im Verlauf der ¨Ubung abgegeben werden. Die Abgabe von mehr als drei Aufgabengruppen in der letzten ¨Ubungseinheit ist nur in begr¨undeten Ausnahmef¨allen m¨oglich und ist vorher beim ¨Ubungsleiter zu beantragen!

• Bei jeder Aufgabe ist angemerkt, wieviele Punkte sie wert ist (• = 1 Punkt) – nor- malerweise ist eine Aufgabe einen Punkt wert. Insgesamt k¨onnen 38 Punkte erreicht werden, f¨ur eine positive Note m¨ussen mindestens 20 Punkte erreicht werden.

• Fragen k¨onnen dem Tutoren oder ¨Ubungsleiter nat¨urlich jederzeit gestellt werden.

Aber: Fragen und Abgeben einer Aufgabengruppe in einem geht nicht! Daher zuerst die Aufgaben machen, eventuelle Fragen dazu stellen und, sobald man die Aufgaben f¨ur sich zufriedenstellend erledigt hat, die Gruppe von Aufgaben abgeben.

• Falls nicht anders bei einer Aufgabe angegeben, wird bei jeder Aufgabengruppe vor- ausgesetzt, dass man

– den Rechner vor sich eingeschaltet und – sich am Linux-System angmeldet hat.

Die Aufgaben m¨ussen, falls nicht anders angegeben, in einem Terminal ausgef¨uhrt werden.

Aufgaben

Gruppe 1 Desktop-Umgebung und Systemstatus

1.1. • Erkunde Deine Desktop-Umgebung sowie die Systemeinstellungen und finde heraus:

• Welche Desktop-Umgebung l¨auft.

• Wie Du das Aussehen des Desktops ver¨andern kannst (Hintergrund, Window-Aussehen, u.s.w.).

• Wie Du das Keyboard-Layout ver¨andern kannst.

• Wie Du die Geschwindigkeit der Maus beeinflussen kannst.

1.2. • Weitere Erkundungen:

• Finde heraus welche Web-Browser, Mail-Programme, Media-Player und Spiele auf Deinem System installiert sind.

• Offne einen Browser Deiner Wahl und finde heraus, welche Linux-Kernel-Version ak-¨ tuell ist.

• Wie kannst Du das Browser-Fenster minimieren/maximieren? Wie die Gr¨oße anpas- sen? Wie auf einen anderen Workspace (virtuellen Desktop) verschieben?

1.3. • Offne den Dateimanager und f¨¨ uhre folgende Aktionen aus:

• Lege ein neues Verzeichnis directory in Deinem Homeverzeichnis an.

• Lege in dem Verzeichnis directory eine Textdatei namensfile an und schreibe mit einem Editor Deinen Namen hinein.

• Verschiebe die Datei file aus dem Verzeichnis directoryin Dein Homeverzeichnis.

(3)

• L¨osche sowohl das Verzeichnis directory als auch die Datei file.

1.4. • Offne ein Terminal und finde heraus:¨

• Wie lange l¨auft das System schon?

• Wieviel Arbeitsspeicher ist frei?

• Wer ist gerade eingeloggt? Wer war zuletzt eingeloggt?

Gruppe 2 Dateien und Verzeichnisse

2.1. • Lies die Manual-Page des Befehlsls und finde heraus:

• Wie kannst Du Dir ein langes Listing anzeigen lassen?

• Wie kannst Du Dir die Dateien der Gr¨oße/der Modifikationszeit nach anzeigen lassen?

Anschließend wechsle in das Verzeichnis/etc/ und lass Dir ein langes Listing der Dateien in aufsteigender Gr¨oße anzeigen.

2.2. • F¨uhre folgende Aktionen in einem Terminal aus:

• Erzeuge in deinem Homeverzeichnis ein neues Verzeichnis mit dem Namenverzeichnis, und wechsle hinein.

• Erzeuge in dem Verzeichnis verzeichnis eine Datei namens datei und lass Dir ein langes Listing anzeigen.

• Schreibe mit einem Konsoleneditor (z.B. vi oder nano) in die Datei datei Deinen Namen hinein.

• Benenne nun die Datei dateiinneue datei um (achte auf die richtige Syntax wegen des Leerzeichens!).

• Versuche das erzeugte Verzeichnisverzeichnismit Hilfe des Befehlsrmdirzu l¨oschen – warum geht es nicht? Mit welchem Befehl funktioniert es?

2.3. • Erzeuge vier Dateien mit den Namen datei1 bisdatei4 und f¨uhre folgende Aktionen aus:

• Setze die Berechtigungen auf datei1so, dass Du sie lesen und schreiben kannst, aber sonst niemand Rechte hat.

• Setze die Berechtigungen auf datei2 so, dass sie alle lesen, aber niemand schreiben kann. Wer kann trotzdem in die Datei schreiben?

• Setze die Berechtigungen auf datei3 so, dass Benutzer aus derselben Gruppe Lese- und Schreibrechte haben, alle anderen nur Leserechte.

• Setze die Berechtigungen auf datei4so, dass sie alle Benutzer ausf¨uhren k¨onnen, aber nur Du die Datei auch lesen und schreiben kannst.

2.4. • Wieviel Speicherplatz belegt das gr¨oßte Unterverzeichnis von /usr/include?

2.5. • Wie voll ist die Partition, auf der das Root-Verzeichnis gemountet ist? (D.h. wieviel Plattenplatz ist dort noch frei?)

(4)

Gruppe 3 Harte und symbolische Links

3.1. • Erstelle in Deinem Homeverzeichnis eine Datei namens file. Lege sowohl einen Hard- link hardlink als auch einen Symlink symlink auf diese Datei an. Woran erkennst Du, wieviele harte Links auf die Dateifile zeigen (es sollten inzwischen 2 sein)?

3.2. • Schreibe das heutige Datum (ohne Zuhilfename eines Editors) in die Datei file. Zeige den Inhalt vonfilean. Dann zeige sowohl den Inhalt vonhardlinkals auch vonsymlink an. Was passiert?

3.3. • Entferne nun die Datei file und zeige wiederum den Inhalt von hardlink als auch von symlinkan. Erkl¨are, warum das f¨ur hardlinkgeht und f¨ur symlinknicht.

Gruppe 4 Umgebungsvariablen; Umleiten der Ein-/Ausgabe von Befehlen

4.1. • Welche Verzeichnisse befinden sich in Deinem Suchpfad? D.h. was ist der Inhalt der PATH-Variablen? Wozu ben¨otigt man den Suchpfad? (Kleine Erinnerung: um sich den Inhalt der Variablen varanzusehen, verwendet man echo $var.)

4.2. • Der Inhalt der Variablen foowird in der Shell mit Hilfe von foo=barauf bar gesetzt.

Erzeuge in Deinem Homeverzeichnis ein Unterverzeichnis bin und f¨uge es dem Suchpfad hinzu. Finde in der Manual-Page des Befehls bashAntworten auf die folgenden Fragen:

• Was macht der Befehl export?

• Wie kannst Du die ¨Anderung am Suchpfad speichern, sodass sie auch bei einem Neu- start der Bash wirksam ist?

4.3. • Finde in der Manual-Page vonbashdie Beschreibung der verschiedenen M¨oglichkeiten, den Prompt (d.h.$PS1) zu setzen, und gestalte Deinen Prompt selber, sodass er auf jeden Fall die Uhrzeit und das Arbeitsverzeichnis anzeigt. Speichere die ¨Anderungen am Prompt, sodass bei einem Neustart der Bash Dein selbst gestalteter Prompt verwendet wird.

4.4. • Die Datei /etc/passwd besitzt f¨ur jeden lokalen Benutzer eine Zeile und jede dieser Zeilen besitzt sieben durch Doppelpunkte getrennte Felder mit Informationen ¨uber einen Benutzer (siehe auch man 5 passwd). Das erste Feld gibt dabei den Benutzernamen, das dritte die Benutzer-ID und das siebte Feld die Login-Shell an.

F¨uhre folgende Schritte durch, um eine Liste von Benutzernamen und Benutzer-IDs zu bekommen, die absteigend sortiert nach der Benutzer-ID ist und nur jene Benutzer enth¨alt, deren Login-Shell/bin/false ist:

• Benutze den Befehl grep um von der Datei /etc/passwd nur mehr die Benutzer anzuzeigen, deren Login-Shell /bin/false ist.

• Sortiere die Ausgabe des vorangegangenen Befehls mit Hilfe vonsortabsteigend nach der Benutzer-ID.

• Benutze den Befehl cut, um nur mehr den Benutzernamen und die Benutzer-ID an- zuzeigen und leite die Ausgabe in die Datei tempfileum.

Konsultiere die Manual-Pages der genannten Befehle, falls Du die ben¨otigten Optionen nicht kennst. Der Inhalt der Datei tempfile sollte circa so aussehen:

(5)

puppet:113 snmp:112 postfix:111 statd:109 haldaemon:108 polkituser:107 avahi:106 messagebus:105 avahi-autoipd:104 hplip:103

klog:102 syslog:101

Gruppe 5 Finden von Dateien

5.1. • Hole Dir das tar-Archiv find.tar.bz2 von der Praxis-Homepage und entpacke es (tar -xvjf archivname). Erweitere Deinen Suchpfad auf das im Archiv enthaltene bin- Verzeichnis und rufe das Skriptpraxis find auf. Dieses Skript erstellt einen Verzeichnis- baum unter ∼/findme/und darin Dateien.

5.2. • Finde die Dateien in dem Verzeichnis ∼/findme/ und seinen Unterverzeichnissen, de- ren Name von der Form file.* sind. (Empfehlung: Verwende find. F¨ur die folgenden Aufgaben eignet sich dann eine Variante des find-Befehls oder die Verwendung seiner Ausgabe.)

5.3. • Wieviele solche Dateien gibt es?

5.4. • Verschiebe nun all diese Dateien in das von Dir zu erstellende Verzeichnis∼/findme/target.

(Es gibt viele verschiedene M¨oglichkeiten: find mit der Option -exec, oder die Verwen- dung der Ausgabe von Beispiel 5.2. in einer Schleife, und einiges mehr. Experimentiere und finde eine Methode, die Dir liegt!)

5.5. • Kopiere jene Dateien im Verzeichnis ∼/findme/target, deren Dateiname einem der Eintr¨age in der Datei ∼/findme/liste folgt, in das von Dir zu erstellende Verzeichnis

∼/findme/target2. Auch dieser Vorgang sollte automatisiert werden, Du kannst z.B.

die Datei ∼/findme/liste einfach zeilenweise abarbeiten (dies ist nicht unbedingt die

¨okonomischste L¨osung).

Gruppe 6 Arbeiten mit Prozessen

6.1. • Lies die Manual-Page des Befehlstop und finde heraus:

• Was macht der Befehl? Welche Informationen werden angezeigt?

• Wie kann man die Prozesse nach Speicherverbrauch in Prozent/nach CPU-Auslastung in Prozent sortieren?

Lies die Manual-Page des Befehlsps und finde heraus:

• Wie kannst Du Dir alle Prozesse anzeigen lassen (also nicht nur Deine)?

(6)

• Wie kannst Du Dir alle Prozesse mit dem Namen getty anzeigen lassen?

• Wie kannst Du Dir mit ASCII-Art die Prozesshierarchie anzeigen lassen?

Teste alles aus!

6.2. • Schreibe ein Skript runforever, das nichts tut, aber f¨ur immer weiterl¨auft (die Befeh- le true bzw. sleep eignen sich hervorragend zum L¨osen einer solchen Aufgabe). Starte anschließend runforever im Vordergrund, halte die Ausf¨uhrung an, und lass es dann im Hintergrund weiterlaufen.

6.3. • Finde die PID (Prozess-ID) des vorher gestarteten runforever und lokalisiere sie in der Ausgabe von pstree. Starte nochmals, diesmal mit Hilfe von nohup, Dein Skript runforever, und finde auch die PID dieser Instanz.

Offne nun eine zweite Shell, finde die PID der Shell, in der Du 2-mal¨ runforevergestartet hast, und sende von der neuen Shell aus ein SIGHUP an die alte Shell. Was ist mit den zwei Instanzen vonrunforevergeschehen? Es sollte nur noch eine Instanz vonrunforever laufen. Terminiere sie.

6.4. • Erstelle eine Kopie trapped.sh des obigen Skripts und benutze den Befehl trap, um Signale abzufangen:

• Das Signal SIGINT soll ignoriert werden.

• Beim Empfang des Signals SIGHUP soll eine Meldung ausgegeben werden, dass das Signal empfangen worden ist.

Starte nun das Skript und beobachte was passiert, wenn man die Signale SIGINT und SIGHUP schickt.

Gruppe 7 Regul¨are Ausdr¨ucke

F¨ur diese Aufgaben ben¨otigst Du die Datei primes.txtvon der Praxis-Homepage. Diese Datei enth¨alt in einer tabellarischen Liste die ersten 106 Primzahlen.

7.1. • Erstelle eine neue Dateiprimeslist.txt, die alle Primzahlen vonprimes.txtenth¨alt, wobei aber jede Primzahl in einer eigenen Zeile stehen soll. Das k¨onnte z.B. mit sed gemacht werden, aber auch mit read.

7.2. • Wie kannst Du alle Primzahlen ausgeben, die genau drei Stellen besitzen? Wie viele davon gibt es?

7.3. •• Wie kannst Du alle Primzahlen ausgeben, die h¨ochstens f¨unf Stellen besitzen und in denen die Ziffer 3 mindestens dreimal vorkommt? Wie viele davon gibt es?

7.4. •• Wie kannst Du alle Primzahlen ausgeben, die h¨ochstens f¨unf Stellen besitzen und in denen die Ziffer 2 h¨ochstens dreimal vorkommt? Wie viele davon gibt es?

Gruppe 8 Shell-Programmierung

F¨ur die Aufgaben 8.1. und 8.4. ben¨otigst Du das tar-Archiv programmieren.tar.bz2von der Praxis-Homepage. Lade es herunter und entpacke es (tar -xvjf archivname). Dann erweitere Deinen Suchpfad auf das im Archiv enthaltene bin-Verzeichnis.

(7)

Es ist zwar unter Allgemeines bereits angegeben, aber hier nochmal zur Erinnerung: Man muss nicht nur das richtige Ergebnis bekommen, sondern auch die Skripten erkl¨aren k¨onnen!

8.1. • Rufe das Skriptpraxis prog1auf. Es erstellt ein Verzeichnis∼/prog1und darin einen Verzeichnisbaum. Wechsle in dieses Verzeichnis und finde in dem erstellten Verzeichnis- baum alle Dateien der Form *.txt, die den Text ba beinhalten. F¨uhre dieselbe Aufgabe f¨ur alle Dateien, die einen String von der Form “irgendein Buchstabe (genau einer) ge- folgt von einem a” enthalten. (Hinweis: F¨ur das Ausf¨uhren eines Kommandos f¨ur jedes Argument, das als Standardausgabe eines anderes Kommandos auftritt, eignet sich u.a.

der Befehl xargs).

8.2. • Implementiere das Suchverfahren aus 8.1. als ein Shellskriptfindintextfiles: Ausge- hend vom aktuellen Verzeichnis, soll dieses alle Dateien mit der Endung .txt nach dem als Argument ¨ubergebenen Ausdruck durchsuchen.

8.3. • Die n-te Fibonacci-Zahl an ist definiert durch a0 = 0, a1 = 1, an = an−1 +an−2 f¨ur n≥2. Schreibe ein Skript fibonacci, dass als Argument n ¨ubernimmt, und an ausgibt.

Beispielaufrufe und -ausgaben:

$ bash fibonacci 0 0

$ bash fibonacci 1 1

$ bash fibonacci 2 1

$ bash fibonacci 3 2

$ bash fibonacci 4 3

$ bash fibonacci 5 5

8.4. • Rufe das Skriptpraxis prog2auf. Es erstellt ein Verzeichnis∼/prog2und darin einige Dateien mit dem Namenws1213 *. Wechsle in dieses Verzeichnis und kopiere diese Dateien in das Unterverzeichnis target, wobei sie neue Namen erhalten sollen: statt ws1213 soll nunsosem13 stehen (z.B.ws1213 13 wird zu sosem13 13).

8.5. ••• Auf der Webseitehttps://www.data.gv.atfindet man Kataloge offener Datens¨atze und Dienste der ¨offentlichen Verwaltung ¨Osterreichs. Wir werden das Adressservice Wien benutzen:

Informationsseite

https://www.data.gv.at/katalog/dataset/c223b93a-2634-4f06-ac73-8709b9e16888 Adressservice Dokumentation

https://open.wien.gv.at/site/files/2015/04/adressservice-doku.pdf

Die Daten werden im JSON-Format zur¨uckgegeben. F¨ur die Verarbeitung eignet sich z.B.

das Programmjq. Falls es nicht installiert ist, kann eine statisch kompilierte Variante von https://github.com/stedolan/jq/releases/tag/jq-1.5 heruntergeladen werden. Im Manualhttps://stedolan.github.io/jq/manual/ findest Du Hilfe zur Ben¨utzung.

(8)

Lies Dir die Informationen zum Adressservice durch und schreibe dann ein Shell-Skript, welches einen Straßennamen (mit oder ohne Hausnummer) ¨ubergeben bekommt und dann zumindest den Straßennamen, den Bezirk sowie die Koordinaten im WGS84-Bezugssystem ausgibt (Achtung: Ist der benutzte Name nicht eindeutig, so kann es mehrere Ergebnisse geben!).

i. Speichere alle dem Skript ¨ubergebenen Argumente getrennt durch Leerzeichen in ei- ne neue Variable. Ersetze dann in dieser neuen Variable alle Leerzeichen durch die Zeichenfolge %20(Leerzeichen in einer URL sind nicht erlaubt).

ii. Baue mit Hilfe der neuen Variablen die URL und benutze wget oder curl, um das Adressservice abzufragen und die JSON-Antwort in eine Datei zu speichern.

iii. Benutze jq, um herauszufinden, wieviele Adresss¨atze zur¨uckgegeben worden sind.

iv. Zeige f¨ur jeden Adresssatz die geforderten Informationen an.

Referenzen

ÄHNLICHE DOKUMENTE

• werden für größere Projekte meist nur dann verwendet verwendet, wenn eine Software zum Zeichnen zur Verfügung steht, weil bei einer Änderung im.. Algorithmus meist das

b) Der Finanzierungseffekt resultiert daraus, dass dem Unternehmen liquide Mittel aus dem Umsatzprozess zugeflossen sind. Da zwischen der Bildung und der Auflösung

Shell-interne Befehle, diese entsprechen keinem Programm Alias, das ist ein Synonym für einen Befehl (nur in der Shell gültig) (Systemweite) Programme.. Shell-Skripte (systemweit

Signale können von einem Prozess abgefangen und verarbeitet/ignoriert werden. Wird das nicht gemacht, wird die Standardaktion für das Signal ausgeführt.. Ein Signal hat einen Namen

Der Rückgabewert ist in beiden Fällen der Rückgabewert des letzten ausgeführten Befehls der Liste2, oder 0, falls von Liste2 kein Befehl ausgeführt worden ist. Wir schreiben nun

→ Ausdruck kann einmal oder keinmal vorkommen (entspricht {0,1} ) + → Ausdruck kommt einmal oder mehrmals vor (entspricht {1,} ).. * → Ausdruck kommt keinmal, einmal oder

sehr nützlich, wenn man auf einem Server einen länger dauernden Befehl ausführen will, aber die Netzwerkverbindung zum Server nicht stabil ist oder man nicht das Ende abwarten

Erhaltet ihr oder eure Eltern nach 48h keine Rückmeldung, kontaktiert mich bitte erneut, da es leider vorkommen kann, dass ich Mails übersehe. Ich bitte das