Benutzer-Werkzeuge

Webseiten-Werkzeuge


kiss:shell-safari

Auf dieser Seite finden sich mehrere kleine Beispielprobleme, anhand derer man erste Shell-Erfahrungen sammeln kann.

Musterlösungen finden sich verlinkt.

Vorab - Öffnen der Shell

Zunächst gilt es, in der eigenen Desktop-Umgebung, eine Shell zu starten.

Unter KDE:

Alt+F2, konsole

Unter Unity/Gnome:

Alt+F2, gnome-terminal

Aufgaben

Elementar: Dateisystem

Probiere zunächst die Befehle

ls
pwd

und dann

mkdir Safari
cd Safari

Was passiert hier bei den einzelnen Schritten?

Lösung

Download der Safari-Ordner

Zu Übungszwecken wurden für diese Shell-Safari Testordner erstellt.

Lade nun den ersten mit

wget https://pubwiki.fsmpi.rwth-aachen.de/images/4/4f/Kiss-ss14-safari.zip

herunter und entpacke ihn mit

unzip Kiss-ss14-safari.zip

Du hast nun die historischen ersten Ausgaben des Geiers, der unter einer Creative-Commons-Lizenz veröffentlicht wird, im aktuellen Ordner.

Elementar: Hilfe bekommen

Probiere nun

man
man ls
ls --help

Gebt nun eine sortierte Liste der Geier

  • nach Dateiname
  • in umgekehrter Reihenfolge nach Dateiname
  • nach Dateigröße
  • mit Zugriffsrechten und Dateigröße in Human-Readable-Darstellung

aus.

Lösung

Elementar: Redirect, less, more, cat, grep und die Pipe ('|')

Erstelle nun eine Textdatei <Textdatei>, die eine Liste aller Geier, sortiert nach Dateiname, mit den Informationen

  • Zugriffsrechte
  • Dateibesitzer
  • Dateigröße (Human-Readable)
  • Dateiname

Probiere nun

more <Textdatei>
less <Textdatei>

Finde als nächstes die Dateigröße von Geier 153 heraus!

Als nächstes:

cat <Textdatei>
cat <Textdatei> | less
cat <Textdatei> | grep "153"
grep  "153" <Textdatei>

Was passiert hier?

Lösung

Elementar: Editoren

Man kann in einer Shell auch tatsächlich Dateien editieren.

Probiere einfach mal

nano <Textdatei>

Es gibt auch weitere Shell-Editoren, z. B. emacs und vim. Welchen man benutzen möchte ist Geschmackssache.

Skripting: Ein erstes kleines Shell-Skript

Man kann in einer Shell auch Skripten, d. h. „Makros“ von Shell-Befehlen definieren.

Erstelle als erste kleine Übung eine Datei (mit einem beliebigen Texteditor) des folgenden Inhalts:

#!/bin/bash

# Dieses Shell-Skript erstellt einen neuen Unterordner,
# wechselt in diesen, lädt ein neues Archiv vom Fachschaftsserver
# und entpackt dieses

mkdir queken
cd queken
wget https://www.fsmpi.rwth-aachen.de/pubwiki/images/8/86/Safari_queken.zip
unzip Safari_queken.zip

Führe das Skript nun aus!

Lösung

Skripting: Variablen

Lege zunächst eine neue Datei „lines.sh“ mit folgendem Inhalt an:

#!/bin/bash

ZEILEN=$(cat $1 | wc -l)

echo "Die Datei $1 hat ${ZEILEN} Zeilen."

Wende das Skript an!

  • Schreibe nun ein Shell-Skript, mit dem man alle Dateien des aktuellen Verzeichnisses aufgelistet bekommt, deren Besitzer bestimmte Dateirechte hat, welche dem Skript als Parameter übergeben werden! Die Ausgabe soll nur Dateinamen auflisten; keine weiteren Informationen! Sollte keine Datei im aktuellen Verzeichnis das geforderte Rechteschema haben, soll das Skript eine entsprechende Meldung ausgeben.
  • Erweitere das Skript aus der vorigen Aufgabe nun so, dass man mit einem optionalen zweiten Parameter auch statt nach Userrechten auch nach Gruppenrechten „g“ oder den Dateirechten aller anderen „o“ suchen kann!
  • Nun soll dem Skript ein dritter Parameter „not“ übergeben werden können, mit dem das Skript gerade die Dateien ausspuckt, die die abgefragten Dateirechte nicht haben.

Lösung

Skripting: Bilder

Falls du es nicht eh' schon auf dem Rechner hast, installiere jetzt 'pdftk' und 'imagemagick' mit

sudo apt-get install pdftk imagemagick
  • Im aktuellen Ordner liegt eine Sequenz von PNG-Bildern, die zusammen ein Daumenkino bilden. Konvertiere diese in ein animiertes GIF!
  • Wandele die Bilder nun in das Vektorgrafik-Dateiformat EPS um!
  • Mache aus den EPS-Dateien nun verlustfreie PDFs!
  • Merge nun alle PDFs in eine Datei (in richtiger Reihenfolge!) zusammen!

Lösung

Shell-Konfiguration und Customization -- Aliase, Shell-Voids und die .<SHELL>rc

Unter Umständen weiß man, dass man einen Befehl oft mit bestimmten Parametern aufrufen wird. Nehmen wir das Beispiel 'ls'. Wenn wir wissen, dass wir regelmäßig vollständigere Informationen (Parameter '-l') als reine Dateinamen wollen werden, die Dateigröße immer human-readable ('-h') sein soll und wir das Ganze immer in Farbe ('–color') sehen wollen, bräuchten wir immer wieder den Befehll

ls -lh --color

Da wäre es doch eigentlich schön, dafür einen „Shortcut“ zu haben.

Es gibt solche Shortcuts. Sie heißen Aliase.

Probiere zunächst in deiner Shell den Aufruf von

alias lsall="ls -lh --color"

und dann

lsall

Weiterhin haben wir schon gesehen, dass man in Shell-Skripten mit Variablen arbeiten kann. Angenommen, wir wollen immer wieder den aktuellen Pfad wiederfinden können. Dann bietet es sich an zu definieren:

QUEKEN="$(pwd)"

Nun kann man von überall auf dem Dateisystem direkt zu diesem Pfad wechseln.

  • Nur zur (Selbst-)Kontrolle: wie?
  • Wie wechselt man von einem beliebigen Ort im Dateisystem in den Ordner über dem aktuellen?

Probiere nun, in der Shell deine öffentliche IP-Adresse herauszufinden!

Eine mögliche Lösung:

wget <__yamdwe_nowiki>0</__yamdwe_nowiki> -O - 2>/dev/null | grep "Current IP Address" | cut -d ":" -f 2- | sed 's#</body></html>##g' | sed 's/ //'

Wie kann man hierfür einen Shortcut anlegen?

TIPP:

Das Stichwort heißt Shell-Void.

Wir haben nun Variablen, Aliase und Shell-Voids kennengelernt und benutzt. Allerdings bleiben diese nicht dauerhaft gesetzt, wenn wir sie lediglich in die Shell eintippen. Wird die aktuelle Shell beendet, sind auch diese nützlichen kleinen Abkürzungen weg. Außerdem stehen sie auch in keiner anderen Instanz der Shell zur Verfügung.

Wie können Aliase, Variablen und Voids dauerhaft eingerichtet werden?

Lösung

Programmieren: Parameterübergabe

Gehe nun mit

cd ..

wieder in den Safari-Ordner und besorge dir das nächste ZIP-Archiv!

cd cplusplus
wget https://www.fsmpi.rwth-aachen.de/pubwiki/images/1/14/Safari_cplusplus.zip
unzip Safari_cplusplus.zip

Hier liegen drei kleine C++-Programme.

  • Kompilliere zunächst die 'intro.cpp', um ein ausführbares Programm zu erhalten! (Lese es ruhig vorher!)
  • Führe das Programm nun aus!
  • Speichere die komplette Ausgabe des Programmes in einer Datei 'intro_out.txt'!

Als nächstes schaue dir das Programm 'sequenziell.cpp' an und berechne mit seiner Hilfe die geometrische Reihe $\sum\limits_{k=0}^{10^8} 0,5^k!$

Lösung

Programmieren: Compilerflags

Nun werfe einen Blick in das Programm 'parallel.cpp'!

  • Bringe es - vorzugsweise ohne Internetbenutzung und nur mit der Shell - ans Laufen!
  • Berechne nun mit diesem Programm die geometrische Reihe aus dem vorigen Aufgabenteil!
  • Wie der name schon vermuten lässt, arbeitet dieses Programm mit Parallelisierung und sollte daher auf Rechnern mit mehr als einem Kern deutlich schneller sein. Überprüfe, wie die Laufzeiten genau sind!

Lösung

kiss/shell-safari.txt · Zuletzt geändert: 2018/10/16 20:14 von robin