Berufsschule Dresden der AFBB gGmbH

Zusatzqualifikation LINUX

Einwöchiger Kurs für Fachinformatiker im 1. Ausbildungsjahr

Schulungsunterlagen

Dieses Dokument/Repository wurde mit mdBook erstellt.

Das Material ist unter der Creative Commons Lizenz CC BY 4.0 veröffentlicht und darf gerne für andere Zwecke angepasst und geteilt werden. ccby

Inhaltsverzeichnis

Einleitung

Gliederung

Installation & Hello World

Zeit für Erstkontakt zu Linux

-> Einrichtung gängiger FOSS GUIs

Shell & Netzwerk

Architektur & Sicherheit

Entwicklung & Ausblick

Quellen & Links

Linux-Grundlagen

Linux, Unix & FOSS

Mit freier Software Geld verdienen?

Wo wird Linux verwendet?

Architektur

Linux, Unix & FOSS

Unix

  • Betriebssystemfamilie seit 1969
  • Vereinheitlichter Standart: POSIX
flowchart TB
  Unix
  Unix --> Linux
  Unix --> BSD
  Unix --> MacOS["Mac OS"]
  Unix --> Solaris
  Unix --> Minix
  Unix --> andere["…"]

GNU/Linux

  • 1989 GPL
  • 1991 Linux
  • 1992 Linux unter GPL lizensiert
  • 1993 Debian GNU/Linux

FOSS









Mit freier Software Geld verdienen?

Dienstleistungen

  • Administration
  • Beratung, Schulungen
  • Software-Anpassungen

Für Hardwareprodukte

  • Embedded
  • Smart Devices
  • IoT

Als Grundlage für Dienste

  • Klassische Webanwendungen
  • Software / Platform / Infrastructure as a service (SaaS / PaaS / IaaS)

(Kommerzielle) Software, basierend auf freien Tools

Win-win-Strategie vs. Nullsummenspiel

Wo wird Linux verwendet?

Server / Cloud

Bild: Sächsische Zeitung

Mobil

Embedded / Smart devices / IoT

  • Router, NAS
  • Smart TVs, Festplattenrekorder, Satellitenreceiver und DVD-Player
  • Spielekonsolen (z.B. Steam Deck)
  • In-car Entertainment, Navi (z.B. Tesla)
  • Heimautomatisierung, Sensornetze, Einplatinencomputer (z.B. Raspberry Pi)

Containervirtualisierung

  • Docker, Kubernetes

Desktop

(ca 3% Marktanteil)

Architektur

flowchart TB
  subgraph Linux-Distribution
    subgraph Anwendungsoftware
      sonstiges["Browser, Office, …"]
      Desktopumgebung
      Paketmanager
    end
    subgraph System[Linux-Systemdienste]
      subgraph Linux-Kernel
        Treiber
      end
    end
  end
  subgraph Hardware
  end
  Anwendungsoftware -.- System
  Treiber --> Hardware

Installation von Linux-Systemen

Welches?

Distributionen

Desktopumgebungen

Paketmanager / Paketquellen

Wie?

Live-Stick erstellen

Partitionierung

Bedienungsanleitung

Treiber

Linux parallel zu Windows / macOS

Entscheidungen für einen Installer

Distribution

flowchart TD
    Paketmanager{Paketmanager?}
    Paketmanager -.-> rpm
    rpm -.-> RHEL([RHEL])
    rpm -.-> SUSE([SUSE])
    rpm -.-> CentOS([CentOS])
    rpm -.-> Fedora([Fedora])
    rpm -.-> Mandriva([Mandriva])
    Paketmanager ==> deb
    deb ==> Installation
    Installation ==> Anwendungsfall{Anwendungsfall?}
    Anwendungsfall == robust, sicher, frei ==> Server
    Server ==> Debian([Debian])
    Anwendungsfall == benutzerfreundlich ==> Endanwender
    Endanwender ==> LMDE([LMDE])
    Endanwender ==> Mint([Mint])
    Anwendungsfall == mit Supportvertrag ==> Kommerziell
    Kommerziell ==> Ubuntu([Ubuntu])
    Anwendungsfall ==> RaspberyPi
    RaspberyPi ==> Raspbian([Raspbian])
    deb ==> Live ==> AnwendungsfallLive{Anwendungsfall?}
    AnwendungsfallLive ==> alles[von allem etwas]
    alles ==> Knoppix([Knoppix])
    AnwendungsfallLive ==> Security[security tasks]
    Security ==> Kali([Kali])
    AnwendungsfallLive ==> Privacy[paranoid privacy]
    Privacy ==> Tails([Tails])
    Paketmanager --> nix
    nix --> NixOS([NixOS])
    Paketmanager -.-> selber[selber bauen]
    selber -.-> Arch([Arch])
    selber -.-> Gentoo([Gentoo])

Architektur

flowchart TD
    CPU{CPU-Architektur?}
    CPU -- 32-bit --> i386
    CPU == 64-bit ==> amd64
    CPU -.-> armel
    CPU -.-> armhf
    CPU -.-> PowerPC
    CPU -.-> mips
    CPU -.-> SPARC

Distributionen

Debian

Ubuntu, Mint, LMDE

Knoppix, Kali Linux, Tails

Raspbian / Raspberry Pi OS

NixOS

Red Hat, Arch, Gentoo

Desktopumgebungen

KDE

KDE

GNOME

GNOME

Mate

Mate

Cinnamon

Cinnamon

LXDE

LXDE

LXQt

LXQt

Xfce

Xfce

Live-Stick erstellen

Download eines iso-hybrid-Images

z.B. debian-live-12.5.0-amd64-mate.iso

auf USB-Stick kopieren

unter Linux / Unix

lsblk  ## Nachschauen unter welchem Gerätename der Stick verfügbar ist => /dev/sdX
cp *.iso /dev/sdX
sync

unter Windows

win32diskimager

Partitionierung

Trivial (Root + Swap)

pie 
    "Root" : 1024
    "Swap (> Ram)" : 32

Mit EFI Systempartition

pie 
    "Root" : 102400
    "Swap (>Ram)" : 3200
    "ESP": 512

Separate /home Partition

pie 
    "Root" : 128
    "Swap (>Ram)" : 32
    "Home" : 864

Fortgeschritten

  • Raid
  • Verschlüsselung

Partitionierung

Mit dem grafischen Installer

GParted

gparted

parted

Paketquellen

  1. System -> Systemverwaltung -> Synaptic-Paketverwaltung
  2. Einstellungen -> Paketquellen
  3. Bereich non-free neben main hinzufügen
  4. Neu laden

/etc/apt/sources.list

Debian GNU/Linux Installation Guide

RTFM!?

Praxis Dr. Tux :)

Hackcenter

Treiber

  • Sind im Kernel eincompiliert oder nachladbare Kernel-Module
  • Werden für verbreitete Hardware aus den Paketquellen der Distributionen bereitgestellt

Wird meine Hardware von Linux unterstützt?

  • Am einfachsten mal mit einem Live-System ausprobieren
  • Internetrecherche nach Typenbezeichnung + „Linux“ oder Distributionsname
  • meistens: Ja :)

Debugging

lshw

journalctl  ## oder dmesg

Typische Probleme

  • nicht-freie Firmware muss möglicherweise nachinstalliert werden
  • proprietäre Treiber (z.B. für Nvidia-Grafikkarten)

AHCI für Acer TravelMate P214

Problem:

keine Festplatte erkannt

Lösungsweg:

lshw -class storage

journalctl -k | grep -i raid

Lösung:

Festplattencontroler im Bios auf AHCI umstellen

Bios

  • MAIN
    • CTRL+S
    • SATA Mode = AHCI

Wifi firmware

Problem:

kein Wlan-Netzwerk-Interface

Lösungsweg:

lshw -class network

journalctl -k | grep -i wifi

GUI Lösung:

System -> Systemverwaltung -> Synaptic-Paketverwaltung

Shell Lösung:

sudo apt install firmware-iwlwifi
sudo rmmod iwlwifi && sudo modprobe iwlwifi

Mehrere Betriebssysteme auf einem Rechner

Live-Systeme

  • optional mit Persistenz

  • Alternative: Installation auf USB-Stick

WSL

Virtuelle Machinen

Multiboot

  • Bitte vorher Backups machen ;)

Administration auf der Kommandozeile

Warum?

Grundlagen

--help, man

pwd, ls, cd

nano, vim, emacs

su, sudo


Hilfe

man $BEFEHL

man man

$BEFEHL --help

Verzeichnisse listen / wechseln

pwd

ls
ls -l  ## listing
ls -lh  ## listing --human-readable
ls -a  ## --all

cd $VERZEICHNIS
cd -  ## zurück ins vorherige Verzeichnis
cd  ## In das $HOME Verzeichnis

Editoren

nano $DATEI

vim $DATEI
# :q!

vimtutor

Sudo

sudo $BEFEHL

Aufgaben

  1. Welche Verzeichnisse und Dateien liegen im $HOME Verzeichnis?
  2. Lege eine Datei mit dem Namen „Notizen.txt“ auf dem Desktop / Schreibtisch an.
  3. Welchem Nutzer gehört die Datei /etc/motd?
  4. Editiere als Administrator die Datei /etc/motd.

Zusatzaufgabe

  1. Was macht /etc/motd? (man motd)
    • Versuche es aus. (sudo login)
  2. Installiere die vollständige Version von Vim (sudo apt install vim)
    • Starte vimtutor und finde wieder heraus.

Paketverwaltung

apt, apt-file, dpkg

/etc/apt/sources.list


apt

apt update

apt upgrade

apt search $PAKET

apt show $PAKET

apt install $PAKET

apt remove $PAKET

apt-file

apt-file update

apt-file search $FILE

dpkg

dpkg -i $DATEI.deb  ## --install

Aufgaben

  1. Installiere die Pakete figlet, cmatrix und sl.
    • Probiere sie aus.

Zusatzaufgaben

  1. In welchem Paketen sind cowthink und cacademo?
    • Installiere sie.
  2. Installiere alle verfügbaren updates.

Benutzer und Berechtigungen verwalten

Einführung: Rechte unter Unix / Linux

ls -l
-rw-r--r-- benutzer gruppe … dateiname
drwxr-xr-x benutzer gruppe … ordnername
 directory benutzer gruppe andere
 -         rw-      r--    r--
 d         rwx      r-x    r-x

Nutzer

whoami, id

sudo, su

adduser

passwd

/etc/passwd, /etc/shadow


whoami
id

sudo whoami
su
whoami
exit

su $BENUTZER
whoami
adduser $BENUTZER

cat /etc/passwd
cat /etc/shadow
passwd

su
passwd
passwd $BENUTZER

Gruppen

addgroup, adduser

/etc/group


addgroup $GRUPPE

adduser $BENUTZER $GRUPPE

cat /etc/group

Aufgaben

  1. Erstelle einen Benutzer mit dem Name „beispiel“.
  2. Werde zum Benutzer „beispiel“.
    • Was passiert, wenn der Benutzer „beispiel“ versucht sudo zu verwenden?
  3. Füge den Benutzer „beispiel“ zur Gruppe „sudo“ hinzu.
    • Was passiert jetzt, wenn der Benutzer „beispiel“ versucht sudo zu verwenden?

Zusatzaufgaben

  1. Liste alle Benutzer, die zur Gruppe „sudo“ gehören.
  2. Wie könnte der Befehl lauten, mit dem man einem Benutzer eine Gruppenzugehörigkeit entfernt?
    • Findest du die zugehörige manpage?
    • Teste den Befehl und prüfe, dass er erfolgreich war.

Dateiberechtigungen

ls -l, chmod, chown


echo 'hallo welt' > /tmp/public
ls -l /tmp/public

sudo chown $BENUTZER /tmp/public
ls -l /tmp/public

sudo chmod g+w /tmp/public
ls -l /tmp/public

sudo chown $BENUTZER.$GRUPPE /tmp/public
ls -l /tmp/public

chmod o+w /tmp/public
ls -l /tmp/public

Aufgaben

  1. Wer darf wessen Ordner in /home lesen?
  2. Ändere die Rechte deines $HOME Ordners, so dass kein unprivilegierter Nutzer darin lesen kann.

Zusatzaufgaben

  1. Füge dich zu einer neuen Gruppe „motd“ hinzu, die /etc/motd verändern darf.
  2. Welche Möglichkeiten gibt es, um trotz der Lösung aus 2. auf das geschützte Home-Verzeichnis zuzugreifen?
    • Wie kann man sich davor schützen?

Unix-Philosophie

„Alles ist eine Datei“

/dev

ls /dev

cat /dev/input/mice*
cat /dev/input/event*

/proc und /sys

cat /proc/cpuinfo

cat /proc/meminfo

zcat /proc/config.gz
cat /sys/class/backlight/intel_backlight/brightness
cat /sys/class/backlight/intel_backlight/max_brightness
echo 1000 > /sys/class/backlight/intel_backlight/brightness

GPIO @RaspberryPi

echo 1 > /sys/class/gpio/gpio17/value

/etc

Verarbeiten von Dateien

|, >, >>

cat, head, tail, less, tee

grep

sort, uniq, wc

cut, tr, sed, awk


Pipes, stdin, stdout, stderr

$PROGRAMM1 | $PROGRAMM2

$PROGRAMM > $DATEI

$PROGRAMM >> $DATEI

Dateien ausgeben und verarbeiten

cat $DATEI
cat $DATEI1 $DATEI2

less $DATEI
# q

head $DATEI
tail $DATEI
head $DATEI -n 1  ## --lines
tail $DATEI -n 1  ## --lines
$PROGRAMM | head
$PROGRAMM | tail
grep $SUCHBEGRIFF $DATEI
grep $SUCHBEGRIFF -r $VERZEICHNIS
$PROGRAMM | grep $SUCHBEGRIFF
$PROGRAMM | grep -v $SUCHBEGRIFF  ## --invert-match
$PROGRAMM | grep -i $SUCHBEGRIFF  ## --ignore-case
$PROGRAMM | grep --color $SUCHBEGRIFF

$PROGRAMM | grep -A $NUM $SUCHBEGRIFF  ## --after-context
$PROGRAMM | grep -B $NUM $SUCHBEGRIFF  ## --before-context
$PROGRAMM | grep -C $NUM $SUCHBEGRIFF  ## --context

Aufgaben

  1. In welcher Datei (unterhalb von /etc) wird das WLAN-Passwort gespeichert?
  2. Filter aus /var/log/dpkg.log alle Zeilen, die beschreiben, wann welches Paket installiert wurde.
    • Schreibe das Ergebnis in eine Datei.
  3. Welche Pakete waren die 10 zuerst installierten?

Zusatzaufgaben

  1. Was waren die ersten auf der Kommandozeile eingegebenen Befehle? Verarbeite dafür die Ausgabe von history.
  2. In welche Datei speichert history? Findest du die entsprechende Zeile der manpage per grep?
  3. Wann erhielt das System zuletzt eine IP-Adresse per DHCP? Als Administrator kannst du die logs in /var/log/syslog oder mit dem Befehl journalctl finden.

Tools für Fortgeschrittene

$PROGRAMM | sort
$PROGRAMM | sort -n  ## --numeric-sort

$PROGRAMM | uniq
$PROGRAMM | sort | uniq
$PROGRAMM | sort | uniq -c  ## --count
$PROGRAMM | wc
$PROGRAMM | wc -l  ## --lines
cut -d$TRENNZEICHEN -f$INDEX $DATEI
cut -d: -f1 /etc/passwd
$PROGRAMM | tr $VON $NACH
echo Maus | tr M H
$PROGRAMM | sed "s/$SUCHMUSTER/$ERSETZUNG/g"
sed -i "s/$SUCHMUSTER/$ERSETZUNG/g" $DATEI  ## --in-place

Aufgaben

  1. Welche Nutzer (in /etc/passwd) haben bash als Standartshell?
  2. Berechne eine Liste, in der jede verwendete Standartshells genau genau einmal gelistet wird.
  3. Wieviele Nutzer nutzen jeweils welche Standartshell?

Zusatzaufgaben

  1. Welche der von history gelisteten Befehle wurden am häufigsten verwendet?
  2. journalctl listet als 5. durch Leerzeichen getrenntes Feld (vor dem Zeichen „[“) die „Unit“, von welcher der Logeintrag kommt. Berechne eine sortierte Liste, welche Unit wie viele Zeilen geloggt hat.

Prozessverwaltung

ps, pstree

bg, fg

kill, pkill, xkill

htop, atop


$PROGRAMM
# strg+C

$PROGRAMM
# strg+Z

bg

fg

xkill

$PROGRAMM &

ps
ps aux
kill $PID
kill -9 $PID

htop
# q oder F10
flowchart TB
  subgraph laufend
    Vordergrund
    Hintergrund
  end
  * -- "$PROGRAMM" --> Vordergrund
  * -- "$PROGRAMM &" --> Hintergrund
  Vordergrund -- bg --> Hintergrund
  Hintergrund -- fg --> Vordergrund
  Vordergrund -- "strg+Z" --> pausiert
  pausiert -- fg --> Vordergrund
  pausiert -- bg --> Hintergrund
  pausiert -- kill --> beendet
  Vordergrund -- "strg+C" --> beendet
echo $$
echo $PPID

pstree
pstree -p  ## --show-pids

pstree $USER
pstree $$ -s  ## --show-parents

Aufgaben

  • Wie viele Prozesse laufen aktuell?
    • Beobachte, wie es sich verändert, wenn Programme geöffnet und geschlossen werden.
  • Welche Parentprozesse hat eine geöffnete Shell?
  • Beende die grafische Oberfläche von der Kommandozeile

Zusatzaufgabe

  • Von welchen Nutzern werden derzeit Prozesse ausgeführt?
    • Wie viele Prozesse laufen für die jeweiligen Nutzer?

Netzwerk-Konfiguration

Siehe


nmtui

ip, ifconfig, route

ping, traceroute, tracepath, dig

netstat, ss

hostname

/etc/systemd/network (neu)

/etc/network/interfaces (alt)

/etc/resolv.conf

/etc/hosts

/etc/hostname


Meine Empfehlung für Anfänger: Network-Manager

nmtui

Befehl für Fortgeschrittene und insbesondere zum debuggen

ip

ip link
ip address
ip route

Traditionelle Konfigurationsdateien

Moderne Konfiguration per networkd

SSH

ssh

scp

tmux


ssh $USER@$HOST

cat ~/.ssh/config

man ssh_config
scp $DATEI $USER@$HOST:$PFAD
scp -r $ORDNER $USER@$HOST:$PFAD

scp $USER@$HOST:$DATEI $PFAD
scp -r $USER@$HOST:$ORDNER $PFAD

Aufgabe:

  1. Kopiere die Datei /home/demo/beispiel vom „Demo-Server“ auf dein lokales Gerät.
Zusatzaufgabe:
  1. Finde dem dem Program file heraus, was für eine Dateityp die beispiel-Datei hat.
  2. Öffne die beispiel-Datei von der Kommandozeile mit dem Befehl xdg-open.
  3. Öffne die Datei über den grafischen Dateimanager.

Verwalten des Dateisystems, Dateien und Ordner

pwd, ls, cd

find, tree

touch, rm

mkdir, rmdir

lsblk

mount, umount

gparted, parted


Bootloader und Bootprozess

flowchart LR
  subgraph ROM
    BIOS
  end
  subgraph Bootloader
  end
  BIOS == 1 ==> Bootloader
  subgraph Arbeitsspeicher
    Kernel
    Initrd
  end
  Bootloader == 3 ==> Kernel
  Bootloader -. "2 kopiert" .-> Initrd
  subgraph FS["/ Dateisystem"]
    init["/sbin/init"]
  end
  Kernel -. "4 mounted" .-> FS
  Kernel == 5 ==> init

/boot/grub/grub.cfg

menuentry "Titel" {
  initrd /boot/kernels/initrd-linux-5.4.70-initrd (2) 
  linux /boot/kernels/linux-5.4.70 (3) root=/dev/sdX (4) init=/sbin/init (5)
}

Init am Beispiel Systemd

systemctl, journalctl


systemctl  ## list-units

systemctl --failed

systemctl status $UNIT

systemctl enable $UNIT
systemctl disable $UNIT

systemctl start $UNIT
systemctl stop $UNIT
journalctl

journalctl -u $UNIT
journalctl -k

Aufgabe

  1. Installiere den openssh-server. Starte und aktiviere den Service und kontrolliere den Status.

Zusatzaufgabe

  1. Schaue dir die Logs der unit ssh an.

Live-Systeme, Datenrettung, Hacken

dd, ddrescue


init=/bin/bash

/etc/shadow

Hackerethik

Hacking

Was ist Hacken?

Arten von Vulnerabilities / Exploits

flowchart LR
  subgraph CodeExecution
    ArbitraryCodeExecution
    RemoteCodeExecution
  end
  subgraph RootAccess
    PrivilegeEscalation --> Backdoor --> Rootkit
  end
  CodeExecution --> PrivilegeEscalation

Hackertools

Das ist Hacken!

Verschlüsselung

flowchart TB
  Verschlüsselung --> Geräteverschlüsselung
  Verschlüsselung --> Transportverschlüsselung
  Transportverschlüsselung --> Punkt-zu-Punkt-Verschlüsselung
  Transportverschlüsselung --> Ende-zu-Ende-Verschlüsselung

Geräteverschlüsselung

Linux

Windows

Transportverschlüsselung

SSH

VPN (z.B. OpenVPN

Punkt-zu-Punkt-Verschlüsselung

flowchart LR
  subgraph Punkt-zu-Punkt
    Client1 <==> Server1
  end
  Server1 <==> Server2
  Server2 <==> Client2

SSL / TLS

Ende-zu-Ende-Verschlüsselung

flowchart
  subgraph Ende-zu-Ende
    Client1 <== Server1-Server2 ==> Client2
  end

PGP / GPG

S/MIME / X.509

Virtualisierung

Qemu / KVM

qemu-kvm -cdrom ~/Downloads/debian-live-12.5.0-amd64-mate.iso -boot d -m 4000

VirtualBox

WSL

Backups

GUI

z.B. Déjà Dup (de)

oder Pika

Shell

duplicity

restic (de)

Versionskontrolle am Beispiel git

git init

git status

git add $FILE

git commit

git log

git config
git clone

git push

git pull
git branch

git checkout
git switch

git merge
git rebase

git cherry-pick

https://ohmygit.org

Server?

  • Nicht nötig, aber trivial möglich :)

Grafische Oberflächen

Skript-Programmierung mit Bash

#!/usr/bin/bash

echo "hallo welt"

oder

#!/usr/bin/env bash

echo "hallo welt"
chmod +x $DATEI

Kommentare

# Kommentare sind oft hilfreich :)

Variablen

export VARIABLE="wert"

echo $VARIABLE

besondere Variablen

$1, $2, …

$@, $#

$?

Arithmetische Ausdrücke

echo $((6*7))

echo '1/3' | bc -l

Sub-Shell

echo "Jetzt ist es $(date +%H:%M)"

Kontrollstrukuren

Bedingungen

true && echo "wird ausgeführt, wenn der vorherige Befehl wahr zurück gibt"
## (return value 0)

false || echo "wird ausgeführt, wenn der vorherige Befehl falsch zurück gibt"
## (return value ungleich 0)
if [ $A = $B ]; then
  echo "A und B sind gleich."
else
  echo "A und B sind ungleich."
fi

test

man test

For-Schleifen

for I in $(seq 10); do
  echo $I
done

While-Schleifen

while read LINE; do
  echo $LINE
done

Softwareentwicklung

IDEs

Vim, Emacs, …

Kate

Atom

Visual Studio Code

Sprachen

Python

apt install ipython

Java

apt search openjdk

JavaScript / Node.js

apt install yarn

PHP

apt search php

LAMP

C# / .NET

mono-project

…an welchen anderen Sprachen besteht Interesse?

Projekte

Raspberry Pi

  • GPIO
    • Ampelschaltung

Virtualisierung / Container

  • VirtualBox
  • qemu / kvm

NAS

  • ssh-server
    • scp per Shell und GUI
    • ssh-keygen
  • ftp
  • (nextcloud)

Webserver

  • LAMP (Linux+Apache+Mysql/Mariadb+Php)
    • Alternative: Linux+Nginx+Sqlite/Postgres+*
  • eigene .html-Dateien schreiben und ausliefern

Nextcloud

Pixelfed

Verschlüsselung

LUKS / cryptsetup

  • aus dem Installer
  • für neues Gerät per Shell (cryptsetup luksFormat, cryptsetup luksOpen)

GPG

Pass (Passwortmanager)

Smartcards

One-Time-Pad

  • XOr-Verschlüsselung

Ausblick

LUG DD

C3D2 Hackerspace <<</>>

Datenspuren

Pentaradio

Chemnitzer Linuxtage

media.ccc.de

AI

npx aicmd forkbomb

Quellen & hilfreiche Links

wiki.ubuntuusers.de (de)

de.wikibooks.org/wiki/Linux-Praxisbuch (de)

manpages.debian.org (de)

Debian Installation Guide (en)

LPI Linux Essentials (de)

tutorials-raspberrypi.de (de)