GNU+Linux Für Fachinformatiker / Vorbereitung LPIC-1

Inhalt

Unterrichtsmaterialien

Installation Hyper-V

... und bei der Gelegenheit auch WSL.

Windows-Server

Aufgabe Dateipfade

Benutzt ls um folgende Ausgaben anzuzeigen:

  • -r--r--r-- 1 root root 12M 26. Nov 05:29 /boot/vmlinuz
  • -r--r--r-- 1 root root 12M 26. Nov 05:29 vmlinuz
  • -r--r--r-- 1 root root 12101568 26. Nov 05:29 ../boot/vmlinuz
  • -r--r--r-- 1 root root 12M 26. Nov 05:29 ../vmlinuz
  •                         ^                  ^
                             Größe Beachten     Pfad Beachten

Antwort im Teams-Privatchat als Commandline oder Screenshot.

Hinweis

es werden mehrere Aufrufe von ls benötigt.

Hinweis

Einige Ausgabezeilen sind kniffeliger, sendet gerne schon Teillösungen

Zusatz

Lasst alle Ausgabezeilen ohne Zwischenraum direkt untereinander erzeugen

Aufgabe Ordnerbaum

Nutzt mkdir und touch um unten stehende Verzeichnisse und Dateien zu Erzeugen. Mit tree lässt sich die Ausgabe überprüfen. Alle Bundesländer sind Ordner, die Namen der Bahnhöfe sind Dateien.

live@live:~$ tree -F DE
DE/
├── Brandenburg/
│   ├── Berlin/
│   │   ├── Berlin Hbf
│   │   ├── Berlin Jungfernheide
│   │   ├── Berlin-Spandau
│   │   ├── Berlin Südkreuz
│   │   └── Potsdamer Platz
│   ├── Blankenfelde (Teltow-Fläming)
│   ├── Doberlug-Kirchhain
│   ├── Elsterwerda
│   └── Golßen (Niederlausitz)
└── Sachsen/
    ├── Chemnitz Hbf
    ├── Erlau (Sachsen)
    ├── Limmritz (Sachsen)
    ├── Prösen
    ├── Prösen West
    └── Riesa

4 directories, 15 files

Sendet mir als Antwort einen Screenshot via Teams (per Privatnachricht).

Hinweis

Beachtet insbesondere Leerzeichen, Bindestriche und Klammern, sowie Groß- und Kleinschreibung.

Hinweis

  • Durch Nutzung von cd kann man Schreibarbeit sparen
  • Fehler lassen sich durch mv und rm/rmdir korrigieren

Zusatz

Man kann den Gesamten Datei- und Ordnerbaum mit zwei Programmaufrufen erstellen. Postet die Kommandos in Teams.

Zusatz

Lest den Artikel über "Brace-Expansion" in der Bash-Dokumentation um herauszufinden, wie sich die Befehle noch weiter abkürzen lassen.

Dateisysteme

Dateisysteme_1.svg

Aufgabe man-Pages

Mit dem Befehl (Programm) man kann man Handbuchseiten für die meisten Programme aufrufen.

Benutzt ls um die Dateien im Ordner /etc/ auszugeben.

  • Die Dateien sollen nach Änderungsdatum sortiert sein.
  • Die neuste Datei soll ganz unten in der Liste stehen.
  • Das Datum soll auch mit angezeigt werden.

Schlagt dazu in der man-page die nötigen Bedienoptionen nach.

Schickt mir den ls-Aufruf als Screenshot.

Zusatz:

Wir haben einige male die Prozessliste ausgegeben mit:

~$  ps   -eo  pid,user,command

Wie kann man der Ausgabe eine Spalte für den Speicherverbrauch hinzufügen?

Debian-Installation

Installationsmedium: Download von http://debian.org/

Installer Starten...

Manuelle Partitionierung

  1. ~128 MiB EFI System Partition
  2. ~16 GiB Ext4-Partition

    • Einhängepungkt: /
  3. Ext4-Partition

    • Einhängepunkt: /home
  4. ~8GiB Swap-Partition

Software

  • "Debian Desktop"
  • XFCE-Desktop
  • SSH-Server
  • Standard Systemwerkzeuge

XFCE-Desktop Konfigurieren

Empfehlungen: Whisker-Menü statt Standard-Anwendungsmenü, ansonsten nach Geschmack.

Andere Desktops installieren

Zunächst gibt es kein sudo...

~$ su -
~# adduser   juhser   sudo

Pakete Installieren:

~# apt  install  task-kde-desktop   task-gnome-desktop   task-german-kde-desktop
~# apt  install  marble   htop

Displaymanager: egal, kann geändert werden mittels dpkg-reconfigure gdm3

Partitionierung mit fdisk

Legt eine Partitionstabelle für die Arch-Installation an. Die Partitionen sollen wie folgt aufgeteilt sein:

Typ: GPT

  1. ~128 MiB EFI System Partition
  2. ~16 GiB /-Partition
  3. /home-Partition
  4. ~8GiB Swap-Partition

Schickt mir am Ende einen Screenshot des p-Kommandos von fdisk.

Screenshot fdisk

Hinweis

Die Dateisysteme werden nicht in dieser Übung angelegt.

Zusatz

  • probiert cfdisk aus
  • schaut in die man-Page von sfdisk

Netzwerkdiagnose

Von unten nach oben

  • ip link

    • "NO_CARRIER" ist verdächtig
  • ip address
  • ip route... was ist default-Gateway
  • ping GATEWAY-IP
  • ip neighbour (Löst MAC-Adresse auch ohne Ping-Antwort auf)
  • ping INTERNET-IP (1.1.1.1, 8.8.8.8, 8.8.4.4)
  • dig DOMAINNAME
  • dig @NAMESERVER DOMAINNAME (1.1.1.1, 8.8.8.8, 8.8.4.4)
  • ping REMOTEHOST
  • nmap -p PORT REMOTEHOST

    • oder ncat -v REMOTEHOST PORT

LVM - Logical Volume Manager

Dateisysteme_1.svg

Paketsysteme

apt-get

  • apt-get update
  • apt-get upgrade

    • Aktualisierung bestehender Pakete
  • apt-get dist-upgrade

    • ähnlich wie upgrade, kann aber zusätzliche Abhängigkeiten installieren, oder Konfliktpakete entfernen
  • apt-get install ...
  • apt-get --fix-broken install

    • kaputte Abhängigkeiten nachträglich auflösen
  • apt-get remove ...
  • apt-get purge ...
  • apt-get autoremove

    • liegengebliebene Abhängigkeiten entfernen
  • apt-get autoremove --purge, apt-get purge --autoremove
  • apt-get clean

    • Downloadcaches in /var/cache/apt/archives/ löschen

apt-cache

  • apt-cache search ...

    • sucht nach Stichworten in Beschreibungstexten
  • apt-cache show ...

    • Beschreibungstext zu Paketnamen zeigen

apt

Enthält Subkommandos von apt-get und apt-cache in einem Programm. Hinzu kommt eine bessere visuelle Darstellung (Statusbalken beim Download, etc.)

Virtualisierung

CPU-Architektur

CPU Architektur

Arten der Virtualisierung

CPU RAM Files User Net Hardw CPU-Inst Bemerkungen
Multitasking X X
Chroot X X X
(Usermode Linux) X X X X X Braucht keinen HW-Support, Nur auf Linux, Veraltet
Container/Namespaces X X (X) (X) (X) PID/ UIDs werden zum Host-System gemapped, Docker, LXC
Paravirtualisierung X X X X X (X) Hypervisor mit Effizienzfeatures, braucht Gastunterstützung, Xen
Hypervisor X X X X X X Braucht CPU-Support (MMU, Privilegientrennung), HyperV, KVM, VirtualBox, VMWare
Emulation X X X X X X X "Interpreter" f. Instruktionscode, sehr langsam, qemu, VirtualBox, Konsolenemulatoren

Keine Virtualisierung

  • WSL-1 Benutzt keine Virtualisierung (jenseits von regulärem Multitasking)

    • Stellt Linux-Betriebssystemcalls in Windows bereit
    • → Linux-Programme können unter Windows ausgeführt werden, solange sie keine Betriebssystemfeatures verwenden die Linuxspezifisch sind
  • WINE Stellt Windows-Betriebssystemcalls unter Linux bereit (WINE Is Not an Emulator)

    • → Windows-Programme können unter Linux ausgeführt werden, solange sie keine speziellen Windows-Features verwenden

Aufgabe Pipeline

überfliegt die man-pages zu den Mini-Pipeline-Programmen wc, grep, sort, uniq, cut, tr

Nutzt diese Programme auf der Textdatei mit dem Berliner Straßenverzeichnis um folgende Fragen zu beantworten:

  • Wie viele Zeilen hat die Datei?

  • Wie viele verschiedene Straßen- u Platznamen gibt es in Berlin?

    • Die Namen sollen nur einmal gezählt werden, auch wenn der Eintrag in mehreren Bezirken vorkommt
  • Wie viele verschiedene Stadtteile gibt es laut Liste?

Aufgabe vim

Das Programm vimtutor startet ein interaktives Tutorial zum Editor vim. Geht den vimtutor selbstständig durch.

Zusatz: Sucht online nach Beispielen für eine .vimrc-Datei (Aka. the best, bestest, ultimate, mega, professional .vimrc, usw. ;-)

Auch süß: https://www.vim-hero.com/

Aufgabe Berechtigungen

Legt folgende Dateien an und setzt die Berechtigungen mit chmod. Nutzt die oktalen Berechtigungsangaben.

-----w---- 1 live live 0 Apr 30 05:33 Ahh
----r-x--- 1 live live 0 Apr 30 05:33 Beh
---x---r-- 1 live live 0 Apr 30 05:33 Ceh
--w-----w- 1 live live 0 Apr 30 05:33 Deh
-rw-r-x-wx 1 live live 0 Apr 30 05:33 Eeh
----rws--- 1 live live 0 Apr 30 05:33 Eff
----rwS--- 1 live live 0 Apr 30 05:33 Geh
---S-----t 1 live live 0 Apr 30 05:33 Hah
---s-----T 1 live live 0 Apr 30 05:33 Ihh

Schickt mir die chmod-Aufrufe per Teams-Message (Text oder Screenshot).

Beachtet: Die Berechtigungen von "Eff" und "Geh" sind verschieden. Ebenso die Berechtigungen von "Hah" und "Ihh".

Zusatz

Legt folgende Spezialdateien an. Hier geht es nicht um Berechtigungen. Es gibt verschiedene Wege die Dateien anzulegen, dazu ist Recherche nötig.

lrwxrwxrwx 1 live live 1 Apr 30 06:11 Jot -> /
prw-rw-r-- 1 live live 0 Apr 30 06:11 Kah
srwxrwxr-x 1 live live 0 Apr 30 06:12 Lel

Hinweis: Diese Dateien müssen auf einem Unix-Dateisystem liegen. Bei der Nutzung von WSL sind Ordner unterhalb von /mnt/c/ also nicht geeignet.

Shellscripting

  • Beginnt mit Shebang / HashBang
    #!/bin/sh bzw.
    #!/bin/bash

  • Abfolge von Shellkommandos

  • Typische Script-Kommandos

    • read variable arivarble blarivare
    • if PROGRAMM; then ...

Webserver

web_01.sh

~$ ncat -klp 8000 -e ./web_01.sh

Aufgabe Scripting

In einem Ordner befinden sich Katzenbilder verschiedener Größe: Wikimedia_Katzenbilder.tar

Das kommando convert aus der ImageMagick-Suite kann Bildformate konvertieren und Bilder Skalieren.

(Debian-Paket "imagemagick")

~$ convert  Bild.jpg  -resize 120x80  Output.jpg

Benutzt eine for-Schleife um Thumbnails aller Katzenbilder in einem Unterordner namens "thumbs/" zu erstellen.

Hinweis: Beim Resize kann man das Seitenverhältnis eines Bildes beibehalten, indem man eine Dimension (X oder Y) als "-2" angibt.

Hinweis: for-examples.sh enthält die die Schleifen-Beispiele aus dem Unterricht.

Vorgehen

  • Versuche zuerst von Hand einen einzelnen convert-Aufruf korrekt zu schreiben.
  • stelle dem convert-Aufruf testweise ein echo voran um zu sehen, wie die Variablen eingesetzt werden.
  • Lasse die Schleifenvariable mittels echo ausgeben bevor das convert ausgeführt wird

    • Die Hilfsausgaben lassen sich auf der Shell besser erkennen, wenn sie ein Paar =====-Zeichen o.Ä. enthalten.
  • In einem Texteditor hilft das Syntax-Highlighting dabei, einige Fehler zu vermeiden
  • Anders als in python müssen Steuerstrukturen in Shellscript immer abgeschlossen werden (done und fi)

Zusatz

In verschiedenen thumb_* Unterordnern sollen zu jedem Bild Thumbnails mit den Auflösungen 480x*, 320x* und 240x* erstellt werden.

Hierzu sind mehrere Schleifen nötig. Versuche das Programm so zu schreiben, dass sich leicht eine Vielzahl weiterer Auflösungen hinzufügen lässt.

katzen_01.sh

Scripting 2

Die Katzenbilder sollen ins PNG-Format konvertiert werden. Dazu reicht es aus, dass in convert die Ausgabedatei auf ".png" endet.

convert bild.jpg ausgabe.png

Aber die Ausgabedatei zu "bild.jpg" soll nicht "bild.jpg.png" heißen, sondern "bild.png".

Lest in der Manpage zur dash den Absatz über "Parameter Expansion" um zu verstehen, wie man die .jpg-Dateiendung weg kürzen kann.

Vorgehen

  • schreibe erst eine funktionierende Schleife, bei der die Dateien "ausgabe.jpg.png" heißen. Damit werden alle Fehler ausgeschlossen, die mit dem eigentlichen Problem nichts zu tun haben.

Lösung

~$ for katze in *.jpg; do convert "$katze" "${katze%.jpg}.png"; done

Alternativ / Zusatz

Neben der Methode aus der Manpage gibt es auch die Möglichkeit den Dateinamen mittels sed umzuformen. Hierzu kann die "Command Substitution" dienen. z.B.

ausgabe="$(BEFEHL "$eingabe")"

Lösung / Beispiel

output="$( echo "$input" | sed 's/.jpg/.png/' | sed 's/cat/dog/ig')"

Scripting: tests

Schreibe ein Schellscript zum Zahlenraten.

  1. Das Shellscript generiert eine Zufallszahl ($RANDOM)

  2. Der Benutzer gibt eine Zahl ein (read ...)

  3. Das Shellscript gibt aus

    • "Meine Zahl war Größer"
    • "Meine Zahl war kleiner"
    • "Das ist genau meine Zahl"

    (oder eine kreative Variante davon)

Hinweise

  • $RANDOM funktioniert nur in der Bash (Die #!-Zeile muss entsprechend lauten)
  • das test-Programm hilft Fälle zu unterscheiden (siehe man-Page)
  • man kann das test-Programm in if-Abfragen nutzen
  • Lasst euch zum Testen die Zufahlszahl mit ausgeben, so dass ihr seht, ob die Fallunterscheidung funktioniert (wenn das Script sagt: "Meine Zahl war kleiner", obwohl das nicht stimmt, müsst ihr das beim Test sehen)
  • in web_01.sh gibt es ein Beispiel für die if-Abfrage

While-Schleife

Das Amerikanische Sauflied "99 Bottles of Beer" geht so

99 bottles of beer on the wall.
99 bottles of beer.
Take one down, pass it around,
98 bottles of beer on the wall.

...

Schreibe eine Zählschleife mit while, test und arithmetischen Ausdrücken $(( n * 7 )) oder so, um den Text vollständig auszugeben.

Zusatz

Beachte das Plural-s ( Bottles ) in der letzten Strophe.

bottles.sh

case ... in ... esac

Beispiel → wochentag.sh

Übung

Passe wochentag.sh so an, dass es den aktuellen Wochentag benutzt, statt der Usereingabe.

Hinweise

  • das Programm date lässt sich nutzen, um den aktuellen Wochentag zu ermitteln

Zusatz

Was passiert, wenn ich vor Ausführung des Scripts export LANG=C setze (bzw. die Standardsprache ändere)? Wie kann ich das Programm Sprachunabhängig machen (egal für welche Sprache)?