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.
Inhaltsverzeichnis
Installation & Hello World
Zeit für Erstkontakt zu Linux
-> Einrichtung gängiger FOSS GUIs
Shell & Netzwerk
Architektur & Sicherheit
- Bootloader und Bootprozess
- Init am Beispiel Systemd
- Live-Systeme, Datenrettung, Hacken
- Verschlüsselung
- Virtualisierung
Entwicklung & Ausblick
- Backups
- Versionskontrolle am Beispiel git
- Skript-Programmierung mit Bash
- Softwareentwicklung
- Eigene Projekte
- Ausblick
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
Wo wird Linux verwendet?
Server / Cloud
-
Klassische Webserver (LAMP)
-
Public Cloud Services (Amazon, Google, Microsoft, Alibaba, DigitalOcean, Huawei, IBM, …)
Mobil
- Android (ca 72% Marktanteil)
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
GNOME
Mate
Cinnamon
LXDE
LXQt
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
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
parted
Paketquellen
System
->Systemverwaltung
->Synaptic-Paketverwaltung
Einstellungen
->Paketquellen
- Bereich
non-free
nebenmain
hinzufügen 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
- Bereich
non-free
hinzufügenSuche
-> firmware wifi ->firmware-iwlwifi
->Anwenden
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
- z.B. mit VirtualBox
Multiboot
- Bitte vorher Backups machen ;)
Administration auf der Kommandozeile
Warum?
Grundlagen
--help
, man
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
- Welche Verzeichnisse und Dateien liegen im $HOME Verzeichnis?
- Lege eine Datei mit dem Namen „Notizen.txt“ auf dem Desktop / Schreibtisch an.
-
Welchem Nutzer gehört die Datei
/etc/motd
? -
Editiere als Administrator die Datei
/etc/motd
.
Zusatzaufgabe
-
Was macht
/etc/motd
? (man motd
)-
Versuche es aus. (
sudo login
)
-
Versuche es aus. (
-
Installiere die vollständige Version von Vim (
sudo apt install vim
)-
Starte
vimtutor
und finde wieder heraus.
-
Starte
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
-
Installiere die Pakete
figlet
,cmatrix
undsl
.- Probiere sie aus.
Zusatzaufgaben
-
In welchem Paketen sind
cowthink
undcacademo
?- Installiere sie.
- 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
- Erstelle einen Benutzer mit dem Name „beispiel“.
-
Werde zum Benutzer „beispiel“.
-
Was passiert, wenn der Benutzer „beispiel“ versucht
sudo
zu verwenden?
-
Was passiert, wenn der Benutzer „beispiel“ versucht
-
Füge den Benutzer „beispiel“ zur Gruppe „sudo“ hinzu.
-
Was passiert jetzt, wenn der Benutzer „beispiel“ versucht
sudo
zu verwenden?
-
Was passiert jetzt, wenn der Benutzer „beispiel“ versucht
Zusatzaufgaben
- Liste alle Benutzer, die zur Gruppe „sudo“ gehören.
-
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
- Wer darf wessen Ordner in /home lesen?
- Ändere die Rechte deines $HOME Ordners, so dass kein unprivilegierter Nutzer darin lesen kann.
Zusatzaufgaben
- Füge dich zu einer neuen Gruppe „motd“ hinzu, die /etc/motd verändern darf.
-
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
sort
, uniq
, wc
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
- In welcher Datei (unterhalb von
/etc
) wird das WLAN-Passwort gespeichert? -
Filter aus
/var/log/dpkg.log
alle Zeilen, die beschreiben, wann welches Paket installiert wurde.- Schreibe das Ergebnis in eine Datei.
- Welche Pakete waren die 10 zuerst installierten?
Zusatzaufgaben
-
Was waren die ersten auf der Kommandozeile eingegebenen Befehle? Verarbeite dafür die Ausgabe von
history
. -
In welche Datei speichert
history
? Findest du die entsprechende Zeile der manpage pergrep
? -
Wann erhielt das System zuletzt eine IP-Adresse per DHCP? Als Administrator kannst du die logs in
/var/log/syslog
oder mit dem Befehljournalctl
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
-
Welche Nutzer (in
/etc/passwd
) habenbash
als Standartshell? - Berechne eine Liste, in der jede verwendete Standartshells genau genau einmal gelistet wird.
- Wieviele Nutzer nutzen jeweils welche Standartshell?
Zusatzaufgaben
-
Welche der von
history
gelisteten Befehle wurden am häufigsten verwendet? -
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
-
man systemd.network (de)
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:
- Kopiere die Datei /home/demo/beispiel vom „Demo-Server“ auf dein lokales Gerät.
Zusatzaufgabe:
-
Finde dem dem Program
file
heraus, was für eine Dateityp die beispiel-Datei hat. -
Öffne die beispiel-Datei von der Kommandozeile mit dem Befehl
xdg-open
. - Ö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
-
Installiere den
openssh-server
. Starte und aktiviere den Service und kontrolliere den Status.
Zusatzaufgabe
- 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
C# / .NET
…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
- https://wiki.debianforum.de/OwnCloud
- https://computingforgeeks.com/how-to-install-and-configure-nextcloud-on-debian/
Pixelfed
Verschlüsselung
LUKS / cryptsetup
- aus dem Installer
-
für neues Gerät per Shell (
cryptsetup luksFormat
,cryptsetup luksOpen
)
GPG
- per Shell und GUI (Mailclient, z.B. Thunderbird)
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)