Linux für Fachinformatiker / LPIC-1 Vorbereitung / FI17-SI1

Unterrichtsmaterialien

Folien

Shell dumps

Arbeitsumgebung

  • Hyper-V mit Live DVD

    • Externer Switch
    • openssh-server u. authorized_keys
  • Hyper-V mit Manueller Installation

    • Externer Switch
    • → /etc/network/interfaces: auto eth0 u. iface eth0 inet dhcp
    • openssh-server u. authorized_keys
  • WSL mit Debian (\> wsl --install debian)

    • WSL Settings Netzwerk auf Mirrored NAT reicht eigentlich
    • Private Key für Login auf Live u. Manual

Shellscript Webserver

(auf wsl) webserver.sh

Ausführungsrechte nicht vergessen!

~$  ncat  -klp 1024 -c webserver.sh

Hyper-V Einrichten

  • "Windows-Features aktivieren oder deaktivieren"

    • Hyper-V
    • Windows-Subsystem für Linux

Windows-Server

Neuer virtueller Computer

  • Name: egal
  • Generation 2 (wegen UEFI-Boot)
  • Arbeitsspeicher: 2048 MB, oder mehr

    • Dynamischen Speicher deaktivieren
  • Festplatte: egal, sollte aber vorhaden sein
  • Installationsmedium: live-dvd.iso
  • Netzwerk: default Switch oder externer Switch
  • Rechtsklick auf die Maschine → Einstellungen

    • → Sicherheit → "Sicheren Start" ausschalten
    • → Firmware → DVD-Laufwerk nach oben etzen

Aufgabe Dateipfade

Benutzt ls um folgende Ausgaben anzuzeigen:

-r--r--r-- 1 root root 12M 28. Sep 06:08 /boot/vmlinuz

-r--r--r-- 1 root root 12142528 28. Sep 06:08 vmlinuz

-r--r--r-- 1 root root 12M 28. Sep 06:08 ../boot/vmlinuz

-r--r--r-- 1 root root 12M 28. Sep 06:08 ../vmlinuz

^ Größenangabe ^ Pfad

Antwort als Screenshot im Privatchat via Teams.

Hinweis

Es braucht mehrere Aufrufe von ls um alle Zeilen zu erzeugen.

Zusatz

Erledigt die Aufrufe für alle Anzeigen in einer einzigen Zeile, so dass die Ausgaben direkt untereinander stehen.

Thema Dateisysteme

Siehe auch: Folien von Tag 2 + 3

Folien von Tag 2 + 3

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.

Aufgabe Reguläre Ausdrücke

Geht die Tutorials auf https://regexone.com/ bis zur "Lesson 15" durch. Schreibt mich in Teams an, wenn ihr dort angekommen seid.

Beachtet bei den Aufgaben "Match" und "Skip". Sinn von einem RegEx ist, dass er auf bestimmte Texte zutrifft, auf andere aber gerade nicht.

Hinweis

Die Tutorials lassen sich im Linux-Terminal nachbilden via:

~$ grep  -P  "…"

Hinweis

Bei einigen Lessons kann man mogeln. Achtet bitte darauf, welcher Lösungsweg im Text beschrieben wird. Versucht die Aufgabe so zu lösen wie jeweils beabsichtigt.

Zusatz

Auf der Seite gibt es auch noch "Practice Problems". (Aber pingt mich an, wenn ihr bei Lesson 15 seid).

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:

  1. Wie viele Zeilen hat die Datei?

  2. Wie viele verschiedene Straßen- und Platznamen gibt es in Berlin?

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

  4. Wie viele Straßen (/Plätze/Wege/usw.) gibt es in Adlershof?

  5. Welche Straßen erstrecken sich durch mehr als fünf Stadtteile

Hinweis

Straßennamen können Leerzeichen enthalten, Bezirke sind aber glücklicherweise durch Tabs vom Straßennamen abgesetzt.

LVM - Logical Volume Manager

LVM

Paketsysteme

Offline Tools dpkg rpm
Info Paketdatei dpkg -I datei.deb rpm -qip datei.rpm
Info Paket (nur deb-datei oder apt) rpm -qi NAME
Dateien in Paketdatei dpkg -c datei.deb rpm -qlp datei.rpm
Dateien in Paket dpkg -L NAME rpm -ql NAME
Liste install. Pakete dpkg --get-selections rpm -qa
Installation Paketdatei dpkg -i datei.deb rpm -i datei.rpm
Update aus Paketdatei (wie Installation) rpm -U datei.rpm
Paket neu einrichten dpkg-reconfigure NAME ???
Deinstallation Paket dpkg -r NAME rpm -e NAME
dpkg -P NAME (purge)
Paketzugehörigk. Datei dpkg-query -S /datei rpm -qf /datei
Online Tools apt yum / dnf zypper
Stichwortsuche apt-cache search REGEX yum search REGEX zypper se WORT
dnf search REGEX
Paketinfo apt-cache show NAME yum info NAME zypper info NAME
dnf info NAME
Dateien in Paket apt-file list NAME dnf repoquery -l NAME
Liste install. Pakete (siehe dpkg) dnf list --installed zypper se -i
Abfrage Repository apt-get update (nur automatisch???) zypper refresh
Online-Install apt-get install NAME yum install NAME zypper in NAME
yum update NAME
dnf install NAME
dnf upgrade NAME
Abhängigk. erfüllen apt-get install -f ???
Deinstallation apt-get remove NAME dnf remove NAME zypper rm
apt-get purge NAME
Softwareupgrade apt-get upgrade yum update
dnf upgrade
Paketzugehörigk. Datei apt-file search /datei yum whatprovides /datei zypper se --provides /datei
dnf provides /datei
Konfiguration /etc/apt/sources.list yum repolist all zypper repos
dnf repolist
yum-config-manager --add-repo http://...
dnf config-manager --add-repo http://
yum-config-manager --disable REPO zypper modifyrepo -d REPO
dnf config-manager disable REPO
yum-config-manager --enable REPO zypper modifyrepo -e REPO
dnf config-manager enable REPO

Virtualisierung

CPU-Architektur
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, Konsolenemulatoren

Aufgabe vi

Geht das Programm vimtutor bis zum Ende durch. Gebt anschließend in Teams Bescheid.

(vimtutor wird ggf. mit dem Paket "vim" installiert)

Hinweis (Für WSL-Nutzer)

Einige Tastenkombinationen funktionieren schlecht im Windows-Terminal.

Zusatz

  1. lade das Berliner Straßenverzeichnis zweimal herunter
  2. ändere ein paar Straßennamen in einer der Kopien
  3. öffne beide Dateien gleichzeitig mit vimdiff datei1 datei2
  4. mit Strg + W → Bewegung kann man zwischen den Panelen wechseln

Zusatz

Sucht online nach dem "besten", "ultimativen", "idealen" .vimrc-File. ;-)

Aufgabe Berechtigungen

Legt die vier Dateien A, B C, und D an, mit Berechtigungen wie folgt. Nutzt beim setzen der Berechtigungen via chmod die numerischen angaben. Schickt via Teams den Screenshot, in dem die Ziffernangaben erkennbar sind.

---------- A
-r---w---x B
--w-r-x-w- C
-rwx---rwx D 

Aufgabe SSH

  1. Benutzt SSH um euch auf dem Dozentenrechner einzuloggen:

    ~$ ssh user@10.0.7.67
    Passwort: user

    Host-Fingerprint: SHA256:rDNRk5wBCNLyU3vHrfMmz3yDXyyxdGxQ1uTTiHbSnV0

    Legt eine Datei mit eurem Namen auf dem Dozentenrechner an.

  2. Installiert einen SSH-Server auf eurer Linux-VM und loggt euch vom (Windoze-)Hostsystem darauf ein.

    Paket: openssh-server

    IP herausfinden via: ~$ ip address list

    Passwort vom Live-User setzen: ~$ passwd (leere Passworte sind nicht gültig)

    Unter Windows:

    \> ssh live@HOST
  3. Generiert ein SSH-Schlüsselpaar und installiert es auf dem Dozentenrechner

    ~$  ssh-keygen
        ...
        ...
        ...
    ~$ ssh-copy-id user@10.0.7.67
    ~$ ssh user@10.0.7.67

    → sollte keine Passwortabfrage mehr geben

SSH / SFTP-Übersicht

SFTP

(gibt es auch in Windows) Das SFTP-Programm benutzt eine interaktive Subshell \> sftp user@host > cd remote_ordner > pwd > lcd lokaler_ordner > lpwd > ls > lls > get remote_file > put local_file

SCP

(gibt es auch in Windows) \> scp user@host:datei ./ \> scp datei user@host: (Remote-Pfade müssen einen Doppelpunkt enthalten)

Allein via ssh

(braucht eine Unix-Shell) ~$ ssh user@host cat datei > lokale_datei ~$ cat lokale_datei |ssh user@host cat ">"datei (Anführungszeichen beachten)

Tar-Streams durch remote STDIN/STDOUT

~$  ssh user@host tar -c ordner | tar -x
~$  tar -c ordner |ssh user@host tar -x

RSync

Bedienung ähnlich wie scp. Effizient bei mehrfacher Übertragung der gleichen Dateien. Braucht rsync auf der Remote-Seite. \> rsync user@host:datei ./ \> rsync datei user@host:

SSH-Dateien

~/.ssh/known_hosts
Bekannt Rechner, deren Fingerprint mein Client kennengelernt hat
~/.ssh/id_*, ~/.ssh/id_*.pub
identity-File, aka. Private- u. Public-Key für eine Person. Wird vom eigenen Client zur Authentifizierung an Remote-Rechnern verwendet.
~/.ssh/authorized_keys
Identities (d.h. Public-Keys) von Personen, die sich via SSH einloggen dürfen.

Domain Name System

Beispiel Domainname

www.plutz.net → eigentlich www.plutz.net. (mit abschließendem Punkt)

DNS-Namen werden von hinten nach vorne gelesen.

Root-Zone Top-Level-Domain (TLD) 2nd-Level-Domain Subdomain
. net plutz www

Beispiel rekursive Abfrage

  • Der DNS-Rekursor muss Kenntnis über die Root-Nameserver haben

  • dig @193.0.14.129 NS net. (Anfrage an europäischen RIPE-Nameserver)

    • → Zuständig für net.-Zone: z.B. 192.12.94.30 (Verisign)
  • dig @192.12.94.30 NS plutz.net. (Anfrage an Verisign)

    • → Zuständig für plutz.net.: z.B. 46.38.225.225 (Netcup)
  • dig @46.38.225.225 NS www.plutz.net. (Anfrage an Netcup)

    • → kein untergeordneter Nameserver
  • dig @46.38.225.225 A www.plutz.net (Anfrage weiterhin an Netcup)

    • → 46.38.234.157 (der eigentliche Webserver!)

→ Rekursive Abfragen werden idR. nicht direkt von Client-PCs aus gemacht. Ein lokaler Nameserver führt rekursive Abfragen durch und cached die Ergebnisse. Zusätzliche kann er lokale Hostnamen auflösen und ggf. öffentliche Einträge übersteuern (Jugendschutz-, Zensur-, u. Werbefilter).

Aufgabe for-Schleife

Nutzt convert (aus dem Paket imagemagick) um alle Katzenbilder von .jpg nach .avif zu konvertieren. Schreibt mir die Kommandozeile, die dafür genutzt wurde via Teams.

Hinweis

Es ist OK, wenn die Ausgabedateien auf .jpg.avif enden.

Zusatz

Lasst alle .avif-Dateien in einem Ordner "bilder_avif" anlegen, der neben dem "Wikimedia_Katzenbilder"-Ordner liegt.

Zusatz

Recherchiert, wie man die doppelte Dateiendung loswerden kann, so dass die Namen einfach auf .avif (ohne .jpg) enden.

Aufgabe if / test

Schreibe ein Shellscript, das

  1. Einen Pfad von Stdin liest
  2. Handelt es sich bei dem Pfad um ein Verzeichnis

    • so wird mit ls der Verzeichnisinhalt gelistet
  3. Handelt es sich um eine Datei

    • wird mit less die Datei angezeigt
  4. andernfalls (ungültiger Pfad, Spezialdatei, etc.)

    • wird eine Fehlermeldung ausgegeben

Hinweis

Das test-Programm unterstützt verschiedene Tests. Siehe man-Page.

Hinweis

if-Abfragen kann man verschachteln

  if …; then
  else
    if …; then
    fi
  fi

oder elif benutzen (lesbarer)

if …; then
elif …; then
elif …; then
else
fi

Zusatz

Der Pfad soll nicht von stdin gelesen werden, sondern als Parameter an das Script übergeben werden. Aufrufparameter stehen in den Spezialvariablen ${0}, ${1}, ${2}, usw.