Linux Seminare¶
(Wer sofort mit den Linux Seminarunterlagen und Infos loslegen will: Einführung)
Im Grunde schule ich alle möglichen Aspekte rund um Linux angefangen beim Einstieg in Linux, über Techniken als Linux-Serverumgebungen bis hin zu speziellen Themen wie Linux Sicherheit, Linux Shell, Virtualisierungen mit Linux oder auch Container mit Linux.
Die Linux-Seminare, die ich begleite und leite nutzen unterschiedliche Linux-Distributionen und Technik-Umgebungen. Aber im Grunde geht es immer um Linux oder besser gesagt GNU/Linux mit den Ursprüngen beim Linux-Kernel.

Linux Kernel.org¶
Stellvertretend soll hier auch auf die Seminare rund um die LPI Zertifikate hingewiesen werden, die sich schon aufgrund der Curriculi / Lernziele auf unterschiedliche Distributionen aufteilen.
Die hier vorliegende Unterlage soll die verfügbaren Fachbücher zu solchen Themenschwerpunkten nicht ersetzen sondern ergänzen - siehe hierzu Kapitel Literatur.
Ich nutze diese Online-KnowledgeBase (KB) zum Thema Linux auch als Ablage-System für Anleitungen und Code-Schnippsel (Snippets) zum Thema Linux.
Themenabschnitte
Hier eine Übersicht über die Themenabschnitte rund um Linux:
BASICS
Einführung in Linux und mein „Roter Faden“
TOOLS
Werkzeuge, Best Practices und Linux-Knowledgebase
LPIC
Infos zum Linux Professional Institute Certificate
Arch Linux
Eine Linux-Distribution build from Scratch mit sehr guter Community und Dokumentation
EXTRAS
Bücher und Links
Und los geht es mit unseren Themen rund um Linux…
Für einen schnelleren Überblick - in den HTML-Dokumenenten - folgt hier das Stichwortverzeichns und die Dokumentstruktur:
Einführung¶
Manche meiner RST-Unterlagen sind im Laufe der Jahre zu kleinen Büchern gewachsen. Echte Bücher möchte ich mit diesen Unterlagen nicht (er)schaffen. Und die Autoren haben mir/uns die Arbeit „Buch“ ja auch schon abgenommen!
Diese Unterlage sollte eher als „Cheat Sheet“ / „Roter Faden“ verstanden und genutzt werden!
Die dargestellten Techniken beziehen sich nahezu ausschließlich auf Linux-Lösungen in der Konsole / Shell.

Linux Konsole¶
Hier sind eine SSH-Session und ein paar Aufrufe in unterschiedlichen Git-Projekt-Ordnern erkennbar mit über Powerline-Technik grafisch aufgewerteten Shell-Prompts.
Hinweis
Hier sind als Git-Branch-Bezeichner noch die Kennungen master genutzt - diese sollen im Zuge von inklusiven Techbezeichnern auf main geändert werden.
Um die Darstellungen zum Thema einigermaßen übersichtlich zu halten, versuche ich mich auf die folgenden Distributionen zu konzentrieren.
Debian - Derivate: Ubuntu(s), Linux Mint / LMDE
CentOS - Red Hat Family (RHEL); [Nov 2020: IBM/Red Hat nimmt CentOS die LTS-Unterstützung!]
openSUSE - Suse SLES / SLED
Arch Linux - echtes Linux from Scratch; Derivate: Manjaro, Arco Linux
Das heißt aber natürlich nicht, dass nicht auch anderen Distributionen von den dargestellten Techniken profitieren können und sollen.
Und jetzt viel Spaß mit unseren Linux Seminaren…
… tbc …
Distros / Desktops / WM¶
Die besondere Abtrennung zu anderen Betriebssystemen / OS besteht in den gezielten Auswahlmöglichkeiten und Kombinationen von
Distributionen
Desktops (oder auch DE - Desktop Environment)
Displaymanager (oder auch Login Manager)
Window Manager (WM)
X-Server (bzw. Xorg oder auch X11; neu: Wayland)
Hier als erste Annäherungen:
Distributionen
Zusammenstellungen von Linux-Technik von Firmen oder Entwicklergemeinschaften inklusive Installationstechnik und Paketverwaltung(en).
Sehr häufig werden diese Distributionen auch mit einem defacto Standard-Desktop ausgeliefert. Beispiele:
Ubuntu/Debian: Gnome
Linux Mint: Cinnamon
openSUSE: KDE

KDE Plasma Desktop (Quelle: https://kde.org/de/plasma-desktop/)¶
Desktops oder auch DE (Desktop Environment)
Desktops sind Oberflächen mit eigenen Systemverwaltungstools und Anwendungsprogrammen. Desktops versuchen oft über bestimmte GUI-Styles Anwender anzuziehen: z.B. Desktops, die besonders Windows- oder auch mal MacOS-like daherkommen oder auch viele Konfigurationsmöglichkeiten erlauben.
Displaymanager
Für das Login in einen Desktop oder auch eine einfache Window Manager Umgebung wird oft ein Displaymanager oder auch Login Manager genutzt. Bekannte Software: GDM (Gnome), SDDM (KDE/Plasma) oder auch LightDM. Und natürlich kann man die Technik auf eigene Wünsche anpassen.
Window Manager
Die WM (Window Manager) machen exakt, was ihr Name verspricht: sie managen Fenster.
Window Manager versprechen besonders ressourcensparende Fensterauslieferung und sind somit auch immer für alte / leistungsschwache Hardware interessant.
Die eigentliche Darstellung übernimmt hier (wie auch bei den Desktops) der X-Server (bzw. Xorg-Technik).
X-Server (bzw. Wayland)
Seit ein paar Jahren entwickelt man eine moderne Alternative zu dem sehr alten X-Server Techniken und Konzept. Damit möchte man den modernen Grafikverarbeitungen entgegenkommen und diese besser nutzen.
Mehr zu verschiedenen Rubriken in den folgenden Abschnitten…
Distributionen¶
Eine kurze Auflistung ohne Anspruch auf Vollständigkeit:
Debian
Debian ist die #1 bei den Server-OS für Web-Services, Cloud und Co und Debian ist auch Marktführer über die Debian-Derivate:
Ubuntu (Fa. Canonical) - Ubuntu-Varianten:
Offiziell/Inoffiziell: Ubuntu Budgie, Ubuntu Mate, Kubuntu, Lubuntu, Xubuntu, Edubuntu, Mythbuntu, …; Server: Ubuntu Server
Ubuntu Derivate:
Linux Mint (Entwicklergemeinschaft rund um Clement Lefebvre und Desktop Cinnamon)
Pop!_OS (Fa. System76)
KDE neon - neuester KDE Plasma Desktop
elementary OS - eigener MacOS-like Desktop Pantheon
LMDE - Linux Mint Debian Edition
MX Linux - Dez 2020 Platz #1 bei distrowatch.com - verwandt mit Antix
Antix - als Live-Distro und sehr leichtgewichtige Alt-HW-Installation (Pentium III Hardwareanforderung?!)
Kali Linux - als Live-Distro und mit Sicherheits- und Forensik-Tools
Red Hat
Firma mit Environment Red Hat Enterprise Linux
Ableger: Fedora mit den offenen/freien SW-Paketen, CentOS
Klassische Entwicklungsabfolge (bis Ende 2020): Fedora - RHEL - CentOS
Allerdings hat Red Hat im Nov 2020 CentOS den Long Term Support Status weggenommen und in eine Art Rolling Release Variante als CentOS Stream verwandelt. Das bedeutete das Ende von CentOS als freier Alternative zu RHEL 7.
Alternativem mit LTS-Charakter zu CentOS:
AlmaLinux
Rocky Linux
Suse
SLES Suse Linux Enterprise Server bzw. SLED (Desktop)
Ableger: openSUSE - freie Community-Variante (siehe de.opensuse.org) - mit Version 42.1 hat Novell die Entwicklungspfade von SLES und openSUSE zusammengelegt (s. Versionen: 13.1 - 13.2 → 42.1 - 42.2 - 42.3 → 15.x - … - aktuell ab Mai 2021: 15.3)
Arch Linux
Eine pure Linux-Variante Build from Scratch mit hohem Nerdfaktor.
Arch muss man ohne Installer direkt von einem Boot-ISO auf den Rechner übertragen! Also: manuell Partitionieren, manuelle Paketinstallationen mit Hilfe von Bootstrapping und Chroot.
Die Arch-Community mit dem zentralen Arch Linux Wiki ist beispielhaft!
Ableger (mit Installer): Manjaro, Arco Linux, EndevourOS
Neben diesen Schwergewichten haben sich über die Jahrzehnte auch ein paar weitere (s.a. Arch Linux) unabhängige Distributionen Anteile gesichert: Gentoo, Slackware, BSD, Solus, Alpine Linux, Puppy Linux, … ohne Anspruch auf Vollständigkeit ;-)
Hier einmal eine zeichnerische Annäherung an die Distributionen:

Linux Welt und Länder (aus Linux Welt Zeitschrift) - 2013 David Wolski (CC BY-SA)¶
Und eine tabellarische Übersicht:
Distro |
Ableger der Distro |
Paketmanagement |
---|---|---|
Red Hat |
Fedora (akt. Entw.) Kaufversion/Enterprise: RHEL CentOS |
RPM (Red Hat Package Management) Standardtool: rpm (ohne Auflösung Abhängigkeiten) yum, dnf (Fedora, CentOS/RHEL 8) |
Suse (suse.com) |
openSUSE (Link) Kaufversion/Enterprise: SLES |
RPM mit YaST2-SW-Verwaltung, zypper, yum (möglich) |
Debian |
Ubuntu-Varianten (Derivate) Sehr verbreitet: Linux Mint |
DEB (Debian Pakete) Standardtool: dpkg (ohne Auflösung Abhängigkeiten) APT-Tools: apt-get, apt-cache, … , aptitude |
Arch Linux |
Arch-Varianten (Derivate) Sehr verbreitet: Manjaro, EndevourOS Arco Linux (interessant für WM/Desktops) |
Binary Package Management: Bauen/Packen aus dem Quellcode (Tool: makepkg) Tools: pacman (off. Repos), AUR-Helper: yay, … |
Hier mal ein paar Entscheidungshilfen…
Suse:
Verbreitung in Deutschland, Nähe zur Enterprise Edition (SLES - Suse Linux Enterprise Server), gute deutschsprachige Community, Install- und Konfigurationsmöglichkeiten mit YaST (guter Einstieg in Administration von Linux Systemen), …
Debian:
Weltweit Nummer 1 bei Webservices und Internet-Servern, die Basisdistribution für Derivate wie Ubuntu und deren Derivate der Ubuntu-Welt (Kubuntu, Xubuntu, Lubuntu oder auch Linux Mint)
Red Hat:
Sehr große Verbreitung im Enterprise-Bereich und bei weltweit-agierenden IT-Strukturen.
Arch Linux:
Echtes Linux from Scratch* - wir bestimmen jedes einzelne Software-Paket und die Ausstattung und die Konfigurationen für unser System - Stichwort aber auch: Linux Nerd / Freak / Geek ;-)
Weitere Distributionen: www.distrowatch.com
Desktops¶
Jede Distribution hat einen bevorzugten Standarddesktop. Aber natürlich erlauben die meisten Distros auch die Installationen eines weiteren Desktops und dessen Nutzung oder wir nutzen einen einfach Window Manager (WM).

Beitrag Linux Welt 02/2020 zu Desktops¶
Das ist am Ende oft auch eine Geschmacksfrage statt eine technische Entscheidung. Hier mal meine Top 3 - bzw. die TOP3 der Linux-Szene (siehe auch Distrowatch)
KDE bzw. KDE Plasma
Standard-Desktop bei openSUSE, KDE Neon (basiert auf Ubuntu LTS Versionen
Gnome 2 bzw. Gnome 3
Standard-Desktop bei Debian, Ubuntu, CentOS, …
Cinnamon - mein Standard-Desktop - sonst nutze ich Window Manager (Xmonad) oder nur die Konsole
Standard-Desktop bei Linux Mint (basiert auf Ubuntu) LMDE (basiert auf Debian)
https://github.com/linuxmint/Cinnamon - wird also von der Linux Mint Entwicklergemeinschaft gepflegt/entwickelt
Hinweis
Parallelinstallationen: Desktops bzw. Desktop-Manager lassen sich oft nur schlecht parallel auf einem System betreiben. Die mitinstallierten Systemprogramme und Konfigurationen der unterschiedlichen Desktops (z.B. Bildschirmauflösung, SW-Autostarts, Standard-SW, …) kommen sich häufig ins Gehege.
Desktop-Alternativen - „the list goes on and on“…
Mate - Fork von Gnome 2 (als Linux Mint Version verf.) - https://mate-desktop.org/
XFCE - basiert auch auf GTK+ - https://xfce.org/
LXDE - Lightweight X11 Desktop Environment (wenig Abhängigkeiten - http://www.lxde.org/
LXQt - in Lubuntu als LXDE-Nachfolger (Portierung von LXDE auf Qt) - https://lxqt-project.org/
Deepin - gleichname Distro Deepin (chinesische Entwicklung; MacOS-Style) - https://www.deepin.org/en/
Budgie - siehe Distros Solus oder Ubuntu Budgie - https://getsol.us/home/
Pantheon - siehe Distro Elementary OS - https://elementary.io/
Moksha - siehe Bodhi Linux - https://www.bodhilinux.com/moksha-desktop/
Unity (früher: Ubuntu) - schönes Beispiel für die Kurzlebigkeit von Entwicklungspfaden in der Linux-Welt
Vergleiche KDE vs. Gnome: Aufrufe für verschiedene Standardtools / Programme
Dateimanager: Dolphin vs. Nautilus (bzw. Nemo)
Texteditoren: Kate vs. Gedit oder Xed
Terminals: Konsole vs Gnome-Terminal
Hier mal ein Screenshot mit Dateimanager Dolphin aus dem openSUSE KDE/Plasma-Desktop:

openSUSE Desktop mit Dolphin Dateimanager¶
Im Grunde soll diese Unterlage natürlich alle relevanten Linux-Distributionen und Techniken abbilden. Ich werde also versuchen auch die jeweils alternativen Techniken und Lösungen darzustellen.
Für das Beispiel mit dem Dateimanager würde das (zum jetztigen Zeitpunkt) bedeuten:
KDE: Dolphin
Gnome: Nautilus
Cinnamon: Nemo
Und das ohne Anspruch auf Vollständigkeit und hier nur als Beispiel. In der Konsole (Shell) sind wir bei unseren Linux-Umsetzungen viel freier und nicht durch die Desktop-Umgebungen eingeengt.
Und dann weiter mit Standard-Browser(n): Mozilla Firefox, Vivaldi, Brave,… oder Bürosuite LibreOffice, …
Tipp
Aufruf von Programmen in den meisten Desktops mit Alt + F2 und Eingabe Programmname
Window Manager¶
Window Manager - WM (dt.: Fenstermanager) sind (oft) ohne Tools und kommen ohne den Resourcenhunger vieler Desktops.
Manche WM bringen eigene Panels (aka Taskleisten) mit, aber man kann auch hier immer zwischen unterschiedlichen Paketen wählen und kombinieren.
Absoluter Platzhirsch für Testszenarien von WM (und Desktops) stellt die Arco Linux D Veriante von Arco Linux dar:

Desktops und Window Manager für Arco Linux D¶
Anmerkung zum Screenshot: ich habe diesen um 90 Grad gedreht und er ist von der Arco Linux Website (Achtung: hier handelt es sich um ein Arch Linux Derivat).
Die Entwickler stellen dort einen Download (ArcoLinuxD) bereit (ihre sogenannte Lernphase 3) mit Optionen und Anleitungen zur Installation der jeweiligen Desktops und Window Manager (Link: https://arcolinuxd.com/choose-your-project/).
Über Skripte oder ein einfaches arcolinux-tweak-tool
kann man dann
beliebig WM nach- und parallel-installieren.
Und hier kommt meine Übersicht für Window Manager (WM) für Linux:
Xmonad - https://xmonad.org/
Dynamic Tiling Window Manager, geschrieben und konfiguriert in Haskell
i3 - https://i3wm.org/
einfache Konfigurationsdatei (ohne Programmier-/Skriptsprache),
manuelles Window-Management (Tiling), Window Fenster-Postionen über Layouts
Qtile - http://www.qtile.org/
Dynamic Tiling WM, geschrieben und konfiguriert in Python
Awesome - https://awesomewm.org/
ein DWM-Fork (vor Urzeiten), wird in Lua konfiguriert (sehr mächtig, s.a. NeoVim)
sehr große Community, Right-Click Menü
DWM - http://dwm.suckless.org/
der erste / originale Dynamic Window Manager (DWM) gebaut von der Suckless Community
wird als C-Quell-Code mit limitierter Technik (max. 2000 Zeilen Code vorgeschrieben!),
d.h. wie bei jeder Suckless-SW muss man Änderungen kompilieren und patchen
SpectreWM - https://github.com/conformal/spectrwm
Dynamic Tiling WM, einfache Konfigurationsdatei - daher aber wieder auch in Umsetzungen limitiert
IceWM - https://ice-wm.org/
Floating WM, Menüsystem, sehr resourcensparend, in openSUSE vorinstalliert neben KDE5/Plasma
siehe auch Distro Antix (auf Debian basierend)
Openbox - http://openbox.org/wiki/Main_Page
Floating WM inkl. Fensterpositionen per Shortcuts, Right-Klick Menü inkl. Scriptmöglichkeiten
wird oft als Standard-WM für LXDE und LXQt Desktops genutzt
TWM - in openSUSE vorinstalliert neben KDE5/Plasma
Hinweis
Parallelinstallationen von reinen Window Managern auf Linux lassen sich technisch sauber realisieren. Das sieht bei Desktops wegen der mitinstallierten Zusatzdienste und Systemtools anders aus!
WM Typen - die Window Manager lassen sich grob in Klassen einteilen
Hier mal ein paar Links zum Thema Window Manager:
Übersichtsseite mit Window-Managern und kompletten Desktops: XWinMan
Youtube Portal Distrotube aka Derek Taylor mit Schwerpunkten Windows Manager, OpenSource Software
Distrotube Video zu Window Managers (1h2m26s !)
Eine besondere Stellung nehmen die sogenannten Tiling Window Manager ein. Hier liegt die Aufgabenstellung neben dem Fenster managen und sauber verteilen auch auf einer perfekten Steuerungsmöglichkeit für Multimonitor-Environments und die Nutzung über Tastenkombinationen.
Die Fähigkeit für das selbstständige sauber verteilen wird dann auch als Dynamic Tiling WM bezeichnet.
Einfache WM lassen Fenster einfach neu auftauchen oder als Fenster verwalten: Floating WM (siehe: Openbox, IceWM).
Der aktuelle Platzhirsch dieser Szene ist Awesome, der eine riesige Fangemeinschaft hat: Screenshots Awesome!
Tipp
… und eine Persönliche Anmerkung: mein aktueller Favorit ist Xmonad und hierfür biete ich auch diverse vorbereitete Konfigurationen in meinen Seminaren an.
Und auch auf die Gefahr hin mich zu wiederholen: ein Window Manager managed nur Windows.
Für alle weiteren gewünschten Dienstleistungen und Tools muss man selber sorgen!
Es gilt also Pick & Choose - Beispielvideo (engl.) WM als Desktop (Distrotube Channel).
Tipp
Falls man schon einen Desktop installiert hat, kann man durch Analyse der installierten Dienst und Autostarts die bestehende Technik nutzen.
Panels
Panels stellen eine Art Taskleiste mit Infos zu
Workspaces
Fenster + Anwendungen
Datum / Uhrzeit
Systemauslastung
Batterie
Systemtray mit Netzwerk-Manager, Volume, …
Es folgt eine kurze Zuordnung von Standardpanels:
dwm, awesom, qtile (haben eigene Panels)
i3 mit eigenem Panel (i3status); Alternative: i3blocks, polybar
bspwm (polybar)
herbstluft (polybar, dzen2)
openbox (tint2
xmonad (xmobar, polybar)
Polkit - Policies konfigurieren
Basisartikel mit Auswahl von Polkits: https://wiki.archlinux.org/index.php/Polkit
Folgende Implementierungen werden dort aufgelistet:
lxqt-policykit, which provides /usr/bin/lxqt-policykit-agent
lxsession, which provides /usr/bin/lxpolkit
mate-polkit, which provides /usr/lib/mate-polkit/polkit-mate-authentication-agent-1
polkit-efl-gitAUR, which provides /usr/bin/polkit-efl-authentication-agent-1
polkit-gnome, which provides /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
polkit-kde-agent, which provides /usr/lib/polkit-kde-authentication-agent-1
ts-polkitagentAUR, which provides /usr/lib/ts-polkitagent
xfce-polkit-gitAUR, which provides /usr/lib/xfce-polkit/xfce-polkit
polkit-dumb-agent-gitAUR, minimalistic desktop independent agent which provides /usr/bin/polkit-dumb-agent
Wenn man WM parallel zu einem Desktop installiert, kann man einfach die bestehende Installation nutzen.
Composite Manager - zuständig für das Erscheinungsbild von Fenstern und Animationen
Aktuelles Standardtool picom (oder klassisch: compton)
Anm.: gerade unter Arch Linux hier eine Auswahl von Picom Varianten (siehe picom-jonaburg-git)
Hintergrundbilder managen
Tools: nitrogen (oder alternativ: feh)
Screenshots erstellen auf Tastendruck
Übersicht auf Arch Wiki: https://wiki.archlinux.de/title/Screenshot_erstellen
Hier die Basistools ohne Desktop-Verwandschaft:
scrot
import (Paket: imagemagick)
xwd (Paket: xorg-apps)
Clipboard - Zwischenablage für X und Tools
Übersicht und Tools gemäß Arch Wiki https://wiki.archlinux.org/index.php/clipboard
System-Tray - Einfachstes Tool: trayer
Klassischer Systembehälter für diverse Informationen
volumeicon - Lautstärke
nm-applet - NetworkManager Applet
Startmenüs / Launcher
Ein bisschen Komfort mit Oberflächen und Effizienz zum Starten von Programmen und Werkzeugen.
Arch Wiki mit sehr ausführlicher Liste: https://wiki.archlinux.org/index.php/List_of_applications/Other#Application_launchers
rofi - Arch Wiki Rofi, Github Rofi
dmenu - Arch Wiki DMenu, DMenu Suckless Tool
Roter Faden Linux¶
Wie gesagt: mit einem Roten Faden bezeichne ich in Seminaren gerne Technikzusammenhänge und Erläuterungen, die einem den Umgang mit den oft komplexen Techniken erleichtern sollen.
Anmerkung:
Die Ausführungen zu Linux (bzw. GNU/Linux) werden am Beispiel aktueller Debian, CentOS oder openSUSE Distributionen gemacht, da ich viele Seminare am Beispiel dieser Distros abhalte bzw. abgehalten habe.
Roter Faden

Roter Faden Linux¶
Diesen Begriff hört man in meinen Seminaren häufiger ;-). Gemeint ist hier: Das grundsätzliche Verständnis der fraglichen IT-Techniken. Am Besten gleich so, dass man auch nach einer Zeit ohne Beschäftigung mit diesen Techniken sehr schnell wieder in Fahrt kommt.
Unter einem roten Faden versteht man ein Grundmotiv, einen leitenden Gedanken, einen Weg oder auch eine Richtlinie. „Etwas zieht sich wie ein roter Faden durch etwas“ bedeutet beispielsweise, dass man darin eine durchgehende Struktur oder ein Ziel erkennen kann.
Im Grunde geht es hier um die Erkenntnisse im Rahmen von Linux Distributionen, dass diese alle auf derselben Basistechnik (siehe Kernel) basieren und man sich die Umgebung passend aussuchen oder gar selbst zusammenbauen kann.
Ventoy / Installtipps¶
Tipp zu Installationen / ISO-Sammlungen
Für die Installationen von Linux-Distributionen kann man Virtuelle Maschinen mit Hyper-V oder VirtualBox nutzen. Als Installationsmedien stellt man hier einfach die ISOs der Distributionen parat.
Für die Metall-Installation auf Hardware bietet sich ein multifunktionaler Installations-USB-Stick an. Hier ein Beispiel für einen solchen Installations-Stick mit Ventoy (Link Ventoy):

Ventoy Boot Stick mit reichlich ISO-Auswahl¶
Die unterschiedlichen Installations-Szenarien und -Abläufe der Distributionen finden sich reichlich im Netz dokumentiert. Und wir führen diese Installationen in den Seminare mit aktuellen Versionen gemeinsam durch.
Starten wir an dieser Stelle mit den wichtigen Einordnungen und Begriffen rund um Linux.
Grundlagen Linux OS¶
Wir starten mit der wichtigsten Erkenntnis rund um Linux: dem Kernel (siehe kernel.org ).
Kernel¶
Begriff eigentlich genau: GNU/Linux; mit Akronym GNU: GNU is not Unix (rekursives Akronym - Programmierer lieben das ;-)
Freier Betriebssystemkern - hier klassisch: monolithische Struktur, wobei aktuelle Entwicklungen nicht mehr nur starr monolithisch oder Microkernel sind.
Wikipedia-Artikel: Monolithischer Kernel
Engl. Fachbegriff: Kernel (siehe Website für den Kern auf kernel.org - Lizenz GNU Public License
Erste öffentliche Erwähnung durch Linus Torvalds in Newsgroup comp.os.minix am 26. August 1991 (Wiki-Link L. Torvalds)
Kernel bis Desktop¶
Aufbau / Hierarchien der Techniken:
Linux Kernel
X-Server (oder alternativ: Wayland)
Window Manager bzw. Desktop Manager
Technisch ist Linux erst einmal nur der Kernel - mit Hilfe der Distributionen erhalten wir dann auch Installationswerkzeuge (Setup/Installs) und fertig nutzbare (komplette) Systeme mit Oberflächen/GUIs.
Damit kann man direkt auch eine Shell (z.B. die Bash) nutzen und die gängigste Hardwareunterstützung nutzen.
Je nach Aktualität eines Kernels wird dann gerade nur USB 3.2 Gen 1 oder eben schon USB 3.2 Gen 2 oder gar USB 4.0 unterstützt.
Siehe später: Runlevel 3 (ohne Grafikdesktop); in Prozessmangement mit SystemD: multi-user.target
X-Server - Grafik per Client-/Server-Technik (neue Entwicklung: Wayland)
Zusätzlich kann man eine Grafikausgabe mit Hilfe des (klassischen) X-Servers
nutzen (X Windows System, X Server 11 - kurz X11, neu: x.org Server)
mit deren Hilfe einfache Grafikfensteranwendungen (siehe xterm
,
xeyes
;-) genutzt werden können.
Window Manager bzw. Desktop - Oberfläche / GUI
Für die Darstellung von Fenstern kann man einfachste Window Manager wie FVWM oder IceWM nutzen.
Oder man baut noch gleich einen kompletten Desktop inklusive
Management und Zusatztools (bei KDE/Plasam: siehe
konsole
, kwrite
, KDE-Office) oben drauf!
Installationen¶
Die meisten Distribtutionen stellen maßgeschneiderte # Installationstools für ihre Technik parat.
Install-Medien:
CD (Netzwerk-Install; aktuell ca. 100 MB; bei Installation werden
alle Pakete aktuell nachgeladen: ca. 3-4 GB),
DVD (auch als Live-DVD),
Netzwerk-Quellen (FTP, HTTP, NFS, SMB/CIFS, PXE/TFTP);
Die Quellen oft in 32- und 64-Bit und für andere Hardware - also nicht nur Intel x86 bzw. x86_64, sondern auch für ARM, Raspberry, …
Hinweis
In 2020 stellen immer mehr Distros ihre Unterstützung für 32-Bit Intel/AMD-Hardware ein!
Hinweis:
Bereitstellung von Checksums (sha256) zur Verifizierung der Unversehrtheit und Originalität der Downloadarchive (ISOs) - ggf. inklusive GPG Prüfung/Validierung.
Beispielhafte Vorgehensweise zur Verifizierung von Downloads: Linux Mint - How to verify ISO Images
Spezialität von openSUSE: YaST - Yet another Setup Tool (Installations- und Setup/Konfigurationswerkzeug)
Verzeichnisstruktur¶
Hier eine kurze Übersicht (als Screenshot und Tabellen) - siehe auch ausführlicher Beitrag zu FHS auf Wikipedia.

Filesystem¶
Einige Verzeichnisse:
/bin
- Binaries, ausführbare Programme; bei vielen Distros
als Link zu /usr/bin
(Debian 10 Buster)
/boot
- Kernel vmlinuz (komprimiert, mehrere Versionen mit
Nummern), initrd (Ramdisk)
/boot/grub2
- Bootmanger (hier nicht konfigurieren - siehe
/etc/default/grub)
/dev
- Geräte (/dev/fd0, /dev/sr0, /dev/sda, /dev/sdb, /dev/null,
/dev/urandom, …)
/etc
- Konfigurationen (/etc/fstab, /etc/hosts, /etc/hostname,
viele Konfigurations-Unterordner: /etc/skel, …)
/etc/X11
- der Ordner für den X-Server (Grundtechnik
Grafikausgabe)
Manche Distros bereiten sich auf die Nutzung
von /usr/etc
vor (z.B. openSUSE 15.2).
/home
- Benutzerprofile (/home/username)
/lib
- Programmbibliotheken (Libraries; siehe auch /lib64)
/lost+found
- bei journaling File Systems Daten für
Fehlersuchen/Behebungen (siehe auch Toolreihe fsck)
/media
- klassischer Mountpoint für Wechselmedien
(bei openSUSE nicht mehr vorhanden)
/run/media/username
-
neuer Mountpoint für Wechselmedien bei openSUSE und Co
/mnt
- Mountpoint (der alte Standardmount für manuelle Mounts)
/opt
- optionale Software (hier am Beispiel XAMPP Lamp Server -
Link); auch: kommerzielle Software
/proc
- Prozesseverwaltung (siehe Ordner mit PID-Nummern)
Übungen / Aufrufe und Ausgaben verstehen:
cat /proc/meminfo
; cat /proc/interrupts
; cat /proc/cpuinfo
Speziell: Vergleich von cat /proc/uptime
mit Aufruf von Befehl uptime
/root
- Homedir für SuperUser root
/sbin
- Programme mit hohen Privilegien (SuperUser);
bei vielen Distros als Link zu /usr/sbin
(Debian 10 Buster)
/srv
- Serverdienste (Verzeichnisse z.B. für Webserver - diese
findet man gerne auch unter /var/www ;-)
/tmp
- Temporärer Ordner; gemeinschaftlich im System (später:
besondere Zugriffsrechte)
/usr
-
Großteil der installierten Software im System (Unix System Resources)
/var
- Variable Daten; insbesondere bei Debian die
Apache-Webserver-Verzeichnisse: /var/www/html
Unterscheidung/Gruppierung von Daten auf Unix/Linux Systemen gemäß File Hierarchy Standard (FHS):
veränderliche / dynamische vs. statische und
gemeinsam genutzte vs. nicht gemeinsam genutzte Verzeichnisse
gemeinsam nutzbar |
nicht gemeinsam nutzbar |
|
statisch |
/usr /opt |
/etc /boot |
dynamisch |
/var/mail /var/spool/news |
/var/run /var/lock |
Beispielhafte Darstellungen: Linux Community - Linux User Zeitschrift (Link - Linux User Ausgabe 11 / 2011)
Berechtigungen¶
Un detaillierter Liste (ls -l
)die Berechtigungen r
(read), w (write), x (eXecute) für
u - Benutzer/Besitzer (u - user),
g - Gruppe (g - group) und
o - „alle Anderen“ (o - others) hergeleitet,
Standard-Berechtigungen ergeben sich (per default bzw. umask) in der (oktalen) Form 755 (für Ordner) und 644 für Dateien.
Bis hierhin: technisch 3 mal 3 Bit = 9 Bit für Berechtigungen
Hinweis
umask
(z.B. openSUSE: 0 022) mit
Standardberechtigungen für Ordner (777 - 022 = 755)
und Dateien (666 - 022 = 644)
Hier mal wieder ein Scribble aus einem meiner Seminare:

Linux - Datei- und Ordnerberechtigungen¶
Befehl chown (bzw. chgrp) zum Ändern von Besitzer und/oder Gruppe
chown -R wwwrun:wwwrun /var/www/html
(Ordner html für Apache2 User:Gruppe konfigurieren)
Anm.: chown kann auch einfach Gruppe setzen mit chown :groupname
Befehl chmod
eingeführt und nachrecherchiert - Beispiele chmod:
chmod -R 750 testordner
(Ordner testordner rekursiv auf 750)
chmod u+x skript.sh
(Datei skript.sh für Benutzer/Besitzer ausführbar machen)
Alternative: Berechtigungen mittels Eigenschaften Dialogfenster mit Dateimanager (z.B. Dolphin - Rechte Maus - Eigenschaften)
Übung mit „chmod“ bzw. Dateiberechtigungen über Dateimanager und Eigenschaften:
Ordner /home/donnerstag
mit Berechtigungen 750 und 700 ausstatten,
und Tests mit ls mit anderen Usern (joeb, mittwoch)
Für chmod
(Change Modus) an Unterordnern muss -R
(Achtung: hier großes R für –recursive) gesetzt werden.

Linux Berechtigungen¶
Beim Dateimanager (siehe z.B. Dolphin) muss ein Haken für das Anwenden auf die Unterordner aktiviert werden.
Sonder-Berechtigungen: ergeben zusätzliche 3 Bit Berechtigungen!
SetUID:
chmod 4...
oderchmod u+s
SetGID:
chmod 2...
oderchmod g+s
Sticky-Bit:
chmod 1...
oderchmod o+t
Beispiel: SetUserId-Bit bei Passwortänderungstool passwd
:
(siehe Besitzer: root)
- rwsr----- root shadow /usr/bin/passwd
Erklärung / Sinn:
Auch normale User müssen Passworte für sich wechseln können -
dazu braucht man aber Schreibzugriffe
(root) auf Passwort-Datei /etc/shadow
!
Gefahr
Beachten: Sicherheitsprobleme möglich mit
SetUID! SEC-Audit: find / -perm -4000
SetGroupId-Bit: dasselbe Verhalten bei Ausführung von Programmen mit Gruppen-Rechte-Übernahme
Beispiel Sticky-Bit mit Temporärordner /tmp
:
d rwxrwxrwt root root /tmp
Erklärung / Sinn:
Der Temp-Ordner für Alle - im wahrsten Sinne. Aber durch Sticky-Bit
werden Dateien/Ordner-Berechtigungen und Besitz/Gruppe mit in den
Ordner /tmp transportiert und sind so gegen die anderen Nutzer von
/tmp
schützbar
Prozesse¶
Starten von Programmen in der Konsole im Hintergrund (Background - bg):
kate mittwoch.txt &
bzw. natürlich auch: kdesu kate /etc/hosts &
Konsole meldet dann die Prozess-ID; Recherche im Verzeichnisbaum:
/proc/...
(Ordner mit PIDs)
ps
in Kombination mit grep
zum Suchen bestimmter laufender
Prozesse (z.B. sshd)
Befehle: fg
, bg
, jobs
, ps
ps ax | grep firefox
(bitte wieder an ps --help
und man ps
denken)
hier: grep für „Filtern“ von Daten (Wikipedia Link - global regular expressions print)
Tools:
ps, pstree, pstree -p, top, kill
(Signale beachten)
Anm.: „Overkill SIGKILL“ mit -9, Standardsignal SIGTERM ist -15
Prozesseigenschaften:
PID, Status (R - running, S - sleeping, Z - zombie)
Tipp: Grafische Übersicht oft auch mit Strg + Esc (oder Aufruf/Suche nach Prozess/Systemwerkzeug mit System… z.B.: Systemüberwachung bei Gnome und Co)
Booten und System¶
Das Linux-System unter der Haube und der Startvorgang unserer Linux-Distributionen im Einzelnen.
Bootvorgang¶
Eine exemplarische Darstellung inklusive Erläuterungen zu Linux-Bootvorgängen:
Einschalten (Reset, POST - Power On Self Test)
BIOS / UEFI mit Bootsequenz (Startreihenfolge; engl: Bootsequence / Startmedien)
Übersicht Bootmedien:
USB (Sticks / HD), Netzwerk (PXE / TFTP), Festplatten / SSDs, Optische Medien (CD/DVD)
MBR lesen - Masterbootrecord mit Partitionstabelle (Nutzung von UEFI mit GPT ist anders: wir benötigen eine spezielle ESP - EFI System Partition mit Fat32/vfat Dateisystem)
maximal 4 Partitionen: 4 Primäre oder 3 Primäre und 1 Erweiterte
Hinweis:
für das Booten von HDs > 2,2 TB wird UEFI mit GPT (GUID Partition Table) benötigt
Erinnerung / Tipp: (ggf. nach Fehlschlag Parallelinstalation zu Windows)
Win-Systeme benötigen als Bootstandard eine Aktive primäre Partition inkl. eines „sauberen“ MBR (Generischer MBR)
→ Reparatur-Tipp zum MBR: mit Win-DVD:
bootrec /fixmbr
(bzw.bootrec /fixboot
für Bootsektor) in ReparaturkonsoleDarstellung zu Partitionierungen:
exemplarische Szenarios für Parallelinstallation mit Windows - Linktipp MS
Linux-Bootmanager: GRUB2 (Übersicht Bootmanager und Technik Bootmanager folgt)
Vorgänger / Bootalternativen: GRUB (Version 1), LILO (Linux Loader)
Kernel und initrd (klassisch: init Ramdisk - initrd laden; Anm.: die Ramdisk ist optional)
Symlinks bei openSUSE: vmlinux (komprimierter Kernel), initrd
Analyse Kernel-Version:
uname -a
bzw.uname -r
systemd (Erster Prozess mit ID „1“) (früher: SysVInit mit Urprozess init)
Anm.: moderne Linuxe benutzen nahezu ausschließlich systemd („abwärtskompatibel“ zu init).
Ubuntu hatte zwischenzeitlich upstart als init-Lösung (Ubuntu nutzt aber auch systemd ab Ubuntu 16.04 LTS)
Gründe für Abkehr von SysVinit zu alternativen init-Techiken:
Effizienter
Parallel arbeitend
Abhängigkeiten von Prozessen cleverer lösend
moderne Tools (journalctl, systemctl, …)
moderne Problemanalysen und Loggings
Tipp zur Startanalyse:
systemd-analyze blame
(erzählt in ms - Millisekunden -
die Geschichte der „Starts“)
oder auch:
systemd-analyze plot > grafische-analyse.svg
(erstellt SVG-Grafik)

Systemd Analyse mit Plot¶
Technisch: systemd arbeitet mit Targets (z.B. graphical.target, multi-user.target) statt den klassischen Runleveln
Befehle:
init
, telinit
, runlevel
, systemctl
(statt sysctl
bei init-Technik), journalctl
(für Analyse/Logging)
Bootmanager GRUB2¶
Lilo (sehr alt und unflexibel), GRUB (Version 1 bzw. GRUB Legacy - Erläuterungen auf openSUSE Portal)
aktuell: GRUB2 (technisch extrem zu GRUB abweichend und mächtiger!)
GRUB-Ordner: /boot/grub2
GRUB konfigurieren mit /etc/default/grub
und den /etc/grub.d/
Dateien
GRUB aktualisieren mit Befehl: grub2-mkconfig -o /boot/grub2/grub.cfg
(siehe z.B. Suse)
Hinweis: manche Distros (siehe Debian, Ubuntu/s) haben ein kleines
Hilfsskript namens update-grub
, welches diese Syntax ersetzt!
Grub2-Techniken bedürfen genauer Recherche und Betrachtungen!
Hinweis zum Bootloader mittels YaST - System - Bootloader mögliche Speicherorte für GRUB: MBR (Master Boot Record), Bootsektor einer Partition
Erläuterungen zu GRUB2: Link Ubuntuusers-Wiki (Achtung „Ubuntu-Brille“),
Targets / Runlevel¶
Wir wollen jetzt das Prozessmanagement unter Linux besser verstehen. Hierzu wieder ein Scribble aus einem meiner Seminare zum Thema:

SysVinit vs. SystemD¶
Erinnerung: Runlevel ist ein klassischer Begriff von SysVinit / Init; neuere systemd-Technik arbeitet mit Begriff Targets
Beispielhafter Online-Beitrag zum Thema SystemD: Grundlagenartikel systemd von Heise.de
Die klassischen Runlevel als tabellarische Übersicht:
0 - Stop/Halt
1 / s / S - Single User (zu Wartungsarbeiten)
2 - Multi-User (mit und ohne Netzwerk - je nach Distribution)
3 - Multi-User und Netzwerk (klassische Serverumgebung LAMP und Co)
4 - unbenutzt
5 - Multi-User, Netzwerk, X-Server (heute mit Desktops wie KDE oder Gnome)
6 - Reboot
Klassischer Ordner für Skripte /etc/init.d
mit Unterordnern
für die Runlevel
Momentaufnahme openSUSE 42.1 Runlevel 5:
/etc/init.d/rc5.d
beinhaltet noch 3 Dienste
mit entsprechenden (S Start - K Stop/Kill) Skripten
hier: avahi-daemon, postfix, udev
Diese init-Skripte arbeiten dann mit Parametern start | stop | restart | reload
Momentaufnahme openSUSE 42.3:
Keinerlei Skripte mehr in den Runlevel-Unterordnern
/etc/init.d/rc0.d
bis rc6.d
(Anm.: nur noch in ./boot.d für AppArmor)
Anm.: Red Hat (und Co) arbeiten mit /etc/rc.d
als Haupt-Skriptordner - siehe auch SymLink rc.d auf init.d bei openSUSE.
Hinweis
Zum Zeitpunkt Juli 2020 ist nur noch CentOS 6 / RHEL 6 mit den klassischen Runleveln nach SysVinit am Start.
Und CentOS 6 ist für Ende November 2020 abgekündigt!
Linux-Alternative mit SysVinit: antiX Linux (basierend auf Debian)
Aus dem Massenmarkt verschwindet SysVinit (Runlevel) also gerade und wir sollten uns dem am weitest verbreiteten Prozessmanagement bei den Linux-Distros zuwenden - dem SystemD.
SystemD¶
(Reference Manual Chapter: The systemd Daemon)
Die SysVinit-Technik wird durch systemd-Technik ersetzt bei Beibehaltung der alten (abwärtskompatiblen) init-Skript-Techniken und Ordnerstrukturen nach SysVinit.
Dadurch werden die Start-/Stoppmechanismen durch teils gleichzeitiges Abarbeiten von Aufrufen beschleunigt - siehe früher S- und K-Links in Runlevel-Ordnern alle mit gleicher Nummerierung (hier 50 - S50… / K50…)
Wir nehmen nur noch Skripte, die nicht sauber mit systemd arbeiten können - oder noch nicht umgeschrieben worden sind. Anm.: kann man kaum noch in den alten Runlevel-Ordnern finden!
Hinweis: seit openSUSE 42.3 und folgende openSUSE: es befinden sich nur
im „allgemeinen“ Bootordner
/etc/init.d/boot.d
noch Start-/Stop-Skripte für die AppArmor-Technik -
alles Andere mit SystemD-Techniken sauber umgesetzt.
Abwärtskompatible Runlevel-Tools lassen sich immer noch nutzen:
runlevel
, init X
(X = S, 0, 1, 3, 5, 6) ,
shutdown
, halt
, reboot
Wichtigste SystemD-Befehle:
systemctl
- Manager für alle SystemD-Units: Dienste (.service), Timer (.timer) oder Targets (.target)systemd-...
- Tools für die SystemD-Analyze (siehesystemd-analyze
) und Cojournalctl
- Tool für die Auswertung und den Zugriff auf die SystemD-Journale
Ein paar beispielhafte Aufrufe:
systemctl
bzw.systemctl list-units
- alle SystemD Units auflistensystemctl list-units --type service --state running
- alle laufende Dienste (.service) auflistenjournalctl -u ssh
- Journal für Unit SSH (bzw. SSHD) aufrufen
Hinweis zu Systemd-Journal: ein eigener Service - mit eigener Konfiguration
(siehe /etc/systemd/journald.conf
- Storage).
Per Default sind die Journale der Dienste nicht persistent - sie können also
nur in einer Linux-Session genutzt werden.
Hier mal eine ausführlichere Gegenüberstellung von SysVinit vs. SystemD:
SysVinit |
systemd |
Bemerkungen |
---|---|---|
Runlevel |
Targets |
Bezeichungen für gewünschte Bootumgebung |
/etc/inittab |
keine /etc/inittab (!!) in Ordnern diverse Dateien: (z.B.) /usr/lib/systemd/system |
Konfigurationsdatei(en) |
runlevel init telinit sysctl chkkonfig |
runlevel (wegen Kompatibilität) init (w. K.) telinit (w. K.) systemctl journalctl systemd- (z.B. systemd-analyze blame) |
Tools |
service sshd status |
systemctl status sshd.service |
Status openSSH Server |
service sshd start |
systemctl start sshd.service |
Starten openSSH Server |
service sshd stop |
systemctl stop sshd.service |
Stoppen openSSH Server |
service sshd restart |
systemctl restart sshd.service |
Restarten openSSH Server |
service sshd reload |
systemctl reload sshd.service |
Konfiguration openSSH Server neu laden |
chkconfig sshd on |
systemctl enable sshd.service |
openSSH im Runlevel/Target aktivieren |
chkconfig sshd off |
systemctl disable sshd.service |
openSSH im Runlevel/Target deaktivieren |
Man. Suche in Logdateien |
journalctl -u sshd.service |
Journal für openSSH (als root) |
chkconfig –list |
systemctl list-unit-files systemctl list-dependencies multi-user-target |
Übersicht Dienste in Runleveln/im Target |
init 3 (oder) telinit 3 |
systemctl isolate runlevel3.target systemctl isolate multi-user.target |
in Runlevel 3 wechseln bzw. in multi-user.target |
init 5 (oder) telinit 5 |
systemctl isolate runlevel5.target systemctl isolate graphical.target |
in Runlevel 5 wechseln bzw. in graphical.target |
… |
systemctl isolate default.target |
in Standard-Runlevel wechseln bzw. in default.target |
init 0 (oder) telinit 0 shutdown -h poweroff |
systemctl isolate runlevel0.target systemctl isolate poweroff.target shutdown -h poweroff |
Rechner ausschalten |
init 6 (oder) telinit 6 shutdown -r reboot |
systemctl isolate runlevel6.target systemctl isolate reboot.target shutdown -r reboot |
Rechner rebooten |
Tabelle zu SysVinit vs. systemd (siehe auch Link Fedoraprojekt (Link)
Praktische Übungen: systemctl start | stop | enable | disable
Partitionierungen¶
Klassische Gerätename:
/dev/hda
(für die alten EIDE Controller Geräte - dann/dev/hdb, ...
)/dev/sda
(für den ersten Datenträger SCSI, SATA, USB - dann/dev/sdb, ...
)
Die eingerichteten Partitionen erhalten Nummern: /dev/sda1, /dev/sda2, ...
Anm. bei MBR ist dann /dev/sda5
als erste logische Partition (log.LW)
in einer erweiterten Partition!
Wir begannen also mit Bezeichnern für EIDE-Geräte: /dev/hda
(Kürzel HD
klassisch für HardDisk). Die sda-Bezeichner wurden dann für SCSI, SATA und
heute auch USB-Medien eingeführt.
Es gibt aber auch Bezeichner /dev/vda
(Virtuelle Datenträger) oder /dev/
nvme0n1
(Solid State Modul per NVme angeschlossen).
Alternativ: Verwendung von Geräten-ID-Bezeichnern (siehe später GRUB oder auch
/etc/fstab
)
Aktuelle Distributionen nutzen sehr häufig diese UUID als eindeutige Bezeichner für die Partitionen/Datenträgerbereiche.
Vorteil UUID: dann werden die Datenträgerbereiche auch sauber gemountet,
wenn diese mal statt auf /dev/sda2
auf /dev/sdb1
liegen sollten!
Eine Einstimmung auf die Dateisysteme, mit denn man dann die Partitionen formatiert - eine kurze Übersicht:
ext2
ext3 (Anm.: ext2 mit journaling FS)
ext4
xfs (beherrscht gleich ACL - erweiterte Berechtigungen)
BtrFS (kann Snapshots)
ReiserFS
ZFS (wird aktuell als BtrFS-Alternative von Ubuntu gepuscht - Lizenzprobleme!? beachten)
Und die Microsoft-Dateisystem können wir mit Linux natürlich auch nutzen:
Fat16
Fat32 (VFat)
NTFS
Hinweis
Die folgenden Beispiele für openSUSE - wir nutzen aber auch immer die alternativen Distros!
Hier: Abweichung von Install-Vorschlag aus der Standard-Setup-Install-Routine von openSUSE (siehe YaST), denn openSUSE würde gerne
BtrFs als Dateisystem für das System ( Ordner
/
bzw./boot
) undxfs für die Daten (siehe
/home
)
vorschlagen.
Aber wir wollen (erst einmal) BtrFs vermeiden und auch zu Übungszwecken die „klassischen“ Ext-Dateisysteme Ext4 nutzen!
Plan für eine Einteilung/Partitionierung:

Partitionierungsvorschlag¶
Beispiel für Installation mit folgenden Partitionen: 3 primäre
Partitionen /dev/sda1
bis /dev/sda3
in einem MBR-basierten System.
Mount |
Nutzung |
Eigenschaften |
---|---|---|
/ |
Root-Partition |
Größe: 70 GiB
Gerät: |
/home |
Benutzerverzeichnisse |
Größe: 50 GiB
Gerät: |
swap |
Auslagerungspartition, VMM Virtual Memory Management |
Größe: 7 GiB
Gerät: |
Wichtig: bei UEFI bitte als erste Partition: 512 MiB / vFat / ESP
Die Größen der Bereiche orientieren sich hier an den typischen VHDX-Platten-Größen beim Hyper-V (127 GB) und müssen in der Praxis natürlich nach eigenenen Ansprüchen optimiert werden.
Hinweis
Für die flexible Nutzung von Datenträgern nutzen wir später LVM (Logical Volume Management).
Erste Analyse und Tools rund um unsere Partitionen mit den folgenden Tools:
lsblk
, blkid
, fdisk -l /dev/sda
bzw. gdisk
(für UEFI/GPT) , cfdisk
Falls es Probleme bei Darstellungen (z.B. Umlaute und Sonderzeichen werden falsch dargestellt)
mit Konsolentool cdisk
geben sollte, kann man sich mit env
behelfen:
Lösung: env LANG=C cfdisk
Erklärung: in Umgebung des auszuführenden Programms (env) wird als Sprache C eingestellt, was der Sprache/Kodierung des Programms entspricht (hier „englisch“).
Mounten¶
Das Einbinden von Datenspeichern/Datenträgern und anderen Komponenten (siehe virtuelle Systeme) in das System.
Befehle: (Geräte/Datenträger werden automatisch erkannt und per Klick gemountet)
mount
(der eigentliche Hauptbefehl zum Einbinden von Laufwerken/Mounten)
umount
(Mounten beenden)
Hinweis: heutzutage geschieht das Mounten bei allen Wechselmedien (optische, USB) durch den User (technisch: im Userspace - siehe: FUSE). Auch für spezielle Anbindungen von Datenspeichern per SSH existieren solche Tools/Vorgehensweisen (z.B. sshfs).
Aktuellen Mount-Status anzeigen:
mount
ohne Parameter (oder natürlich alternativ:
cat /etc/mtab
cat /etc/mtab | grep ^/dev/
(nur die Einträge mit /dev am Anfang - also Geräte)
Anweisungen für das System zum Mounten beim Systemstart:
cat /etc/fstab
Darstellung der Techniken und Vorgehensweisen mit einem USB-StickTools:
fdisk
, mkfs.ext4
, mount
Alle Analysen wieder mit Hilfe von
lsblk
, blkid
, fdisk -l
, cfdisk
Benutzer und Gruppen¶
Die Verwaltung von Benutzern und Gruppen ist eine der Kernfähigkeiten bei der Benutzung von Betriebssystemen.
Und Linux stellt hier keine Ausnahme dar.
Für den Start hier die wichtigsten Konfigurationsdateien und Tools.
Anzeige zu Benutzern mittels Befehlen
whoami
who
id
groups
Dateien der Benutzer/Gruppen:
/etc/passwd
/etc/shadow
/etc/group
Anm.: Die Inhalte und der Aufbau der Dateien sind für die professionelle Nutzung sehr wichtig! Und natürlich gibt es entsprechende Man-Pages.
Hinweis
cat /etc/shadow
mit normalem Benutzer: keine Anzeige mit Hinweis
„Keine Berechtigung“ - Bitte die Berechtigungen analysieren/beachten.
Konsole¶
Tools für Benutzer- und Gruppenerstellungen / Anpassungen:
Benutzer:
useradd
,usermod
,userdel
Gruppen:
groupadd
,groupmod
,groupdel
Empfehlung: vorher useradd -D
- zeigt die Defaults/Vorgaben für User) mit Home-Dir und anderen Defaultkonfigurationen.
Profitipp: die Konfiguration für Standarduserumgebung kann mit Konfigurationsdatei /etc/default/useradd
vom root angepasst werden!
Beispielhafter 2-Zeiler für einen neuen Standarduser: (Schalter -m
wichtig für Home-Dir-Erstellung)
useradd -m -c "Teilnehmer 01" -s /bin/bash tn01
passwd tn01 (Passwort setzen)
Manche Distros (Debian-Derivate) verfügen auch über das Skript adduser
um Benutzer interaktiv anlegen zu können.
Suse - YaST¶
Suse: mittels YaST2 - Benutzer-/Gruppenverwaltung aktuelle Benutzer und Gruppe analysieren
Bei anderen Distros einfach in deren Toolsammlungen und Systemverwaltungstools (KDE, Gnome, Cinnamon) nach den vergleichbaren Verwaltungstools für die Benutzer und Gruppen suchen.
Systembenutzer/Gruppen müssen oft extra ausgewählt (gefiltert) werden!
Rechte analysieren und durch Übungen mit unterschiedlichen Benutzern/Benutzerkonten (siehe UIDs/GIDs) die Benutzerkonzepte von Linux erkennen.
Benutzereigenschaften:
Home-Dir-Pfad, Shell (Standard /bin/bash
; speziell: siehe wwwrun: /bin/false
), Sekundäre Gruppen
Übung: neue Benutzer über Gui-Tool anlegen, anmelden und testen:

mit YaST (Suse) Benutzer anlegen¶
Tests mit gegenseitigen Zugriffen der Benutzer - hier (bei Suse) ist „Lesen/Stöbern“ in anderen Home-Dirs möglich
Wir werden noch mehr über die speziellen Berechtigungen lernen - Beispiele folgen.
Benutzer-Wechsel¶
(eine Zusammenfassung)
su
, su -
Switch User (mit - geschieht Wechsel in das Home-Dir und komplettem Environment: siehe PATH
)
kdesu
- der su für den KDE-Desktop (siehe Aufruf YaST oder manuell für Grafik-/Fensterapplikationen)
Tipp Gnome: Tool gksudo
sudo
(quasi ein „Ausführen als“)
Die Nutzung von sudo
muss explizit konfiguriert werden (siehe Gruppe sudoers oder auch wheel und Konfigurationen in /etc/sudo
). Fraglich ist die sicherheitstechnische Umgebung des Tools. Mit jedem sudo vim ...
erhöht man die Rechte/Privilegien des Tools (hier: vim). Eigentlich bräuchte man nur einmalig die nötigen Schreibrechte auf Dateisystem z.B. für das Ändern einer Datei in /etc
.
Hinweis
Mehr und mehr Distros tendieren aber zur Nutzung von sudo
. Wie so oft: einer macht etwas vor (hier: Ubuntu) und alle machen es nach ;-) Allerdings gibt es auch Alternativen: doas
oder sudoedit
, die sich aber oft nur manuell integrieren und nutzen lassen.
Terminals¶
Alle Betriebssysteme lassen sich natürlich auch über GUIs (Graphical User Interfaces) verwalten. Aber - und das ist ein großes ABER - hierdurch verliert man in den meisten Fällen viele oder alle der folgenden Fähigkeiten:
Automatisierung
Zugriff auf alle Konfigurationen und Einstellungen
Geschwindigkeit bei Aufruf und Ausführungen
Und ich möchte mir diese Vorteile natürlich nicht nehmen lassen. Und das ist auch wieder komplett plattformunabhängig, was bedeutet, dass ich mich auch auf anderen OS mit den entsprechenden Shellangeboten intensiv beschäftige (siehee Windows PowerShell).
TTY¶
Erklärung: tty - Teletyper
Beispiel für openSUSE: (die Nummer der Konsole variiert bei Distros - einfach ausprobieren)
Terminals 1 bis 6 (ohne Desktop) mittels Strg + Alt + F1 … F6
zurück zu Desktop mittels Strg + Alt + F7
Anm.: in dieser Aktion kann man (oft) auch Strg weglassen
Die Belegungsnummer des grafischen Terminals wird von der Distribution konfiguriert - also: einfach ausprobieren!
Beenden/Ausloggen eines TTY-Terminals
mittels exit
(Anm.: logout
nur bei Login-Shells)
Erste beispielhafte Gehversuche in der Konsole (shell) mit:
ls -a
oderls -A
ls -al
cd
su
who
whoami
which
bzw.whereis
ping
ifconfig
oderrunlevel
für folgende Anmerkung
Anm.: ifconfig
nur mit kompletten Pfad als Standard-User
aufrufbar: /sbin/ifconfig
bzw. usr/sbin/ifconfig
.
Bei vielen Distros sogar nicht mehr basisinstalliert. Also erst nach Nachinstallation von Paket net-tools (oder ähnlichen Paketnamen je nach Distro) verfügbar.
Hinweis
Die Superuser/Root haben den Pfad /sbin
in Ihrem Pfad.
Pfade anzeigen mit echo $PATH
(Pfadvariable).
Hilfe und Tipps¶
Der Aufruf von Man-Pages (z.B. man rm
)
oder Befehl mit –help (z.B. rm --help
) ist ein ständiger
Begleiter bei der Nutzung der Konsole.
Natürlich hilft uns die Man-Page-Technik
gerne auch mit einer Hilfe zur Hilfe mit man man
.
Die folgende Tabelle zeigt die Nummern der Abschnitte der Handbuchseiten und den Typ der dort zu findenden Seiten.
1 Ausführbare Programme oder Shell-Befehle
2 Systemaufrufe (Kernel-Funktionen)
3 Bibliotheksaufrufe (Funktionen in Programmbibliotheken)
4 Spezielle Dateien (gewöhnlich in /dev)
5 Dateiformate und Konventionen, z.B. /etc/passwd
6 Spiele
7 Verschiedenes (einschließlich Makropaketen und Konventionen), z. B. man(7), groff(7)
8 Befehle für die Systemverwaltung (in der Regel nur für root)
9 Kernel-Routinen [nicht Standard]
Die hier beschriebenen Chapters (Abschnitte) erläutern die Codes für die jeweiligen Hilfen. Ein Beispiel ist passwd - also ein Technik, die es als Konfigurationsdatei aber auch als Tool für User/Superuser gibt.
Hilfe zur Konfigurationsdatei /etc/passwd
: man 5 passwd
Alternative Hilfe (Distroabhängig): info
Pages
Tipps/Tricks in Terminal/Konsole
Tabulator - Befehle/Verzeichnisse/Dateien komplettieren
Cursor - mit Cursor-Tasten wiederholen (durchblättern)
Shift + PgUp - nach oben blättern mittels
(Seite hoch) bzw. Shift PgDown für nach unten
~/.bash_history
- die Historie aller Shell-Aufrufe des UsersStrg + R - Rekursive Suche in History
vorwärts dann mit Strg + S - Anm.: dieses Tastenkombi ist bei vielen Konsolen allerdins als Pause Display konfiguriert, was die Konsole einfriert (Tipp: Strg+Q ist Restart Display/fortsetzen)
Tipp: alternative Suche mit FZF Integration
Strg + L - Löschen der Konsole
Strg + A - Anfang und
Strg + E und Ende Kommandozeile
Strg + U - Löschen der Kommandozeile von Cursor bis Anfang
Kopieren (Mausmarkierung) und Einfügen (mittlere Maustaste) in der Konsole
Softwareverwaltung¶
Wir wollen uns hier erst einmal auf die klassischen Paketverwaltungen konzentrieren.
Linux-Systeme managen ihre Softwareverteilung mit Hilfe von Paketmanagern. Hierbei bleibt das Prinzip im Grunde immer gleich. Allerdings unterscheiden sich die Tools hinsichtlich der Syntax.
Hinweis
Quellen mit Übersicht zu Paketmanagements und Aufrufen im Arch-Wiki (sehr ausführlich) und bei Wikipedia (kurz und knackig):

Paketverwaltungen - ausführlich im Arch Wiki¶
Alternative Softwareinstallationen:
Software mit eigenem Setup/Installer oder
Source-Tarballs: Quellcodearchiv (Sources)
nach Auspacken müssen die Quelldateien (Sources) dann mit dem passenden Compiler (GCC - GNU C Compiler) übersetzt werden
Wir steigen mit einem Überblick ein.
Paketmanagements¶
Und wieder: ohne Anspruch auf Vollständigkeit ;-)
Distro |
Ableger der Distro |
Paketmanagement |
---|---|---|
Red Hat (Link) |
Fedora, besser: CentOS Kaufversion: RHEL |
RPM (Red Hat Package Management) Standardtool: rpm (ohne Auflösung Abhängigkeiten), yum |
Novell (Suse) (Link) |
openSUSE (Link) Kaufversion: SLES |
RPM mit YaST2-SW-Verwaltung, zypper, yum |
Debian (Link) |
Ubuntu(s), Linux Mint |
DEB (Debian Pakete) Standardtool: dpkg (ohne Auflösung Abhängigkeiten) APT-Tools: apt, apt-get, apt-cache, … , aptitude synaptic (grafische Oberfläche - Gnome) |
Arch Linux |
Arch Linux |
pkg.tar.xz bzw. pkg.tar.gz Tool: Pacman |
Slackware |
Slackware |
früher: tar.gz heute: TXZ (tar.xz) |
OpenWrt z.B. Router |
Linux auf Routern |
ipkg |
Tabelle für die Einstimmung auf Software-Verwaltung (Installation/Deinstallation) mit diversen Konsolentools.
Tool für das Wandeln von DEB in RPM (und umgekehrt): alien
(kann man probieren! oder auch einfach lassen ;-)
DEB vs RPM¶
Software verwalten / aktualisieren mit den beiden Klassikern.
Hier mal eine Übersicht mit den Klassikern der Installationen aus einem meiner vergangenen Seminare als Scribble:

Paketverwaltungen - eine Annäherung in einem Seminar¶
openSUSE verwendet RPM (Red Hat Packages) mit diversen Tools. Am einfachsten kann man natürlich YaST2 mit dem Softwareverwaltung betreuen - dort werden auch gleich alle Paketabhängigkeiten analysiert und aufgelöst.
Standard-Konsolentool rpm
- in RPM-basierten Distros besser:
yum
(bei Suse: zypper
)
Anleitung zur Benutzung von zypper
auf einem openSUSE-Info-Portal
(Link)
Bei Debian/Ubuntu Paketmanagement (DEB, Standard-Konsolentool
dpkg
) heißt die entsprechende Toolreihe apt
(bzw. apt
, apt-get, aptitude, synaptic
)
Vergleichsseite von RPM vs. DEB Techniken und Aufrufen (Link)
Suse: zypper und rpm¶
Red Hat Package Mangement (in openSUSE Distribution)
Haupttool: rpm
für die Konsole;
Beispiele:
(Hinweis: man nutzt in Praxis eigentlich nur rpm -q..
Aufrufe
für Abfragen)
rpm -i <paket>
(installiert Paket);
rpm -e <paket>
(löscht Paket);
rpm -U <paket>
(aktualisiert Paket)
rpm -q <paket>
(Abfrage/Query an Paket)
Wichtig: rpm kann die Abhängigkeiten der Pakete nur erkennen - aber nicht automatisch auflösen, daher sehr „unhandlich“
Tipps zu rpm: (Infos und Analysen zu Paketen und Installationen
mittels rpm -q
; q für Query/Abfrage)
rpm -qa | grep Firefox
(findet die installierten Mozilla Firefox Pakete)
rpm -qa | grep ^mc
(findet Pakete die mit mc in
der rpm-Ergebniszeile beginnen)
besseres Konsolenwerkzeug openSUSE:
zypper
(hier klappen die automatischen Auflösungen der
Paketabhängikeiten)
zypper refresh
(aktualisiert manuell die Quellen)
zypper update
(aktualisiert die Pakete/Installationen)
zypper install <paket>
(installiert ein Paket)
Quellen für Pakete: Repositories (CD, DVD, FTP, HTTP, Lokal)
Übersicht über Repositories über YaST-Softwareverwaltung
zypper lr
bzw. zypper repos
Hinweis auf Paketgruppen, Suchen/finden/installieren/deinstallieren von Paketen, Schemata
Recherche für Pakete mit Infos zu Repos: repoquery -i joe
(bei Fedora: dnf repoquery ...
)
Community Repos erweitern die Quellen für Pakete:
Online: Build Service (software.opensuse.org) ermöglicht Zugriff auf teilweise aktuellere Softwareversionen oder Software, die es nicht in den offiziellen Suse-Repositories gibt; Repos werden mit eigener Signatur (Key) in Repo-Verwaltung hinterlegt
Weitere Spezialität openSUSE:
automatische Installation mit Hilfe von YaST Meta Packages (*.ymp) in Form von 1-Click-Installs bei openSUSE
siehe SUSE-Onlineportal: https://software.opensuse.org/search
Software-Ausstattung¶
(Überblick ohne Anspruch auf Vollständigkeit ;-)
Browser: Firefox, Chromium/Chrome, Vivaldi, Brave, …
Office: LibreOffice, …
PDF: Okular, …
Sound/Musik/Streams: Amarok, Rhythmbox, VLC, …
Brennsoftware: K3b, …
Mails: KMail, Thunderbird, Evolution, …
Bildbearbeitung: Gimp, …
Installationswünsche aus Diskussionen häufig: VLC, Thunderbird, Xeyes (;-)
Anm.: man kann auch gerne mal mit einer paketorientierten Testinstallation einer Software auf Linux-Systemen experimentieren. Durch die Paketverwaltung kann man Software sehr sauber wieder entfernen.
Infos zu Softwareverwaltungen separat…
… tbc …
Dateimanager¶
Eine der häufigsten Tätigkeiten im System - neben Textverarbeitungen - ist das Managen von Dateien und Ordnern.
Dabei haben wir eine große Auswahl an Software zur Verfügung. Wir unterscheiden an dieser Stelle:
Grafische Dateimanager
Diese benötigen mindestensn Fenstermanager oder sogar eine komplette Desktopumgebung.
Terminal Dateimanager
Diese können wir in den genutzten Fenster-Terminals (techn. Terminalemulator) oder aber auch in den TTY nutzen.
Der anspruchsvolle Linux-Administrator sollte sich in mindestens einem dieser Dateimanager gut auskennen.
Ich werde an dieser Stelle nur ein paar erste Beispiele für beide Techniken einpflegen.
Dolphin¶
Der Dolphin ist aktuell der Standard-Dateimanager bei KDE (im Gegensatz zu Nautilus bei Gnome).
Gewünscht bzw. Testen: Zwei-Fensteransichten (F3), Favoriten-Leisten, Konsole (Shell-Kommandos) mit F4

Dolphin Dateimanager (KDE)¶
Anm.: Konquerer auch Browser und früher der Standard-Dateimanager von KDE - heute ist es Dolphin
Übung: Einblenden der „versteckten“ Dateien/Ordner mit Tastenkombination Alt + . (beginnen ja auch mit .);
Bei Gnome ist Nautilus der Standardmanager - oder aber auch Fork Nemo (siehe Cinnamon).
Für die Konsole sei an den Midnight Commander (Paketname: mc
) erinnert.
Midnight Commander¶
Installieren aus den Standard-Paketquellen mit
zypper install mc
bzw.apt install mc
oderyum install mc
Aufrufen in Shell/Konsole mit mc
Shortcuts:
F10 zum Beenden
Strg + O zum ein-/ausblenden des Commander-Fensters
Tipp
Gnome: für das gnome-terminal
in den Eigenschaften die Funktionstaste F10 deaktivieren!
Netzwerke¶
Die Darstellung von Netzwerktechnik würde hier natürlich den Rahmen sprengen. Wir wollen uns über die Implementierung und Konfiguration von Netzwerken mit Linux informieren.
Die folgende Übersicht ist nicht vollständig! Insbesondere müsste man noch ausführlich die Möglichkeit über SystemD-Technik betrachten.
Für die Verwaltung und Konfiguration von Netzwerktechnik in Linux stehen verschiedene Basis-Techniken zur Verfügung:
ifup / ifdown
Die klassische Technik der Einbindung von NICs und Netzwerkumgebungen
So findet man eine grafiklose Serverinstallation vor (siehe Hoster, Cloud-Services)
Tools/Dateien:
ip
,ifup
,ifdown
,ifconfig
, Datei:/etc/network/interfaces
Netplan
Bei allen Ubuntus als Abstraktionsschicht für die Konfiguration eines Systems über eine
*.yaml
Datei.Oft konfiguriert:
renderer: NetworkManager
es wird also der NetworkManagergenutzt!NetworkManager
Eine Red Hat Technik mit Applet (Miniprogramm für Windows Manager KDE
kde5-nm-connection-editor
, Gnome und Co)Wicked Service (z.B. seit openSUSE 13.2 für Desktop-Installationen; bei Notebooks: NetworkManager)
Wichtig/Suse: entweder Wicked oder NetworkManager nutzen; Konfiguration mittels YaST - Netzwerkeinstellungen - Global Options
netconfig
Eine weitere Konfigurationsmöglichkeit für unsere Netzwerkumgebung.
Einen sehr guten Einstieg auf fremden Systemen bietet
die Analyse der /etc/resolv.conf
- dort sieht man die
verwendete Konfigurationstechnik des Systems.
Tipp
Sie finden den Hinweis für die Netzwerkkonfigurationstechnik
des Systems über die /etc/resolv.conf
!
Netzwerkbefehle¶
Wir steigen mit zwei Befehlen zur Analyse der Internet-Verbindung ein.
ping -c 10 www.bahn.de
traceroute www.vhs-braunschweig.de
Analysewerkzeuge:
ip
- aktuelles Standardtool für Alles rund um Netzwerktechnikroute
- Klassiker für das Routingdig
,host
,nslookup
- die DNS-Profisarp
- Analytik MAC-Adressen zu IPifconfig
- veralteter Klassiker (oft nicht mehr in Standardinstallationen)
Für WLAN-Konfigurationen gibt es auch:
iwconfig
Konfiguration DNS-Namenserver:
/etc/resolv.conf
(der erste Anlauf für Netzwerkonfiguration)
Manuelle Namensauflösung für Seminarnetz mit
/etc/hosts
(Rechnernamen linux01, …, linux17)
Zusammenfassung Netzwerkanalyse mit Linux:
IP-Konfiguration |
Shellaufrufe |
---|---|
IPv4-/IPv6-Adresse Subnetmask |
|
Standardgateway (bzw. Router) |
|
DNS-Server |
aber: wenn von den Netzwerkkonfigurations-Diensten wie Wicked oder Netconfig, NetworkManager manipuliert keine manuelle Änderung gewünscht! |
Es gibt es auch diverse Tools/Skripte, die diese Aufgaben/Aufrufe zusammenlegen, aber wir wollen auch immer die Basics bemühen und „Linux“ verstehen! Und ein passende Script ist schnell gebastelt.
Tipp
Bei der Analyse einer fremden Maschine am Besten mit
cat /etc/resolv.conf
beginnen, weil man dort auch gleich die
Erklärung bekommt auf welche Art das Netzwerk konfiguriert wird.
Windows Freigaben¶
Für die Nutzung von Freigaben auf Windows Rechnern (Servern) benötigen wir unter Linux einfach nur die passende Client-Software.
Das bedeutet hier also SMB / CIFS Client Software. Für die umgekehrte Nutzung eines Linux Servers als Windows Freigabesystem stünde uns der leistungsfähige Samba Server zur Verfügung.
Mittels der Dateimanager in den Desktops von Linux kann man sofort über eine geeignete URI loslegen (oft muss man die URI per Strg + L zur Arbeit öffnen):
smb://UserA@192.168.2.22
(dann Passwort eingeben)
Für die Konsole und in der Shell sehen mögliche Lösungen wie folgt aus.
Ich empfehle die Nutzung von CIFS Client Technik, was für die meisten Distros die Installation des Pakets cifs-utils bedeutet.
Also entweder die Installation des Pakets checken:
rpm -qa | grep cifs
oderzypper info cifs-utils
dpkg -l | grep cifs
oderapt show cifs-utils
Oder wir überprüfen einfach per Konsolenkomplettierung die
möglichen Mount-Befehle und dort sollten wir mount.cifs
finden. Wir werden das Tool aber später transparent mit
mount -t cifs ...
aufrufen.
Hinweis
Dort gäbe es ggf. auch alternativ das mount.smb3
Werkzeug.
Wir kommen zu einem denkbaren Szenario: (siehe Windows: net share
oder Get-SmbShare
in der PowerShell)
Windows Server:
192.168.2.22
Freigabename:
smbstuff
(Berechtigung: UserA / Password)Lokales Verzeichnis zum Mappen:
/mnt/smb
Aufruf:
sudo mount -t cifs //192.168.2.22/smbstuff /mnt/smb -o username=UserA,password=Password
Für das Verbergen der Authentifizierung über Benutzername und Passwort kann man eine Credentialsdatei nutzen.
Hier ein paar weitere Quellen für die weiteren Recherchen oder auch das feste Verdrahten
Hinweis
Und wir könnten natürlich auch komplett auf das Linux-eigene NFS als Netzwerkprotokoll umschwenken. Es ist Server- und Clientseitig heute für alle Betriebssysteme (inkl. Windows) verfügbar und leistungsfähiger als SMB/CIFS!
Drucken¶
Verschiedene Nutzungen und Drucker-Installationen unter Linux:
Manuelles Installationsarchiv des Druckerherstellers
oft mit Installationsskript, das erst noch mit
chmod u+x install-script.sh
zum Ausführen vorbereitet werden muss und sauber per absolutem oder relativen Pfad
./install-script.sh
ausgeführt werden muss.
lpd - Line Printer Daemon, der klassische Dienst zum Verwalten von Druckern, Druckjobs, Printqueues
Kommandozeilentools:
lp
(siehe wieder lp <tab tab> zeigt:lpq
,lpr
,lpc
,lpstat
,lpinfo
)YaST2 Modul Drucker
zum Installieren oder Verwalten von Druckern bei Suse-Systemen
Desktopmanager Druckerkonfiguration (KDE, Gnome, XFCE)
Tipp: sind möglichst zu vermeiden, weil diese Tools manchmal individuelle Konfigurationen verwenden!
CUPS - Common Unix Printing Service (Apple)
der aktuelle Standard, Distro-unabhängig und per Weboberfläche verwaltbar:
Webadresse (im Browser)
localhost:631
(also Port 631)
Es folgen weitere Druckinfos zu CUPS und Drucken unter Linux.
Tipp
Bitte beim Kauf von Druckern bzw. Multifuntkionsgeräten die Unterstützung für Linux im Vorfeld beachten.
CUPS¶
Beispielinstallation eines „HP Color 500 Laserjet (m551)“ mit Hilfe der HP Linux Imaging and Printing Toolserie auf hplip.net Website bzw. des entsprechenden Pakets:

Druckserver CUPS (Apple)¶
Die eine Technik die man indirekt aus Cupertino beisteuert ;-).
HPLIP¶
Link zum Webportal HPLIP

HP Linux Imaging and Printing¶
Unter Suse installieren mit: zypper search hplip
, zypper info hplip
, zypper install hplip
. Die anderen Distros mit ihren
jeweiligen Installwerkzeugen.
Damit werden alle nötigen Dateien (Druckertreiber, ppd-Dateien) und Konfigurationen für HP Geräte (Drucker, Scanner, Multifunktionsgeräte) erstellt und eine passende HP-Installation bereitgestellt:
Tipp für hp-setup
:
Für das saubere Finden der HP-Drucker im
Netzwerk muss ggf. kurz die Firewall gestoppt werden:
systemctl stop firewall.service
Später die Firewall natürlich wieder starten oder einfach Neustart.
Empfohlene Verwaltung der Druckserver-Umgebung dann mit CUPS.
Linux Specials¶
Über die Jahre habe ich viele Anleitungen, Best Practices oder Code-Schnippsel für Linux in den unterschiedlichsten Ausarbeitungen verteilt.
Es wird Zeit diese Infos an einer Stelle zentral bereitzustellen und aufzusammeln.
Hyper-V Gastauflösung¶
In vielen Testumgebungen nutzen wir Microsoft Hyper-V als Virtualisierungsumgebung. Dort haben unsere Linux-Gäste leider nur eine fixe Auflösung von 1152x864 Pixeln.
Diese Voreinstellung möchten man in den Seminaren - und in sonstigen Umgebungen - gerne auf passendere Auflösungen optimieren:
1280 mal 800 Pixel (z.B. für Kurzdistanzbeamer in kleineren Seminarräumen)
1600 mal 900 Pixel (z.B. für Remote/Online-Seminare mit/ohne RDP-Sessions)
1920 mal 1080 Pixel (für Standardauflösung Full-HD-Monitore)
Hierfür bearbeiten wir die /etc/default/grub
unseres Linux-Gast (Debian oder auch openSUSE):

Default Grub anpassen mit Hyper-V Auflösung¶
Die wichtige Zeile: GRUB_CMDLINE_LINUX_DEFAULT= … erweitern wir
am Ende mit der nötigen Hyper-V-Framebuffer Auflösung: GRUB_CMDLINE_LINUX_DEFAULT="... video=hyperv_fb:1920x1080"
Und danach natürlich - wie in der Konfigurationsdatei beschrieben - mit einem update-grub
(bei Debian)
komplettieren.
Der Befehl update-grub
bei Debian (und Derivaten Ubuntu, …) ist nur eine Vereinfachung
der Aktualisierung von Grub2: grub-mkconfig -o /boot/grub/grub.cfg
Mit dem letzten Befehl müssten wir also bei openSUSE-Gästen die Änderungen der Auflösung in die Grub2-Konfigurationsdatei schreiben.
Bei RHEL/CentOS stellt man uns ein eigenes Spezialprogramm für die Grub2-Anpassungen parat. Für die gewünschten Einstellungen an einem CentOS-Hyper-V-Gast folgt: (Anleitung z.B. bei Hyper-V: How to Change Screen Resolution in CentOS / Red Hat Virtual Machines )
grubby --update-kernel=ALL --args="video=hyperv_fb:1280x800"
reboot
Diese Konfigurationen natürlich alle als root / SuperUser.
Verlorene Passworte¶
Alle Betriebessysteme haben eines gemeinsam: Wenn wir die Systemlaufwerke mit den Benutzerdaten und Authentifizierungstechniken nicht verschlüsseln, dann können wir uns den Zugang zum System immer wiederherstellen.
Und das ist auch gut so ;-)
Die Standardvorgehensweise für das Resetten der Passworte für root oder auch andere Benutzerkonten funktioniert mittels Grub2.
Wir halten den Bootmanager an und editieren in geeigneter Weise den Kernel-Ladevorgang: wir ergänzen den Kernel mit einem eigenem init-Prozess - nämlich einer einfachen Bash-Shell.

Beispielhafte Anleitung root Password reset - Thomas Krenn Portal¶
Link zur Anleitung: https://www.thomas-krenn.com/de/wiki/Linux_Root_Passwort_wiederherstellen
Die Anleitungen lassen sich dann auch noch variieren:
System von externem Installmedium starten
Single User Mode nutzen (klassisch: Runlevel 1)
Spezielle Anleitungen bei einzelnen Distro
Hier mal ein Screenshot aus einem Seminar:

Beispielhafte Anleitung root Password reset¶
Insbesondere sollte man auf die veränderte Eigenschaft für das gemountete und remountete Root-Verzeichnis achten: die Eigenschaft wechselt von ro (Read-Only) auf rw (Read / Write).
In der letzten Vorgehensweise starten wir einfach den Rechner hart neu.
Alternativer Password-Reset
Falls der „init-Trick“ nicht funktioniert (Anleitung Suse Docs: Password reset)
System mit Linux-Live-System oder Installations-Medium booten und Rescue Modus wählen - wir werden User root.
Kurzanleitung:
Partition mit
/
Dir (siehe Zugriff nötig auf/etc/...
) finden - z.B. mit fdiskEntsprechende Partition mir „rw“ mount:
z.B.
mount /dev/sda2 /mnt
odermount -o remount,rw /dev/sda2 /mnt
Anm.: Mount-Modus „rw“ mit mount checken!
Nutzen von chroot Technik:
# cd /mnt
# chroot /mnt
# passwd
Eine solche Trickserei und Rettung des Systemzugriffs ist bei jedem System/OS möglich, solange die entsprechenden Datenträger nicht verschlüsselt werden!
Tools und Oneliner¶
In diesem Abschnitt sammele ich einfach mal Zeuch und Schnippsel aus meinen Linux-Ordnern und auch so manche Highlights aus den Fachbüchern, die man bei der Literatur findet.
Tipp
Eine sehr schöne - wenn auch wieder webtechnisch zurückhaltende Netzseite - findet sich in Form der Linux Command Library (Commands, Basics/Oneliner, Tips).
Die Standard-Tools und Werkzeuge in der Konsole sollten durch diverse Seminare und Beschäftiungen mit der Linux-Shell (Konsole / Terminal) bekannt sein.
Hier kann man vielleicht noch die ein oder andere interessante Technik entdecken oder Aufrufe in neuem Gewand sehen.
Tools A - K¶
arp-scan (paket)
Muss bei den meisten Distros nachinstalliert werden
awk - mächtiges Skriptingtool in Konsole
Beispiel:
# erste und die siebte Spalte aus /etc/passwd
awk -F':' '{print $1,$7}' /etc/passwd
# Heimatverzeichnis und die Shell von Testing:
awk -F':' '/Testing/ {print $6; print $7;}' /etc/passwd
# Login-Namen aller Benutzer mit einer UID größer gleich 1000 aus:
awk -F':' '$3>=1000 {print $1}' /etc/passwd
# extrahiert aus der Ausgabe von ls -l die Dateigröße und den Dateinamen
ls -l *.txt | awk '{print $5,$9}'
cowsay
Die Sprechende Kuh für die Konsole - aber gerne auch Tux oder Vader mit Sprechblasen. Das Tools wird von mir gerne für Installationsübungen und als erste Beispiele zum Pipelining benutzt.
Wer sagt dann, dass die Konsole keinen Spaß machen kann?!

Beispiel mit Cowsay und Lolcat¶
cp
Gesamtes Verzeichnis buch kopieren: cp -a buch bak-buch
# ${i%.xxx}.yyy entfernt die Endung *.xxx und ersetzt sie durch .yyy.
# Wenn Sie cp durch mv ersetzen, werden die Dateien nicht kopiert, sondern umbenannt.
for i in *.xxx; do cp $i ${i%.xxx}.yyy; done
# alternativ mit sed
ls *.xxx | sed 's/\(.*\)\.xxx$/cp & \1.yyy/' | sh
cut
# aus der Datei /etc/passwd die erste, die dritte und die
# siebte Spalte, also den Benutzernamen, die UID-Nummer und die Default-Shell.
cut -d\: -f1,3,7 /etc/passwd
date
date "+%Y%m%d"
(ergibt: 20200708)
dd
# ISO-Datei opensuse.iso direkt auf den Datenträger mit dem Device /dev/sdc
dd if=opensuse.iso of=/dev/sdc bs=1M status=progress
# 10 GiB große RAW-Image-Datei für ein Virtualisierungsprogramm (z. B. QEMU/KVM).
dd if=/dev/zero of=image.raw bs=1M count=10000
Vergleich zwischen dd
, dd_rescue
und dcfldd
:
https://superuser.com/questions/355310
dig
dig +short @8.8.4.4 braunschweig.de MX
dircolors

Bash mit dircolors nach Solarized Dark Theme¶
Einbau in ~/.bashrc
mit Hilfe der dircolors.256dark
Datei von Solarized Dark
# solarizd dark theme implementing manually - Zeile für .bashrc
eval $(dircolors -b dircolors.256dark)
Das Farbthema von Ethan Schoonover Solarized - Precision colors for machines and people
ethtool
ethtool enp0s3
eval
Inhalte von Ausdrücken / Variablen als Anweisungen ausführen lassen können.
kom="ls | more"
$kom (funzt nicht)
ls: |: No such file or directory
ls: more: No such file or directory
eval $kom (funzt)
fgconsole
# gibt Nummer der console aus!
sudo fgconsole
figlet
Ein einfaches Tool für ASCII-Art in der Konsole.
Alternative: toilet
Bei Debian-based Distros liefert figlet ein Examples-moolets-Skript für die Ausgabe der mitgelieferten Figlet-Fonts:
#!/bin/sh
# Prints "Moo" using every font installed on /usr/share/figlet
# Written by Sandro Tosi <matrixhasu@gmail.com>
# Modified by Jonathan McCrohan <jmccrohan@gmail.com>
for file in /usr/share/figlet/*.flf ; do
FONT=`basename $file | sed 's|\(.*\)\.\(.*\)|\1|'`
printf "Font: $FONT\n"
figlet -f $FONT Moo
printf "\n"
done
Das zeigt dann:
> sh /usr/share/doc/figlet/examples/moolets
Font: banner
# #
## ## #### ####
# # # # # # # #
# # # # # # #
# # # # # #
# # # # # #
# # #### ####
Font: big
__ __
| \/ |
| \ / | ___ ___
| |\/| |/ _ \ / _ \
| | | | (_) | (_) |
|_| |_|\___/ \___/
...
...
find
Das Standard-Suchtool mit nahezu unendlichen Aufrufmodi und Unterstützungen.
Die folgenden Beispiele habe ich häufig in meinen Seminaren:
# alle Dateien im aktuellen Verzeichnis (auch versteckte Dateien,
# aber keine Dateien aus Unterverzeichnissen)
user$ find -maxdepth 1 -type f -name '*'
# liefert nur gewöhnliche Dateien (aber keine unsichtbaren Dateien)
user$ find -maxdepth 1 -type f -name '[!.]*'
# /etc-Verzeichnis nach Dateien, die in den letzten zwei Wochen verändert wurden.
sudo find /etc -mtime -14
# Kommando löscht alle Backup-Dateien, die durch das Zeichen ~ am Ende des Dateinamens
rm $(find . -name '*~')
# besser:
find -name '*~.jpg' -exec rm {} \;
# alle Dateieinträge (Hardlinks auf dieselbe Inodenummer) finden und löschen:
# nicht sinnvolle finds werden nach /dev/null umgeleitet (error nach /dev/null)
find /home/ -inum 262862 2> /dev/null -exec rm -f {} \;
Aber es lassen sich auch beliebige andere Quellen mit schönen Übersichten und Dutzenden von kommentierten Aufrufen finden.
Ein (aktuell / Anfang 2023) schnelle Recherche ergibt beispielhaft:
findmnt
Die bessere Darstellung von Mount-Techniken und Hierarchien.
fzf
Hinweis
FZF hat ein eigenes Kapitel bekommen (fzf)
Die rekursive Suche mit Strg + r
und das Suchen von Dateien und Ordnern mit Strg + t
auf die
richtige Weise mit dem Fuzzy Finder.
Github Repo FZF (mit Erläuterungen für die Betriebssystemeinbindungen)
Einfache Inbetriebnahme bei Debian: apt install fzf
Am Besten schaut man für die Einbindung von FZF in die Paketinfos: apt show fzf
Dort findet man dann Distro/Shell-Erläuterungen: /usr/share/doc/fzf/README.Debian
. Für die Einbindung
in die Bash benötigen wir die folgenden zwei Zeilen:
source /usr/share/doc/fzf/examples/key-bindings.bash
source /usr/share/doc/fzf/examples/completion.bash
Danach natürlich nicht das Sourcing der Bashrc vergessen (z.B.): source ~/.bashrc
Das mitgebrachte Manual man fzf
erläutert wie immer die hier sehr umfangreiche Nutzung.
grep
Reguläre Ausdrücke - wo soll man anfangen - wo soll man enden ;-)
Wir beginnen mal mit einem einfachen Greppen, um Standard-Konfigurationsdateien
mit #
am Anfang einer Zeile und Leerzeilen zu Serialisieren:
grep -v "^#\|^$" ~/.zshrc
Kurzerläuterung: -v negiert, ^ Anfang der Zeile, $ Ende der Zeile
Das geht auch etwas komplizierter mit mehr Anforderungen:
# Kommentare zu eliminieren, bei denen # oder ; nicht am Zeilenanfang steht,
# sowie leere Zeilen mit Whitespace (Leerzeichen, Tabulator-Zeichen)
grep -Ev '^[[:space:]]*#|^[[:space:]]*;|^[[:space:]]*$' \
smb.conf.orig > smb.conf
Und wer gerne noch ein bisschen mehr Infos benötigt:
Für professionelleres Greppen lohnt dann auch ein Blick auf ripgrep
gs - Ghostscript
Das Universaltool rund um Postscript und Co - also auch gerne das Handling von PDFs!
gs -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -o gsmerged-prepress.pdf docA.pdf docB.pdf docC.pdf
Mit Schalter prepress
auch noch äußerst kompakt und gleichzeitig qualitativ mehr als OK für Screens.
host
host braunschweig.de
inxi
Nettes Konsolentool für Infos rund um Hard- und Software.
Beispielhafter Aufruf:
> inxi -Sxxx
System:
Host: rechnername Kernel: 5.4.0-122-generic x86_64 bits: 64 compiler: gcc v: 9.4.0
Desktop: Cinnamon 5.2.7 wm: muffin 5.2.1 dm: LightDM 1.30.0
Distro: Linux Mint 20.3 Una base: Ubuntu 20.04 focal
ipcalc (paket)
ipcalc 192.168.2.15/24
- dann klappt es auch mit dem Subnetting ;-)
kvm und qemu-kvm
Virtualiserungen mit Linux-Kernel-Bordmittel: kvm (Debian, Ubuntu) bzw. qemu-kvm (Fedora, Red Hat) sind winzige Scripts, die im Emulator qemu eine virtuelle Maschine mit KVM-Unterstützung ausführen.
qemu-img create -f qcow2 disk.img 10G
kvm -accel kvm -m 1024 -smp 2 -boot once=d -cdrom ubuntu-server.iso \
-drive file=disk.img,if=virtio,format=qcow2 \
-net user -net nic,macaddr=52:54:00:12:e4:4e,model=virtio \
-vga cirrus -vnc 127.0.0.1:0 -k de -usb -usbdevice tablet
vncviewer localhost:0
Besser: grafische Tools wie virt-viewer
Tools L - P¶
last (letzte Anmeldungen) und lastb (letzte Fehl-Anmeldungen - benötigt root)
loginctl - ein weiteres Tool von SystemD
Anm.: erst ohne Parameter für Grundinformationen, dann:
loginctl show-session 2 -p Type
(zeigt Wayland oder X11)
locate und updatedb
Mit locate lassen sich sehr gut Befehle und Dateien im System finden. Hierfür muss aber - insbesondere nach einer frischen Installation (Pakte mlocate) - die Datenbank für diesen Mechanismus per updatedb aktualisiert - bzw. erstellt - werden.
Das eigentliche Tool: mlocate
(siehe Analyse
mit whereis
und weiteren ls
lsb_release
lsb_release -a
lsd - ls Deluxe
Anmerkung: wir benötigen wieder NerdFonts!

Konsolentool ls Deluxe¶
Alternativen: colorls
oder auch exa
makepasswd
Entweder aus dem gleichnamigen Paket makepasswd oder alternativ aus Paket expect (Red Hat, Fedora, CentOS) nachinstallieren.
makepasswd --chars 15 --string 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYZ#+-§$%&()=}][{{'
Anm.: natürlich bietet sich hier auch die Erstellung eines Alias an! Und für einfachere Passwort-Generierung als Alternative das Tool pwgen
mount, umount
Beispiele: (Anm. für LPIC-Seminare: unbedingt Tests mit USB-Medien und SMB-Freigaben)
mkdir /windows
mount /dev/sda7 /media/backup-partition
mkdir /usbstick
mount -t vfat /dev/sdc1 /usbstick
# gewöhnlicher Benutzer mit der User-ID 1000 und der Gruppen-ID 1000 Zugriff
mount -t vfat -o uid=1000,gid=1000,fmask=0022,dmask=0022 /dev/sdc1 /usbstick
mount -t iso9660 /dev/sr0 /media/cdrom
mount -t cifs -o username=name,uid=1000,gid=1000,iocharset=utf8,nounix //jupiter/myshare /media/winshare
Password for name: ********
mount /media/dvd -o remount,exec
# nach Fehlern beim Mounten:
mount -o remount,rw /
Die Bindungen werden mit umount wieder gelöst.
mtr
Tests mit Netzwerken - vergleich traceroute
$ mtr -c 4 -r www.nytimes.com
Start: 2020-07-19T12:14:03+0200
HOST: buero-2018 Loss% Snt Last Avg Best Wrst StDev
1.|-- fritz.box 0.0% 4 0.4 0.5 0.4 0.5 0.0
2.|-- p3e9bf337.dip0.t-ipconnec 0.0% 4 22.6 15.7 7.5 25.1 9.4
3.|-- 217.5.116.118 0.0% 4 13.5 13.5 13.3 13.7 0.2
4.|-- 80.157.131.146 0.0% 4 13.3 13.4 13.2 13.6 0.2
5.|-- 151.101.13.164 0.0% 4 12.5 12.7 12.5 13.0 0.2
namei
Zugriffsrechte zu einem Pfad in hierarchischer Liste
$ namei -l ~/.ssh
f: /home/UserName/.ssh
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x joeb joeb UserName
drwx------ joeb joeb .ssh
nc oder auch netcat
Das Schweizer Messer für TCP/UDP-Ports; beliebt bei Netzwerktestern
Hinweis
Die Distros integrieren manchmal unterschiedliche nc-Verianten (nc vs. ncat) und bieten diese mit mit unterschiedlichen Software-Paketen an (netcat-traditional oder auch netcat-openbsd vs. nmap).
Das Tool nc eignet sich auch für die Übertragung von Dateienen:
Datenübertragung von host2: host2$ nc -l 1234 > datei
auf host1: host1$ nc host2 1234 < datei
und als einfacher Chat:
host1$ nc -l 1234
host2$ nc host1 1234
Hallo von Host1?
Hallo von Host1?
Angekommen - Hallo zurückvon Host2!
Angekommen - Hallo zurückvon Host2!
<Strg> + <C>
Die genutzte Variante lässt sich leicht mit
whereis
nachrecherchieren und das installierte Paket
mit (z.B.) einem dpkg -l | grep netcat
oder rpm -qa | grep netcat
herausfinden.
Gefahr
Für die Sicherheit eines Systems stellen nc-Varianten mit Schalter -e
eine besondere
Herausforderung dar. Der Schalter -e
erlaubt das Ausführen (Executing) von Befehlen per nc-Session!
ncdu
Das Tool „DiskUsage du““ in einer aufgebohrten Variante, die häufig erst nachinstalliert werden muss über das gleichnamige Paket. Anm.: NC steht hier für NCurses, also grafische Unterstützungen in der Konsole.
ncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help
--- /home/UserName/git-projekte/linux-stuff/vim
18,3 MiB [##########] /conf-vm-stretch
14,0 MiB [####### ] vim-config-20200529.tar.gz
14,0 MiB [####### ] vim-config-20200530.tar.gz
10,8 MiB [##### ] vim-config-20200520.tar.gz
9,7 MiB [##### ] /conf-vm-opensuse-42.3
3,1 MiB [# ] /conf-centos7
80,0 KiB [ ] /cheat-sheets
40,0 KiB [ ] /conf
8,0 KiB [ ] /vim-pure-joeb
netstat
Ein weiterer Klassiker der Netzwerkanalyse - muss ebenfalls ggf. bei verschiedenen Distros nachinstalliert werden (z.B. net-tools).
Aktive Verbindungen (established) und überwachte (listen) Ports auflisten:
$ netstat -atupe
(Es konnten nicht alle Prozesse identifiziert werden; Informationen über
nicht-eigene Processe werden nicht angezeigt; Root kann sie anzeigen.)
Aktive Internetverbindungen (Server und stehende Verbindungen)
Proto Recv-Q Send-Q Local Address Foreign Address State Benutzer Inode PID/Program name
tcp 0 0 localhost:domain 0.0.0.0:* LISTEN systemd-resolve 24502 -
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN root 32926 -
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN root 22438 -
tcp 0 0 localhost:61209 0.0.0.0:* LISTEN root 32151 -
tcp 0 0 buero-2018:34690 ec2-34-208-202-61:https VERBUNDEN joeb 42870 2682/firefox
tcp6 0 0 [::]:ssh [::]:* LISTEN root 32928 -
tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN root 22437 -
udp 0 0 localhost:domain 0.0.0.0:* systemd-resolve 24501 -
udp 0 0 buerorechner:bootpc fritz.box:bootps VERBUNDEN root 39216 -
udp 0 0 0.0.0.0:631 0.0.0.0:* root 34012 -
udp 96384 0 0.0.0.0:mdns 0.0.0.0:* root 40049 -
Anm.: Ausgabe(n) gekürzt. Mit Parameter -n
kann man wieder die IP- und Port-Nummern sehen.
nmap
Der Klassiker unter den Konsolen-Netzwerkscans.
Hinweis
Netzwerkscans sollten nur in eigenen oder dafür vorbereiteten Netzen (siehe nmap.org) durchgeführt werden. Das Scannen fremder Netze kann als Intrusion-Versuch gedeutet werden.
Die Aufrufe für nmap füllen ganze Bücher oder Internet-Fachportale -
hier das Hauptportal: https://nmap.org/
und Anleitung zu Nmap on Kali Linux https://linuxconfig.org/introduction-to-nmap-on-kali-linux
Beispielhafter Schnellscan des eigenen LAN: nmap -F -T4 192.168.1.0/24
Für nmap gibt es grafische Oberflächen wie zenmap (Anm.: allerdings steckt Zenmap aktuell mit Python 2 in einem Dilemma, da z.B. Ubuntu 20.04 nicht mehr Python 2 unterstützt und Python 3 bereitstellt. Manuelle Installanleitungen sind verfügbar.).
nproc
Zeigt die Anzahl der verfügbaren Prozessoren
(inkl. Hyperthreading) an. Kürzer/Knackiger
als lscpu
oder cat /prod/cpuinfo
pidof
Liefert die Prozess-IDs eines namentlichen übergebenen
Programms: pidof firefox
powertop
Listet (auf Notebooks) die energieverbrauchenden Prozesse auf und lässt interaktiv Anpassungen zu.
Tipp
Von Argument --auto-tune
zur automatischen Optimierung aller Prozesse sollte man Abstand nehmen.
Sonst könnte man schnell auch mal ohnen Netzwerk dastehen!
pstree
Der Klassiker für die Prozessbäume: pstree -p
pssh pscp
Python-Skripte für das Parallel Scripting mit SSH (Tools: ssh, scp). Die Helferleien sind vor Allem in Container-Umgebungen sinnvoll und müssen oft erst über das (gleichnamige) Paket pssh nachinstalliert werden.
Tools Q - T¶
rsync
Das Tools rsync kann Daten zwischen lokalen und Netzwerkressourcen abgleichen bzw. synchronisieren.
In Zusammenarbeit mit SSH (oder einem spzeziellen rsync Daemon) werden hierbei nur die Datendifferenzen übertragen, was das System sehr effizient macht.
Für das Tool gibt es diverse GUIs: grsync, LuckyBackup, Unison, rsnapshot, Back In Time, …
Hinweis
Bei der Syntax für rsync sollten die abführenden Schrägstriche bei Ordnern beachtet werden.
Die folgenden beiden rsync Aufträge erledigen dieselbe Aufgabe:
rsync -a /boot/grub /data/backup
rsync -a /boot/grub/ /data/backup/grub
Weiterführender Link zu rsync: How to Transfer Files with Rsync over SSH
Screenshots
Diverse Techniken für die Erstellung von Screenshots per Tastendruck.
Übersicht auf Arch Wiki: https://wiki.archlinux.de/title/Screenshot_erstellen
Hier die Basistools ohne Desktop-Verwandschaft:
scrot
import (Paket: imagemagick)
xwd (Paket: xorg-apps)
Special: Screenshots in textbasierten echten Konsolen mit fbgrab und setterm -dump …
chvt 3; sleep 2; fbgrab /home/bild.png # tty2
# Ubuntu/sudo style: erst einen Aufruf mit sudo Authentifizierung dann
chvt 3; sleep 2; sudo fbgrab /home/bild.png # tty2
chvt wechselt in die zweite Konsole, sleep pausiert zwei Sekunden, um den Bildaufbau auf jeden Fall abzuwarten, und fbgrab erstellt das Bild in /home/bild.png
Oder alternativ als root oder mit sudo ausführen:
setterm -dump 2 -file screenshot2.txt
SHA Prüfsummentools
Für unterschiedliche SHA-Algorithmen:
sha1sum
sha224sum
sha256sum
sha384sum
sha512sum
Am besten natürlich nicht nur Prüfsummen - bei relevanten ISO-Downlaods - checken, sondern am Besten auch gleich mit entsprechender Signatur überprüfen.
Beispielhafte Vorgehensweise: https://linuxmint.com/verify.php
sl
Ich mag einfach Fun in der Konsole - man tippt ständig den ls
-Befehl und dann kann man sich
ja auch mal mit sl
vertippen.
Und dann zeigt einem die Steaming Locomotive, dass man es vielleicht etwas langsamer angehehen sollte ;-)

sl - Steaming Locomotive (Typo bei ls)¶
S.M.A.R.T.
Die SMART-Tools häufig in Paket smartmontools (und auch grafische Oberfläche gsmartcontrol) verfügbar.
In der Konsole - als einfacher Test: sudo smartctl -H /dev/sda
sudo smartctl -H /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-40-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
source bzw. .-Operator
Mit source (oder alternativ dem .
-Operator aka Dot-Operator) laden wir Ausführkommandos in der aktuellen Shell -
also ohne Subshell!
Wichtig für Neuladen der Bash-Konfig: source ~/.bashrc
bzw. . ~/.bashrc
speaker-test
Ein Tool aus dem Paket alsa-utils: speaker-test -t wav -c2
Sprachausgabe (hier: Test mit WAV-Datei an 2 Channels) mit Strg + C abbrechen.
Hinweis
Bei Tests mit Hyper-V-Maschinen bedenken: No Sound!
split
Mit split kann man größere Dateien in kleinere zerlegen: split -C 4G sicherung.tar.gz DVD.
Die erzeugten Dateien heißen hier: DVD.aa, DVD.ab und so fort. Der Zusammenbau kann mit cat
erfolgen.
ss
Die moderne Ausgabe für Sockets Statistics - also dem Tool netstat sehr ähnlich, das häufig auf Distros nachinstalliert werden muss.
Liste für lauschende Ports: ss -ltpn
Liste alle aktiven TCP-Sockets für IPv4: ss -4 -t -a
stat
Die Ausgaben von Statistik zu Filesystem-Einträgen.
$ stat ~/.bashrc
Datei: /home/UserName/.bashrc
Größe: 4149 Blöcke: 16 EA Block: 4096 Normale Datei
Gerät: 802h/2050d Inode: 1975282 Verknüpfungen: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 1000/ UserName) Gid: ( 1000/ UserName)
Zugriff : 2020-07-18 19:35:13.605110813 +0200
Modifiziert: 2020-05-30 13:33:33.680894934 +0200
Geändert : 2020-05-30 13:33:33.684894917 +0200
Geburt : -
tac
Genau wie cat aber eben umgekehrt - umgedrehte Reihenfolge in Ausgabe.
tail
In Zeiten moderner Journale und Loggings nicht mehr SOOO spannend - aber immer noch gut:
tail -f /var/log/syslog
beobachtet die Datei real time
tar
Der Klassiker in der Konsole zum Archivieren und Packen. Aufgrund des Alters des Tools mit
verwirrend vielen unterschiedlichen Aufrufkombinationen: mit und ohne -
, Reihenfolge der Argumente, …
Hier meine Kurzanleitung für die tägliche Praxis mit einer ersten Übersicht über die Argumente für tar:
x - Extrahieren / Expand
c - Create / Erstellen
v - Verbose (dt.: geschwätzig; Infos in Konsole zeigen)
z - Komprimierung mit GZip
f - Filename / Datei
j - Komprimierung mit BZ2
C - Angabe eines Entpackziels:
tar ... -C /tmp
Beispiel: Archiv eines Home-Dir erstellen (möglichst von außerhalb)
tar cvzf userxyz-$(date -I).tar.gz /home/userxyz
Archiv wiederherstellen:
tar xvzf userxyz-20200620.tar.gz
(im Ordner /home
)
Sicherungsarchiv entpacken zum Analysieren / einzeln Ordner/Dateien holen:
tar xvzf userxyz-20200620.tar.gz -C /tmp
tee
Gleichzeitige Ausgabe im Standardausgabekanal und Ausgabe/Umleitung in Datei: ls -l | tee verzeichnis.txt
test bzw. [ ausdruck ]
Wichtige Technik für Shell-Skripte mit ausführlichen Abfrage- und Bedingungsauswertungen.
Neben einfachen Vergleichsoperatoren (-eq
, -ne
, -gt
, -lt
, …) sind vor Allem
Möglichkeiten zur Abfrage auf Datei- und Ordnerebene wichtig.
[ -d … ] - ist Verzeichnis?
[ -e … ] - Datei existiert?
[ -f … ] - einfache Datei (File)?
[ -x … ] - ausführbare Datei (File)?
[ ! Bedingung ] - wahr/true, wenn die Bedingung nicht erfüllt ist
[ Bedingung1 -a Bedingung2 ] - wahr/true, wenn beide Bedingungen erfüllt sind (und / and)
[ Bedingung1 -o Bedingung2 ] - wahr/true, wenn mindestens eine der Bedingungen erfüllt ist (oder / or)
Die Bash kennt außerdem noch den [[ ... ]]
Ausdruck, der mit Mustern wie *
, regulären Mustern
und den Vergleichsoperatoren &&
und ||
umgehen kann. Innerhalb von [[ ... ]]
werden Variablen nicht ausgewertet!
time
Mit time kann man Ausführzeiten von Kommandos in der Shell ermitteln lassen.
Beachten: Es laufen (normalerweise) parallel noch andere Prozesse und es kann auch zu Wartezeiten bei der Abarbeitung eines Prozesse kommen.
timedatectl
Zeigt und verändert die Zeitzone des Linux-Systems - Konfiguration: /etc/localtime
(Achtung: binäre Datei - kein roher Text!)
$ timedatectl
Local time: So 2020-07-26 12:45:25 CEST
Universal time: So 2020-07-26 10:45:25 UTC
RTC time: So 2020-07-26 10:45:25
Time zone: Europe/Berlin (CEST, +0200)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Und immer: siehe Man-Page für Argumente zum setzen von Eigenschaften.
toilet
Eine figlet (Ascii-Art) Alternative.
Skript zur Darstellung von Figlet-Fonts:
#!/bin/sh
# Prints "JoeB" using every font installed on /usr/share/figlet
# Written by Sandro Tosi <matrixhasu@gmail.com>
# Modified by Jonathan McCrohan <jmccrohan@gmail.com>
for file in /usr/share/figlet/*.tlf ; do
FONT=`basename $file | sed 's|\(.*\)\.\(.*\)|\1|'`
printf "Font: $FONT\n"
figlet -f $FONT JoeB
printf "\n"
done
Beispiel: toilet -f smmono12 "Joe Brandes"

Toilet (Figlet) Beispiel¶
Da lässt sich viel mit rumspielen.
top bzw. htop
Das Tool für die Table of Processes - in den verbesserten Varianten als htop, btop oder glances (mit gleichnamigen Paketen und Services!) und mehr technischen Auswertungen und Fähigkeiten.
Spezielle Tools: iotop (I/O-Aktivitäten) und powertop (Energieverbrauch - bei Notebooks - analysieren)
tr
Das Trimmen von Dateien - hier wieder das Beispiel mit dem PATH:
$ echo $PATH | tr ":" "\n"
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
tree
Die Ausgabe von Verzeichnissen als Baumstrukturen aus dem gleichnamigen Paket. Zu beachten: teils unterschiedliche Implementierungen und Argumente. Also: immer wieder die Man-Page beachten.
$ tree -d -L 1
.
├── _build
├── Chapters
├── configs
├── Pics
├── _static
└── _themes
Beispiel: nur Ordner (-d
) des ersten Levels (erste Ordnerebene -L 1
) ausgeben.
Tipp
Super für Dokumentationen! Einfach mittels >
in Textdateien umleiten.
tty
Auf welcher Konsole befinde ich mich gerade. Bei grafischen Oberflächen siehe z.B. /dev/pts/3
oder ähnlich.
type
Herausfinden, ob ein Tool zur Shell gehört, eine selbst definierte Funktion oder ein Alias darstellt.
$ type alias
alias ist eine von der Shell mitgelieferte Funktion.
$ type jbwallpaper
jbwallpaper ist ein Alias von »/home/joeb/Bilder/wallpaper/wallpaper.sh«.
$ type whereis
whereis ist /usr/bin/whereis
Tools U - Z¶
uname
Anzeigen von Kernel und Linux-Distro-Informationen.
$ uname -a
Linux buero-2018 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ uname -r
5.4.0-42-generic
$ uname -sr
Linux 5.4.0-42-generic
Insbesondere der Aufruf uname -r
ist von besonderer Bedeutung bei Kernelprogrammierungen und Eigenkompilierungen von Kernel und Software.
$ modinfo video
filename: /lib/modules/5.4.0-42-generic/kernel/drivers/acpi/video.ko
license: GPL
description: ACPI Video Driver
...tbc...
Hier: Video-Kernel-Driver (Module) für Kernel ./5.4.0-42-generic/kernel/...
update-alternatives oder auch alternatives
Standdards konfigurieren - z.B. für den editor nach Wahl:
$ update-alternatives --list editor
/bin/ed
/bin/nano
/usr/bin/codium
/usr/bin/mcedit
/usr/bin/vim.basic
/usr/bin/vim.tiny
Für die Konfiguration gerne auch interaktive:
$ update-alternatives --config editor
Es gibt 6 Auswahlmöglichkeiten für die Alternative editor (welche /usr/bin/editor bereitstellen).
Auswahl Pfad Priorität Status
------------------------------------------------------------
* 0 /bin/nano 40 automatischer Modus
1 /bin/ed -100 manueller Modus
2 /bin/nano 40 manueller Modus
3 /usr/bin/codium 0 manueller Modus
4 /usr/bin/mcedit 25 manueller Modus
5 /usr/bin/vim.basic 30 manueller Modus
6 /usr/bin/vim.tiny 15 manueller Modus
Drücken Sie die Eingabetaste, um die aktuelle Wahl[*] beizubehalten,
oder geben Sie die Auswahlnummer ein:
uptime
Eine verschönerte Ausgabe von /proc/uptime
.
watch
Das Tool watch führt angegebene Kommandos aus und beobachtet den Status der Ausgaben.
Beispiel: watch -d 'ps aux | grep ssh'
wc
Zählt Zeilen, Wörter oder Zeichen in Textdateien/Ausgaben. Beispiele:
ps aux | grep ssh | wc
find -maxdepth 1 -type f | wc -l
whoami, who, w
Mit drei immer kürzeren Aufrufen / Tools steigen die Infos in den Ausgaben: Linux/Unix Humor
xargs
Weiterleitung von Pipeline-Daten an ausführende Tools/Programme. Hier mal ein kleines Beispiel aus den
LPIC-Seminaren: cut -d " " -f1 /var/log/apache2/access.log | sort | uniq | xargs -n1 host
Analyse: aus einer Apache-Webserver-Log-Datei wird mit Leerzeichen getrennt (cut) und die erste Spalte (-f1) ausgeschnitten.
Diese Zeilen werden sortiert (sort) und dann als Einzelwerte genutzt (uniq). Die Werte werden dann dem Tool host
für eine
Netzwerkanalyse übergeben.
xhost
Solange wir noch X-Server nutzen (siehe Wayland) werden mit den xhost-Befehlen die Zugriffe auf diesen X-Service auch von anderen Maschienen als localhost möglich gemacht.
xinput
Das Tool listet die Eingabegeräte des Systems auf und hilft somit bei der Identifizierung und Konfiguration im X-Window-System.
xz
Mit dem Kompressionalgorithmus BZ2 hat man schon sehr gute Verkleinerungen bei Archiven. Diese kann man mit dem Tool xz noch weiter optimieren.
Das Tool xz hat eine Unmenge an verschiedenen Argumenten und Schaltern für die Optimierungn von Pack/Entpack-Szenarien.
Insbesondere bei sehr großen Archiven (siehe z.B. Virtuelle Maschinen) kann der Schalter -T ...
helfen:
-T 0
- nutze so viele CPU-Threads wie möglich-T 6
- bitte benutze 6 CPU-Threads
zenity
$ datum=$(zenity --calendar --title 'Bitte geben Sie Datum an:')
$ pw=$(zenity --password --title 'Passwort bitte ...')
Bash¶
Die Bash - als defakto Standard-Shell - ist die erste Shell-Anlaufstelle für Linux-User.
Gerne nutzen wir die grafischen Oberflächen und Tools unter dem Desktop unserer Wahl. Aber wenn es darum geht unser System sauber zu verwalten und zu admininstrieren, dann wenden wir uns immer einer Shell zu.
Und natürlich gibt es auf Linux-Systemen immer auch die Möglichkeit alternative Shells oder Terminals zu installieren und nach eigenen Wünschen zu konfigurieren.
In der Interaktion mit den Shells gibt es hier nur wenige Abweichungen zu beachten.
Ganz anders sieht das allerdings dann später beim Shellscripting aus. Hier können sich die Shells sehr unterschiedlich verhalten und sogar Fehler beim Ausführen zeigen.
Für einen kurzen Überblick über die aktuellen verfügbaren Shells auf einem System:
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/zsh
/usr/bin/zsh
/usr/bin/tmux
Auf dem hier dargestellten System wurde die zsh und tmux bereitgestellt.
Wir konzentrieren uns aber auf die Bourne Again Shell BASH den Nachfolger der sh.
Hinweis
Ich habe mich in den letzten Jahren zur Nutzung der ZSH entschlossen. Aber wie immer bei Linux: wir dürfen auf unseren Systemen selber wählen, oder natürlich auch mehrere Shell nutzen.
Wer gerne unterschiedliche Shells nutzt, aber die Erscheinung und Nutzung einheitlich halten möchte, der kann sich ja mal mit dem Tools Starship beschäftigen. Diese Aufrüschung des Terminals macht nur in Terminalemulatoren (gnome-terminal, konsole, xterm, urxvt, st, alacritty, kitty) inklusive sogenannter Nerdfonts einen Sinn - das rohe TTY lässt man oft einfach.
Fangen wir erst einmal mit zwei meiner Basistools an: für die Arbeit in der Shell ist eine effiziente Suche von Dateien/Ordner und das Finden von Befehlen sehr wichtig!
fzf¶
Das Suchen und Finden von Dateien und Ordnern spielt auf vielen Systemen eine große Rolle.
Und natürlich kann man diese Basisfunktionalität auch über die Basis-Shell und die entsprechenden CLI-Aufrufe durchführen.
Aber insbesondere die Rekursive Suche die per Standard in den Shells und eben auch in der Bash integriert ist erfüllt nur Mindestansprüche an die History-Recherche.
Man wünscht sich eine funktionsreichere Suchtechnik.
Die rekursive Suche mit Strg + r
und das Suchen von Dateien und
Ordnern mit Strg + t
auf die
richtige Weise mit dem Fuzzy Finder.
Quelle für Tool fzf: Github Repo FZF (mit Erläuterungen für die Betriebssystemeinbindungen)

FZF - Fuzzy Finder mit Datei-/Ordnersuche¶
Einfache Inbetriebnahme bei Debian: apt install fzf
Am Besten schaut man für die Einbindung von FZF in die
Paketinfos: apt show fzf
Dort findet man dann Distro/Shell-Erläuterungen:
/usr/share/doc/fzf/README.Debian
. Für die Einbindung
in die Bash benötigen wir die folgenden zwei Zeilen:
source /usr/share/doc/fzf/examples/key-bindings.bash
source /usr/share/doc/fzf/examples/completion.bash
Für die Konsoleros hier ein Einzeiler der die Arbeit gleich in einem Schritt erledigt:
head /usr/share/doc/fzf/README.Debian |
grep source |
sed 's/^[[:blank:]]*//g' >> ~/.bashrc
Danach natürlich nicht das Sourcing der Bashrc vergessen
(z.B.): source ~/.bashrc
Das mitgebrachte Manual man fzf
erläutert wie immer die
hier sehr umfangreiche Nutzung.
Als kleiner Appetizer: fzf --preview='less {}'
(siehe
Youtube Vid zu FZF )
Debian: fzf/ripgrep/bat¶
Die folgende Kurzanleitung zeigt Umsetzungen für Debian!
einfache Integration Fuzzy Finder
fzf
und Ripgreprg
Aufruf für gestylte Ausgaben mit Tool
batcat
(sonst bat).
Kurzanleitung:
Falls noch nicht geschehen:
apt install fzf ripgrep bat
Eine beispielhafte Konfiguration in
~/.bashrc
integrieren/einkopieren# FZF - RIPGREP - bat/batcat (on Debian Distro) # ============================================================================= # https://github.com/junegunn/fzf # fzf environment: . /usr/share/doc/fzf/examples/key-bindings.bash . /usr/share/doc/fzf/examples/completion.bash # # fzf exports: export FZF_DEFAULT_OPTS='--height 40% --border --preview="batcat --style numbers,changes --color=always {}"' # use ripgrep with FZF instead of find # export FZF_DEFAULT_COMMAND='find ~ -name .git -prune -o -name tmp -prune -o -type f,d -print' export FZF_DEFAULT_COMMAND='rg --files --hidden -g !.git/' # more commands: export FZF_ALT_C_COMMAND='find .' export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" # configuration for ripgrep export RIPGREP_CONFIG_PATH="$HOME/.ripgreprc" # ============================================================================= # CDD - Change Directory with Dialogue alias cddhome="cd ~ && cd \$(find . -type d | fzf)" alias cddprojects="cd /var/www/html && cd \$(find . -type d | fzf)"
NUTZEN! Per Tastenkombinationen oder Alternativen Aufrufen!
Es folgen noch ein paar Hinweise.
Vorschau
Diese Konfigurationen erlaubt die Vorschau auf Textformate inklusive Zeilennummerierung und Syntaxhighlighting für bekannte Formate.
In der Priview lässt sich auch Scrollen:
Rollrad der Maus bei entsprechendem Fensterfokus
Strg + Up / Down mit Cursortasten
Alias Beispiele: CDD - Change Directory with Dialogue
Solche Anwendungen setze ich in allen meinen Shells um. Natürlich
kann man klever tippen oder weitere Tools benutzen (siehe z
).
Aber wenn man schon alles beisammen hat?
Die Aliase cddhome
und cddprojects
erlauben den schnellen
Wechsel über die Konsole in gewünschte Ordner.
Und man erkennt an der Gleichförmigkeit der Alias auch schnell, dass man diese durch eine Allgemeine Shell Funktion ersetzen könnte.
Ripgrep Konfiguration
Wenn das Tool Ripgrep (rg) genutzt wird und man die Konfiguration setzt,
dann kann es Meldungen zu einer fehlenden Konfigurationsdatei .ripgreprc
geben.
Hinweise zur ripgrep Konfiguration:
~/.ripgreprc
# Don't let ripgrep vomit really long lines to my terminal, and show a preview.
--max-columns=150
--max-columns-preview
# Add my 'web' type.
--type-add
web:*.{html,css,js}*
# Using glob patterns to include/exclude files or folders
--glob=!git/*
# or
--glob
!git/*
# Set the colors.
--colors=line:none
--colors=line:style:bold
# Because who cares about case!?
--smart-case
Man kann aber auch einfach eine leere ~/.ripgreprc
bereitstellen.
Suse: fzf/ripgrep/bat¶
Die folgende Kurzanleitung zeigt Umsetzungen für Suse / openSUSE!
einfache Integration Fuzzy Finder
fzf
und Ripgreprg
Aufruf für gestylte Ausgaben mit Tool
bat
(sonst auch mal batcat).
Kurzanleitung:
Falls noch nicht geschehen: (für die FZF Bereitstellung nutzen wir Git)
zypper install ripgrep bat git
Wir stellen fzf direkt aus dem Repo des Entwicklers bereit und nutzen eine beispielhafte Anleitung im Netz. Wir werden die Git Clone Bereitstellung nutzen: How to Install & Use fzf Command-Line Fuzzy Finder in Linux
$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf $ ~/.fzf/install
Es ergibt sich eine beispielhafte Konfiguration in
~/.bashrc
:# aus der Git Installation: [ -f ~/.fzf.bash ] && source ~/.fzf.bash # fzf exports: export FZF_DEFAULT_OPTS='--height 40% --border --preview="bat --style numbers,changes --color=always {}"' # use ripgrep with FZF instead of find # export FZF_DEFAULT_COMMAND='find ~ -name .git -prune -o -name tmp -prune -o -type f,d -print' export FZF_DEFAULT_COMMAND='rg --files --hidden -g !.git/' # more commands: export FZF_ALT_C_COMMAND='find .' export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" # configuration for ripgrep export RIPGREP_CONFIG_PATH="$HOME/.ripgreprc" # ============================================================================= # CDD - Change Directory with Dialogue alias cddhome="cd ~ && cd \$(find . -type d | fzf)" alias cddprojects="cd /var/www/html && cd \$(find . -type d | fzf)"
Danach einfach in Betrieb nehmen mit
source ~/.bashrc
.
Es folgen noch ein paar Hinweise.
Vorschau
Diese Konfigurationen erlaubt die Vorschau auf Textformate inklusive Zeilennummerierung und Syntaxhighlighting für bekannte Formate.
In der Priview lässt sich auch Scrollen:
Rollrad der Maus bei entsprechendem Fensterfokus
Strg + Up / Down mit Cursortasten
Alias Beispiele: CDD - Change Directory with Dialogue
Solche Anwendungen setze ich in allen meinen Shells um. Natürlich
kann man klever tippen oder weitere Tools benutzen (siehe z
).
Aber wenn man schon alles beisammen hat?
Die Aliase cddhome
und cddprojects
erlauben den schnellen
Wechsel über die Konsole in gewünschte Ordner.
Und man erkennt an der Gleichförmigkeit der Alias auch schnell, dass man diese durch eine Allgemeine Shell Funktion ersetzen könnte.
Ripgrep Konfiguration
Wenn das Tool Ripgrep (rg) genutzt wird und man die Konfiguration setzt,
dann kann es Meldungen zu einer fehlenden
Konfigurationsdatei .ripgreprc
geben.
Hinweise zur ripgrep Konfiguration:
~/.ripgreprc
# Don't let ripgrep vomit really long lines to my terminal, and show a preview.
--max-columns=150
--max-columns-preview
# Add my 'web' type.
--type-add
web:*.{html,css,js}*
# Using glob patterns to include/exclude files or folders
--glob=!git/*
# or
--glob
!git/*
# Set the colors.
--colors=line:none
--colors=line:style:bold
# Because who cares about case!?
--smart-case
Man kann aber auch einfach eine leere ~/.ripgreprc
bereitstellen.
z - Change Directory¶
Irgendwann wird man es leid immer dieselben Verzeichnisse aufzurufen und mit Tab zu vervollständigen.
Hinweis
Der Fuzzyfinder FZF kann hier selbstverständlich über seine intelligente History und Ordnersuche genutzt werden!
# bash | zsh - CDD: Change Directory with Dialogue
alias cdd="cd ~ && cd \$(find . -type d | fzf)"
Über viele Jahre hat hier das Tool j - autojump
gute Dienste geleistet.
Mit z - jump around
geht es noch schlanker und schneller.
Quelle für Tool z: Github Repo rupa/z (also bitte Software git bereitstellen)
Ich stelle mir das Git-Repo für z
gerne einfach im Home-Dir ~
bereit:
cd ~
git clone https://github.com/rupa/z.git
echo 'source ~/z/z.sh' >> ~/.bashrc
Und natürlich wieder die .bashrc
neu einladen: source ~/.bashrc
.
Jetzt muss man erst einmal ein paar klassische cd
für Verzeichnisse aufbauen. Dann merkt und gewichtet
sich das Tool z
diese Pfade und man kann
mit z
hierüber eine Übersicht anzeigen lassen oder dann
mit z teilpf
und Tab schnell in die bekannten Pfade wechseln.
Starship.rs¶
Mit dem in Rust geschriebenen Starship-Projekt kann man sich eine Befehlszeile mit einer einzigenen Konfigurationsdatei ~/.config/starship.toml
definieren. Diese Konfiguration lässt sich dann per One-Liner in der jeweiligen Shell-Konfiguration (Bash, Zsh, Fish, PowerShell, …) einfügen.

Starship.rs¶
Kurzanleitung: (Bitte gerne das Skript vorab herunterladen und analysieren!)
sh -c "$(curl -fsSL https://starship.rs/install.sh)"
Einbinden in die Bash:
eval "$(starship init bash)"
Aber wie gesagt: Starship lässt sich in diverse Shell von diversen OS integrieren: siehe Github-Projektseite zu Starship
Als Trainer stelle ich gerne auch eine erste Konfigurationsdatei für Starship ( ~/.config/starship.toml
) bereit.
Letzte Anmerkung: für die Darstellung von Ligaturen, Wingdings oder gar Emojis sind spezielle Schriften (engl.: Fonts) nötig.
Die folgenden Abschnitte sollen verschieden Techniken rund um die BASH darstellen, anbieten und vertiefen.
Bash Shortcuts¶
bash Tastenkürzel machen das Leben in der Konsole einfacher ;-)

Bash Tastenkürzel (als Cheat Sheet)¶
Cursorsteuerung:
Strg - A Cursor am Zeilenanfang positionieren
Strg - E Cursor am Zeilenende positionieren
Strg - B Cursor, ohne zu löschen, ein Zeichen nach links bewegen
Strg - F Cursor, ohne zu löschen, ein Zeichen nach rechts bewegen
DEL Das Zeichen links vom Cursor wird gelöscht
Strg - D Das Zeichen unter dem Cursor wird gelöscht
Strg - U Vom Cursor bis zum Zeilenanfang alle Zeichen löschen
Strg - K Vom Cursor bis zum Zeilenende alle Zeichen löschen
Wortsteuerung:
Esc b Ein Wort zurück bewegen
Esc f Ein Wort vor bewegen
Strg - W Das Wort links vom Cursor löschen
Esc d Das Wort unter dem Cursor löschen
Strg - Y Das zuletzt gelöschte Wort zurückholen
Historysteuerung:
Strg - P Die vorherige Zeile zurückholen
Strg - N Die nächste Zeile zurückholen
Strg - R Rückwärts suchen
Esc < Die erste Zeile der History hervorholen
Esc > Die letzte Zeile der History hervorholen
Zeichensteuerung:
Strg - T Vertauscht das unter dem Cursor stehende Zeichen mit seinem linken Nachbarn
Strg - V Das nächste eingegebene Zeichen wird maskiert, d. h. seiner besonderen Bedeutung beraubt
Prozesssteuerung:
Strg - C Unterbricht das gerade laufende Kommando
Strg - S Bildschirmausgabe anhalten - siehe Problem mit Rekursiver Suche!
Strg - Q Gehaltene Bildschirmausgabe fortsetzen
Bash .bashrc¶
Ich werde mich auf die benutzerspezifische Konfigurationsdatei für die Bash (Bourne again Shell) konzentrieren.
Die genaue Abfolge - und das Vorhandensein - diverser Konfigurationsdateien und Mechanismen kann bei Distros abweichen und ist nicht immer gleich.
Für die Systemkonfiguration sind diverse weitere Konfigurationsdateien in /etc
zu finden:
/etc/profile
- systemweite Konfiguration von Shells wie Bash, Korn-Shell oder Ur-ahn Sh/etc/profile.d/
- spezifische Zusatzskripte; z.B.bash-completion.sh
(Ubuntu/s, Mint)/etc/bash.bashrc
- systemweite Bash-Konfiguration (alle Benutzer)
Die Benutzer verfügen über:
$HOME/.profile
- wieder für mehrere Shell nach Sh-Technik: sh, ksh, bash, zsh, …$HOME/.bashrc
- persönliche Bash-Konfiguration (alternativ bei zsh:$HOME/.zshrc
)
Eine Basisversion der .bashrc
ist bei den Distros jeweils im Skelett für neue Benutzer zu finden: /etc/skel/.bashrc
.
Ich lagere meine eigenen Bash-Extras gerne in einer Zusatzdatei aus, die ich dann einfach am Ende der Standard-.bashrc
einfügen lasse:
###########################################################
# MY-STUFF - please consider the software in need:
# for powerline-go: go and git (see software baseinstalls)
###########################################################
if [ -e $HOME/.bashrc_JB_MY-STUFF ]; then
source $HOME/.bashrc_JB_MY-STUFF
echo 'Extras for .bashrc loadad with .bashrc_JB_MY-STUFF'
fi
Für eine beispielhafte Ergänzung der Standard-.bashrc
hier MY-STUFF-Version als Beispiel:
# .bashrc_JB_MY-STUFF - extra stuff expanding the standard .bashrc
# ================================================================
# my own pager with most: sudo apt install most
# or manual color stuff for less and man-pages
if [ -x "$(command -v most)" ]
then
export PAGER=most
else
# Tipp mit Farbe für less:
# https://www.linux-community.de/blog/bunte-manpages-anzeigen-mit-most-und-less/
export LESS_TERMCAP_mb=$(printf "\e[1;31m") # Blinken
export LESS_TERMCAP_md=$(printf "\e[1;31m") # Fett
export LESS_TERMCAP_me=$(printf "\e[0m") # Modus Ende
export LESS_TERMCAP_se=$(printf "\e[0m") # Ende Standout-Modus
export LESS_TERMCAP_so=$(printf "\e[1;44;33m") # Start Standout-Modus (Info-Kasten)
export LESS_TERMCAP_ue=$(printf "\e[0m") # Unterstreichen Ende
export LESS_TERMCAP_us=$(printf "\e[1;32m") # Unterstreichen Anfang
fi
# my own aliases - joebstyle
alias jbdf='df -h | grep ^/dev | grep -v ^/dev/loop'
# sudo apt install fortunes cowsay tty-clock
if [ -x "$(command -v cowsay)" ] && [ -x "$(command -v fortune)" ]; then
# Bit of Fun with cowsay and fortune cookies
alias jbcowsay='while true; do fortune|cowsay -f tux && sleep 20; done'
fi
if [ -x "$(command -v tty-clock)" ]; then
alias jbtty-clock="tty-clock -s -f '%A, %d.%m.%Y'"
fi
# more fun with bat/batcat instead of cat
# sudo apt install bat # ubuntu 20.04: Befehl dann batcat - Manpage auch mit batcat
if [ -x "$(command -v batcat)" ]
then
alias jbcat="PAGER=less;batcat"
fi
# individuelle Wallpaper auf 4 Arbeitsflächen!
if [ -x "$(command -v $HOME/Bilder/wallpaper/wallpaper.sh)" ]; then
alias jbwallpaper="$HOME/Bilder/wallpaper/wallpaper.sh"
fi
# Projektordner mit VSCODIUM aka codium starten
if [ -x "$(command -v codium)" ]; then
alias jbcode="codium . &"
fi
# Passwords mystyle with Tool makepasswd: 15 Characters out of string
if [ -x "$(command -v makepasswd)" ]; then
alias jbmakepasswd="makepasswd --chars 15 --string 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYZ#+-()=}][{;:'"
fi
# ===========================
# Powerline-Go mit golang-go
# ===========================
# in case of problems with https and/or Security stuff:
# git config --global http.sslVerify false
# and:
# go get -u -insecure github.com/justjanne/powerline-go
# Default stuff:
# ==============
# Remember: install the powerline-fonts aka fonts-powerline and the go-stuff
# https://awesomeopensource.com/project/justjanne/powerline-go
# https://github.com/justjanne/powerline-go
# folder ~/go creating with (needs go and git (needs go and git):
# go get -u github.com/justjanne/powerline-go
export GOPATH="$HOME/go"
function _update_ps1() {
PS1="$($GOPATH/bin/powerline-go -error $? -newline -theme default -shell bash -modules-right time)"
}
if [ "$TERM" != "linux" ] && [ -f "$GOPATH/bin/powerline-go" ]; then
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
# Finish up with the terminals
# Colors for the console with solarized dark
# eval $(dircolors -b ~/.bash_dircolors_solarized_dark)
if [ $TERM == "xterm-256color" ] && [ -e ~/.bash_dircolors_solarized_dark ]
then
eval $(dircolors -b ~/.bash_dircolors_solarized_dark)
else [ $TERM = "linux" ] && [ -e ~/.bash_dircolors_solarized_ansi ]
eval $(dircolors -b ~/.bash_dircolors_solarized_ansi)
fi
# nodejs stuff
# ============
if [ -x $HOME/opt/nodejs/bin/node ]; then
export PATH=$HOME/opt/nodejs/bin:$PATH
fi
# use npm gulp tar version of nodejs
if [ -f "/home/joeb/opt/nodejs/bin/gulp" ]; then
alias gulp='/home/joeb/opt/nodejs/bin/gulp'
fi
# Home-Dir bin - if not already set by Distro
# ============
echo $PATH | egrep "$HOME/bin" >> /dev/null
if [ $? -ne 0 ] && [ -d "$HOME/bin" ]; then
export PATH=$HOME/bin:$PATH
fi
# Example for FZF with git
# see: https://github.com/junegunn/fzf/wiki/examples#git
# Attention: Software need to be prepared / installed
# fzf, git, xclip and
# diff-so-fancy (Perl Script: https://github.com/so-fancy/diff-so-fancy
# ============================================================================
alias glNoGraph='git log --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr% C(auto)%an" "$@"'
_gitLogLineToHash="echo {} | grep -o '[a-f0-9]\{7\}' | head -1"
_viewGitLogLine="$_gitLogLineToHash | xargs -I % sh -c 'git show --color=always % | diff-so-fancy'"
# fcoc_preview - checkout git commit with previews
fcoc_preview() {
local commit
commit=$( glNoGraph |
fzf --no-sort --reverse --tiebreak=index --no-multi \
--ansi --preview="$_viewGitLogLine" ) &&
git checkout $(echo "$commit" | sed "s/ .*//")
}
# fshow_preview - git commit browser with previews
fshow_preview() {
glNoGraph |
fzf --no-sort --reverse --tiebreak=index --no-multi \
--ansi --preview="$_viewGitLogLine" \
--header "enter to view, alt-y to copy hash" \
--bind "enter:execute:$_viewGitLogLine | less -R" \
--bind "alt-y:execute:$_gitLogLineToHash | xclip"
}
In diesem Beispiel mal ein paar Aufrufe und Nutzungen in der Bash. Das lässt sich dann gerne einmal weiter Richtung Bash-Skripting erweitern.
Bash Powerline¶
Erinnerung: Wenn die Aufwertung der gewünschten Shell einfach mal schnell gehen soll, dann bitte zum Projekt Starship.rs greifen.
Die Umsetzungen in Shells mit Powerline (oder auch Powerlevel) Techniken ist viel aufwändiger aber eben auch mächtiger.
Die Bash (als Shell-Beispiel) hier also in Powerline-schön und auch noch superfunktionell für Versionsverwaltung Git:

Bash mit Powerline-Go und Git-Unterstützung¶
Und selbstverständlich lassen sich auch die anderen Shells (zsh, fish, dash, …) auf diese Art verschönern.
Anleitung nach
Hinweis
Die genauen Anleitungsschritte können je nach Distro leicht abweichen.
Wir benötigen Git und die Powerline-Fonts: (folgende Hinweise: Debian 9 / 10)
apt intall fonts-powerline git
Wir benötigen ebenfalls golang-go - also die moderne Skriptsprache Go:
Z.B. Internet-Recherche mit debian 10 go install suchen
oder einfach mal Paketsuche golang-go direkt in Distros (Anm.: Aktualität GO-Versionen checken)
und mit go version
Funktionalität analysieren.
Hinweis
In Ubuntu bzw. Ubuntu-Derivaten reicht ein sudo apt install golang-go
.
Für Debian(s) wird es etwas aufwändiger und führt zum Beispiellink mit Anleitungen nach Internetrecherche (für Debian 9/10): https://linuxize.com/post/how-to-install-go-on-debian-10/ schlägt vor:
Alle Arbeiten im Standardverzeichnis /home/username
(also $HOME
)
# Download / Bereitstellung eines Go-Tar.Gz-Archivs
# Old/Google-DL: wget https://dl.google.com/go/go1.13.linux-amd64.tar.gz
# Aktuelles Go von golang.org:
wget https://golang.org/dl/go1.15.6.linux-amd64.tar.gz
# Archiv in /usr/local entpacken - mit root-Rechten
tar -C /usr/local -xzf /home/username/go1.15.6.linux-amd64.tar.gz
# in .profile oder .bashrc des Users eintragen - Pfad zu GO-Binarys komplettieren
export PATH=$PATH:/usr/local/go/bin
# Testen - nach Bash-Aktualisierung mit z.B. . .bashrc oder logout/login
go version
Installation/Bereitstellung der Go-Techniken im $HOME
-Dir des Users (benutzt Technik von git
):
# ===========================
# Powerline-Go mit golang-go
# ===========================
# in case of problems with https and/or Security stuff:
# git config --global http.sslVerify false
# and:
# go get -u -insecure github.com/justjanne/powerline-go
# Default stuff:
# ==============
# Remember: install the powerline-fonts aka fonts-powerline and the go-stuff
# https://awesomeopensource.com/project/justjanne/powerline-go
# https://github.com/justjanne/powerline-go
# folder ~/go creating with (needs go and git):
go get -u github.com/justjanne/powerline-go
Kurzanleitung
Anm.: go
und git
vorhanden/installiert/getestet:
go get -u github.com/justjanne/powerline-go
(im Home-Dir des Users)
Und dann folgt noch der Einbau der Powerline-Go-Techniken in der ~/.bashrc
zur Nutzung:
export GOPATH="$HOME/go"
function _update_ps1() {
PS1="$($GOPATH/bin/powerline-go -error $? -newline -theme solarized-dark16 -shell bash -modules-right time)"
}
if [ "$TERM" != "linux" ] && [ -f "$GOPATH/bin/powerline-go" ]; then
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
Und wie immer: Bash-Umgebung (z.B.) mit . ~/.bashrc
aktualisieren!
Scripting 101¶
Seminar mit Scripting-Schwerpunkten sind (leider) sehr selten. Und im Grunde kann man ja auch häufig mit Grundlagen und Internetrecherchen überleben.
# echo "How to do Shell Scripting!" | cowsay -f tux
----------------------------
< How to do Shell Scripting! >
----------------------------
\
\
.--.
|o_o |
|:_/ |
// \ \
(| | )
/'\_ _/`\
\___)=(___/
Anm.: Cowsay kann auch „Dragons“ - Winter is coming…
Hinweis
Die Beispielzeile mit Kombination aus „echo und cowsay“ Tools ist ein erstes Beispiel dafür, dass eine Code-Zeile hier in der Bash funktioniert aber in der ZSH Probleme macht.
Ich werde mich nur erst einmal auf einfache Beispiele für Bash-Scriptings im Rahmen der Topics des LPIC-1 (Lernziele 101 und 102) konzentrieren.
Hinweis
Auch für diesen IT-Schwerpunkt „Shell Scripting“ empfehle ich gerne eine Literatur aus dem Rheinwerk Verlag: Shell-Programmierung.
LPIC Scripting Topics¶
Hinweis
Ich habe die Topics zur Website Openbook Shell-Programmierung Galileo verlinkt und hoffe, dass die Veröffentlichung weiter zur Verfügung steht.
Die Topics kommen aus folgenden Lernzielen.
LPIC-1 (102) Lernziel 105.1 - Die Shell-Umgebung anpassen und verwenden
LPIC-1 (102) Lernziel 105.2 - Einfache Skripte anpassen oder schreiben:
for - Schleifen
while - Schleifen
test - Vergleich / Überprüfung
if - Verzweigung
read - Eingaben
seq - Sequence von Zahlen
exec - Standardkanäle umleiten
|| - Oder Verknüpfung
&& - Und Verknüpfung
Für eine Einarbeitung kann man also gerne die alte Veriante des Standardwerks zur Shell-Programmierung - Das umfassende Handbuch aus dem (heutigen ) Rheinwerkverlag als Openbook nutzen: Openbook Shell-Programmierung Galileo/Rheinwerk
Aber natürlich findet man das Buch auch als neue Version bei der Literatur mit Titel Shell-Programmierung.
Zsh¶
Die Zsh ist eine weitere Verbesserung der Bourne-Shell und gehört zur Familie von
sh - Bourne Shell,
ksh - Korn Shell oder auch
dash - Debian Almquist Shell
Und natürlich gibt es auch komplett andere Alternativen wie die csh oder die fish Shell. Letztere habe ich ebenfalls immer mal wieder angetestet. Aber spätestens, wenn mich einfachste Skripte erinnert haben, dass die fish-Shell eine eigene Syntax benutzt, die inkompatibel zur genannten Bourne-Family ist, dann bin ich wieder heimgekehrt.
Die Zsh bietet immense Erweiterungsmöglichkeiten und Technik-Schnittstellen. Ich habe mich anfangs gerne in die Hände der Oh My Zsh Entwicklergemeinschaft begeben. Damit vereinfacht sich das Zsh-Leben sehr.
Hinweis
Oh-My-Zsh automatisiert eigentlich nur die Bereitstellung diverser Erweiterungen (Plugins). Eine Analyse der Plugins zeigt, dass man diese auch mit einem einfachen Sourcing integrieren könnte.
Oder anders gesagt: ein Bisschen wie mit einem 7,5 Tonner morgens Brötchen holen ;-)
Es soll aber mit Erläuterungen zu Oh My Zsh losgehen, denn im Grunde benutze ich diese Erweiterungen immer noch. Allerdings integriere ich sie manueller mit Hilfe eines ZSH-Plugin Managers (Antigen). Hierzu später mehr.
… tbc …
Oh My Zsh¶
Bei Oh My Zsh handelt es sich um ein Framework zum Managen vieler Zsh-Plugins.
Hunderte von Plugins lassen sich somit die Zsh im Funktionsumfang erweitern. Hierzu will ich eine kurze Auswahl im Anschluss anbieten.
Links zu Oh My Zsh:
Die Bereitstellung ist mit einem Oneliner erledigt:
# im UserDir...
cd ~
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Und natürlich sollte man sich das Install-Script auch einmal in einer ruhigen Minute anschauen.
Insbesondere schlägt das Script auch gleich vor, das genutzte
Benutzerkonto mit chsh
auf die /bin/zsh
umzustellen.
Spätestens bei solchen Aktionen schlagen Linux-Puristen Alarm. Und überhaupt muss man dan auch später bei der Nutzung der Oh-My-Zsh Technik festhalten, dass diese sehr viele Automatismen mitbringt.
So muss man schon das ein oder andere Mal beim Öffnen eines Terminals auf die teils umfangreichen Aktualisierungen (git pulls) von Oh-My-Zsh warten!
Plugins¶
Die Plugins müssen in der .zshrc
entsprechend konfiguriert werden.
Manche Plugins müssen einfach nur in der Plugin-Liste eingetragen werden.
Andere Plugins benötigen Extra-Software in Form von Github Clones, die im Oh-My-Zsh-Plugin-Ordner bereitgestellt werden. Oder man muss sogar eine komplette Software installieren (siehe autojump).
Übersicht über meine Standard-Oh-My-Zsh-Plugins - Quellen:
Hier folgt also meine kleine, beispielhafte Plugin-Liste:
-
Standardplugin: z.B. Aliase wie
gst
stattgit status
oder Function wiegit_current_user_name
-
stellt Alias
ccat
zu Toolcolorize_cat
und Aliascless
zu Toolcolorize_less
bereit; benötigt Python-Tools Chroma oder Pygments -
färbt Man-Pages ein; Tool
colord
kann auch bei Aufrufen helfen:colored git help clone
-
findet Aliase die longer
-l
oder kürzer/exact-e
sind:alias-finder -l "git commit -v"
-
(*) - benötigt Zusatzzeile nach Plugins:
autoload -U compinit && compinit
- weitere Vervollständigungen für die Zsh; später vielleicht ein Standardplugin -
(*) - weiter verbessertes Syntaxhighlighting (Fish-Style)
-
(*) - die Zsh macht Vorschläge (again Fish-Style)
z - cd clever
das
z
-Kommando von Github Projekt Rupa/zklassische cd-Alternative: autojump
(*) - benötigt Paket autojump autojump github project mit Beispielen für Tool
j
vi-mode - sollte man sich gut überlegen ;-)
lässt die Zsh nutzen über Vi-Kommandos: z.B.
dd
lösche Zeile
(*) - Das sind die Plugins mit zusätzlichen Installationen oder Konfigurationen: (nachfolgende Auflistungen für Copy & Paste)
Zsh Completions
Die Zsh vervollständigt!
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-completions
Zsh Syntaxhighlighting
Die Zsh färbt ein!
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
Zsh Autosuggestions
Die Zsh macht Vorschläge!
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
Autojump
Die Zsh erhält einen cleveren CD-Befehl: j
.
Wir müssen das entsprechende Paket autojump installieren:
apt install autojump # Debian / Ubuntu / Mint
zypper install autojump # openSUSE
yay autojump # AUR Arch Linux
Und - wie schon gesagt - wir müssen unsere .zshrc
entsprechend erweitern
(plugins=…).
zshrc¶
Oder besser gesagt natürlich .zshrc
- die Konfigurationsdatei für
die Zsh. Wir beginnen mit den Theme für die Zsh.
Theme Powerlevel10K
Styling like Powerline, Icons und Infos zu Git & Co (Github Romkatv Powerlevel10k)
Für die Nutzung des Powerlevel10k Themes benötigen wir neben dem folgenden Git-Clone auch einen Nerd-Font für die Darstellung von Icons und Grafik.
Empfehlung des Powerlevel10k-Projekts: Meslo Nerd Font
Einzeiler für die Bereitstellung des Powerlevel10k-Theme:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
Beim nächsten Login in die ZSH wird eine Konfiguration interaktiv durchlaufen.

Powerlevel10k Konfiguration¶
Die Konfiguration für das Powerlevel10k-Theme kann jederzeit
wieder mit p10k configure
neu erstellt werden.
In der .zshrc
legen wir das Powerlevel10k Theme fest:
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
# ZSH_THEME="robbyrussell"
ZSH_THEME="powerlevel10k/powerlevel10k"
Und natürlich können wir hier auch die anderen Themes konfigurieren, die von der Oh My Zsh Entwicklergemeinschaft mitgeliefert werden.
Für das Powerlevel10k Theme findet sich am
Ende der .zshrc
folgende Zeile:
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
Hier erkennt man die Konfigurationsdatei für das Theme, die sich auch manuell bearbeiten lässt.
Plugins
Die Plugins werden aufgelistet und eine bestimmte Reihenfolge gemäß den Anleitungen auf den Github- und Entwicklerseiten sollte eingehalten werden.
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
git
colorize
colored-man-pages
alias-finder
zsh-completions
vi-mode
autojump
zsh-syntax-highlighting
zsh-autosuggestions
)
Hier erkennt die Plugins aus den vorangegangen Erläuterungen, die das Leben in der Z-Shell erleichtern und verbessern.
Completions
Die Vervollständigungen benötigen einen entsprechenden Eintrag im Anschluss an die Plugins.
# use completions:
autoload -U compinit && compinit
Hinweis
Für meine Trainees stelle ich passende Konfigurationsdateien bereit.
Antigen¶
Bei der Nutzung der bis hierhin dargestellten Techniken kommt man bald zum Schluss, dass man die effizienten Zsh-Plugin-Techniken nutzen möchte, aber die sehr aufwändige und mächtige Oh-My-Zsh nicht direkt umsetzen möchte.
Im Grunde ist die Oh-My-Zsh ja auch nur eine vollautomatische Vereinfachung zur Bereitstellung von Zsh-Plugins und Themes. Und diese Plugins könnte man auch manuell bereitstellen (sourcen) und man möchte auch Techniken aus anderen Quellen jenseits von Oh-My-Zsh.
Hier ein Quelle zum Blättern: Github unixorn/awesome-zsh-plugins und Themes, …
Also greifen wir zu einem Zsh-Plugin-Manager unserer Wahl und ich entscheide mich für Antigen.
Antigen liegt in vielen Paketverwaltungen vor. Aber man kann
auch einfach per curl
(oder git clone) die Software bereitstellen.
# cd ~
curl -L git.io/antigen > antigen.zsh
# or use git.io/antigen-nightly for the latest version
Ich lege hier die Antigen-Technik einfach in meinen Home-Ordner. Dann sehe ich auf einen Blick, dass ich Antigen nutze. Das kann man aber natürlich auch abweichend lösen.
Die antigen.zsh
muss in unserer .zshrc
eingebunden werden.
source /path-to-antigen/antigen.zsh
Danach kann man die gewünschten Zsh-Plugins und Themes per Befehl ansprechen und nutzen lassen.
Hinweis
Hier entfällt auch jedweder manueller Download eines Projekts. Das erledigt der Antigen Bundler.
Befehle für Antigen erhält man per antigen help
.
Eine beispielhafte Einbindung mit Antigen in der .zshrc
:
# ANTIGEN Solution for Plugins:
# =============================================================================
# https://github.com/zsh-users/antigen
# https://github.com/zsh-users/antigen/wiki/Quick-start
# curl -L git.io/antigen > antigen.zsh
# or use git.io/antigen-nightly for the latest version
source $HOME/antigen.zsh
# antigen commands: antigen help
# =============================================================================
#
antigen use oh-my-zsh
# plugins in: ~/.antigen/bundles/robbyrussel/oh-my-zsh/...
antigen bundle git
antigen bundle colorize
antigen bundle colored-man-pages
antigen bundle alias-finder
# plugins in: ~/.antigen/bundles/zsh-users/...
antigen bundle zsh-users/zsh-completions
antigen bundle z
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle zsh-users/zsh-autosuggestions
# antigen theme robbyrussell
# look ~/.antigen/bundles/romkatv/...
antigen theme romkatv/powerlevel10k
# apply bundles
antigen apply
# =============================================================================
Die bereitgestellten Plugin- und Themetechniken findet man
in ~/.antigen/bundles/...
.
> ls -Al ~/.antigen/bundles
insgesamt 12
drwxrwxr-x 3 joeb joeb 4096 Aug 11 19:06 robbyrussell
drwxrwxr-x 3 joeb joeb 4096 Aug 12 17:00 romkatv
drwxrwxr-x 5 joeb joeb 4096 Aug 11 19:21 zsh-users
Für das hier dargestellte Beispiel stellen die Ordner die folgenden Techniken bereit.
robbyrussel - die Oh-My-Zsh Technik, aber ohne Automatismen!
romkatv - das Theme Powerlevel10k
zsh-users - Plugins wie zsh-completions, zsh-syntax-highlighting, …
… tbc …
My .zshrc¶
Spätestens wenn ich in meinen Seminaren auch einmal meine eigenen Konsolen nutze, dann stellen die Trainees fragen nach meiner Zsh-Konfiguration.
Dem will ich mit diesem Kapitel Rechnung tragen. Allerdings sind die dargestellten Tools natürlich auch meine persönlichen Favoriten und manchmal ändern sich die Tools auch über die Zeit - sind ja auch schließlich meine Tools und Konfigurationen.
Für diese Konfiguration sollten folgende Vorbereitungen / Installationen erfolgt sein.
Erforderlich:
Zsh - die Z-Shell
Installation aus den Standard-Repositories möglich
Antigen - Zsh-Plugin Managers
curl -L git.io/antigen > antigen.zsh
fzf und ripgrep
Installationen aus den meisten Standard-Repositories möglich
Beachten: Ordner für benötigte
key-bindings.zsh
undcompletion.zsh
Ganz ehrlich: wenn man mal mit fzf / ripgrep angefangen hat, dann will man diese Tools wirklich nicht mehr missen.
Das führt zu folgender .zshrc-antigen-minimal
Version:
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# ANTIGEN Solution for Plugins:
# =============================================================================
# https://github.com/zsh-users/antigen
# https://github.com/zsh-users/antigen/wiki/Quick-start
# curl -L git.io/antigen > antigen.zsh
# or use git.io/antigen-nightly for the latest version
source $HOME/antigen.zsh
# antigen commands: antigen help
# =============================================================================
#
antigen use oh-my-zsh
# plugins in: ~/.antigen/bundles/robbyrussel/oh-my-zsh/...
antigen bundle git
antigen bundle colorize
antigen bundle colored-man-pages
antigen bundle alias-finder
# plugins in: ~/.antigen/bundles/zsh-users/...
antigen bundle zsh-users/zsh-completions
antigen bundle z
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle zsh-users/zsh-autosuggestions
# antigen theme robbyrussell
# look ~/.antigen/bundles/romkatv/...
antigen theme romkatv/powerlevel10k
# apply bundles
antigen apply
# =============================================================================
# use completions:
# =============================================================================
autoload -U compinit && compinit
# FZF - RIPGREP
# =============================================================================
# https://github.com/junegunn/fzf
# fzf environment and exports:
#
. /usr/share/doc/fzf/examples/key-bindings.zsh
. /usr/share/doc/fzf/examples/completion.zsh
export FZF_DEFAULT_OPTS='--height 40% --border'
# use ripgrep with FZF instead of find
# export FZF_DEFAULT_COMMAND='find ~ -name .git -prune -o -name tmp -prune -o -type f,d -print'
export FZF_DEFAULT_COMMAND='rg --files --hidden -g !.git/'
# more commands:
export FZF_ALT_C_COMMAND='find .'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
# configuration for ripgrep
# export RIPGREP_CONFIG_PATH="$HOME/.ripgreprc"
# =============================================================================
# ZSH-Plugin COLORIZE - see Chapter with antigen above
# =============================================================================
# provides tools colorize_cat (alias ccat)
# and colorize_less (cless):
#
if [ -n "$(command -v colorize_cat)" ] && [ -n "$(command -v colorize_less)" ]; then
alias cat='colorize_cat'
alias less='colorize_less'
fi
# EXPORTS
# put my Exports here - later in extra file?
# =============================================================================
#
# ZSH Colorize Style
export ZSH_COLORIZE_STYLE="native"
# alternative Editor
export MICRO_TRUECOLOR=1
# fixing Exports for RANGER standard Editor vim
export VISUAL=vim
#To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
Und an dieser Stelle auch mal ein Link zu einer Version, die online über ein öffentliches Gitlab-Repo gepflegt wird.
Tipp
Link zu Gitlab-Projekt mit Dateien für Linux-Seminar-Teilnehmer:
Die folgenden Tools dann nach eigenem Wunsch und in meiner Config auch nur für die Aliase von Bedeutung, die in den meisten Fällen über if gecheckt und dann erzeugt werden.
Und natürlich haben manche Tools auch noch eigene Konfigurationsdateien mit denen man die Nutzung und das Erscheinungsbild anpassen kann.
lf - eine Alternative zum Ranger
Download von lf Releases für Ordner
~/opt
Anm.: Release packe ich gerne in
~/opt/lf...
und linke dann in~/bin/
exa - moderne Alternative zu ls
Download für exa Releases für Ordner
opt
colorls - ein Ruby Script für das Einfärben von ls
Anleitung der Installation: gem install colorls
Anm.: die Ruby-Development Pakete müssen installiert sein!
makepasswd - generieren von Passworten
Installation aus den meisten Standard-Repositories möglich
mogrify - aus Graphiktools imagemagick
Installation imagemagick aus den meisten Standard-Repositories möglich
yad - Tool für graphische Dialoge
Installation aus den meisten Standard-Repositories möglich
vifm - und noch eine Rangervariante und hier extrem spartanisch
Installation aus den meisten Standard-Repositories möglich
Für eine saubere Verwaltung der eigenen Tools und Konfigurationen sollte man dann wirklich mal zu Git greifen und sich die Umgebungen für schnelle Clones bereithalten.
Am Meisten lernt man natürlich, wenn man sich die Zsh-Umgebung von der Pike an selbst auf- und zusammenbaut.
Tipp
Link zu Gitlab-Projekt mit Dateien für Linux-Seminar-Teilnehmer:
Alles - wie immer - ohne Gewähr und hoffentlich mit viel Spaß beim Anwenden.
Vim¶
Der VI Improved ( Vim.org ) ist auf jeden Fall eine Vertiefung wert und verdient weitergehende Infos.
Und natürlich sollte als moderne Alternative auch NeoVim erwähnt werden: NeoVim - meine aktuelle Wahl für die Konsole. Mit Lua unterstützt Neovim eine mächtige allgemeine Skriptsprache und wird durch eine große Entwicklergemeinschaft unterstützt.
Hier einfach mal ein kleines Cheat Sheet für den Einstieg mit dem Vim ;-) ich mach nur Spaß…

Beispiel für Vim Cheat Sheet¶
Rund um den Vim habe ich eine ganze Reihe von Links und Zusatzinfos, die ich nach verfügbarer Zeit hier einbauen werde.
Wer gleich bei einem Vim-Artist einsteigen möchte, kann beim Youtube-Kanal Primagen einsteigen, was ich allerdings keinem absolutem Beginner empfehlen würde ;-). Der Primagen hat komplette Serien mit ausführlichen Heranführungen an VIm. Allerdings hat der Kollege auch manchmal einfach nur seinen Spaß bei den Videos, was ich persönlich sehr schätze (Beispiel gefällig? Learn Vim in Less than 2 Minutes - Crazy!).
Ich habe in den nächsten Abschnitten viel Wissen und Praxis rund um Vim untergebracht und hoffe, dass der geneigte Leser schnell zu Erfolgen kommt.
VIM Tutor¶
Und natürlich hat Vim auch ein eigenes Lernprogramm,
das man einfach per Vimtutor
aufrufen kann.

Vimtutor - Hilfs-/Lernprogramm für Vim¶
Das Tutorial zeigt interaktiv die Nutzung des VIM und hilft bei den ersten Schritte.
VIM 101¶
Der VIm kennt viele unterschiedliche Modi - wir konzentrieren uns auf die ersten beiden:
Einfügenmodus (z.B. mit Taste i für insert/einfügen)
Kommandomodus (ESC)
Kommandos: (nach ESC-Taste):
:w (schreiben),
ZZ (Schreiben und beenden VI);
:q (Quit - mit
:q!
Beenden erzwingen)
Tipps:
vi test.txt
(gleich Datei laden bzw. erstellen);vi -R test.txt
(nur Lesen-Modus)
Anmerkung: auch als Fensterprogramm verfügbar
gvim
(also eigentlich aus der Gnome-Ecke)
Im Internet finden sich viele Hilfe- und Tutorial-Seiten zum Vi (s.a. cheat sheets).
Hinweis
Mit einem vorbereitetem .vim
-Ordner und
der passenden .vimrc
-Konfigurationsdatei
mausert sich VIM zum Topeditor für alle Anwendungsbereiche.
Und deshalb sollte es zum VIM auf jeden Fall hier noch mehr Infos geben.
Vim Basics¶
Für die Nutzung von Vim sollte man sich ein kleines Projekt mit Code besorgen und einfach die Schritte und Nutzungen intensiv üben.
Für die folgenden Basisschritte mit Vim empfiehlt der Primeagen / Vim-Profi eine knappe Woche!

Vim As Your Editor (1/6): The Basic Vim Movements (Primeagen)¶
Vorweg für die Kombinationen von Commands hier die Grundstruktur, die Vim nutzt:
AKTION + ANZAHL + BEWEGUNG/RICHTUNG also z.B. d3w - lösche nächste 3 Worte
Fangen wir einfach mal!
Grundsätzliche Bewegungen - Modus: NORMAL
Taste / Tastenkombination |
Aktion |
Anmerkungen |
---|---|---|
h ← |
nach links bewegen |
Zeigefinger |
j ↓ |
nach unten bewegen |
Zeigefinger |
k ↑ |
nach oben bewegen |
Mittelfinger |
l → |
nach rechts bewegen |
Ringfinger |
w |
ein Wort nach rechts bewegen |
w ord |
b |
ein Wort nach links bewegen |
b ackwards |
0 |
Anfang der Zeile |
|
$ |
Ende der Zeile |
RegEx lässt grüßen |
gg |
Anfang des Dokuments |
g o |
G |
Ende des Dokuments |
G o ;-) |
100G |
Gehe zu Zeile 10 |
oder: :100 |
} |
zur nächsten freien Zeile |
Paragraphs |
{ |
zur vorherigen freien Zeile |
|
Strg + u |
Seite hoch |
eigentlich Halbseite |
Strg + d |
Seite runter |
eigentlich Halbseite |
f. |
finde/gehe auf Zeichen . |
f find - landet auf Zeichen |
t. |
finde/gehe zu/vor Zeichen . |
t to - landet vor Zeichen |
F. |
finde/gehe zurück auf Zeichen . |
f find - landet auf Zeichen |
T. |
finde/gehe zurück zu/vor Zeichen . |
t to - landet vor Zeichen |
% |
finde/gehe zur passenden Klammer |
(, ), {, }, [, ] |
Tipp: die t und f Bewegungen lassen sich mit ; vorwärt und , rückwärts beliebig wiederholen!
Weitere Modi:
Wichtig: über ESC kommt man (meist ;-) wieder zu NORMAL zurück.
Taste / Tastenkombination |
Aktion |
Anmerkungen |
---|---|---|
i - insert |
in EINFÜGEN/INSERT wechseln |
ab aktueller Cursorposition |
I - insert POS1 |
in EINFÜGEN/INSERT wechseln |
am Anfang der Zeile |
a - append |
in EINFÜGEN/INSERT wechseln |
nach aktueller Cursorposition |
A - append END |
in EINFÜGEN/INSERT wechseln |
am Ende der Zeile |
o - newline unten |
in EINFÜGEN/INSERT wechseln |
Neue Zeile unterhalb |
O - newline oben |
in EINFÜGEN/INSERT wechseln |
Neue Zeile oberhalb |
v |
in VISUAL wechseln |
ab Cursurposition |
V |
in VISUAL - Zeilen wechseln |
inklusive aktueller Zeile |
Strg + v |
in VISUAL - Spalten wechseln |
Multicursor! |
: - try :smile |
in COMMANDMODE wechseln |
Befehle unterhalb Statuszeile |
/ |
in COMMANDMODE - Suche wechseln |
Suche - Vor/Zurück: n / N |
ESC oder Strg + C |
in NORMAL zurück wechseln |
leicht verzögert |
Anm.: statt ESC könnte man auch noch Strg + [ nutzen, was allerdings auf einer deutschsprachigen Tastatur einige Verrenkungen verlangt!
Tipps zur Suche:
* sucht passendenden Text unter Cursor und geht durch Suchergebnisse vorwärts. Mit # geht man rückwärts. Das Highlighting deaktiviert man im COMMANDMODE mit :nohlsearch.
Multicursor mit VIm Boardmitteln:
Mit Strg + v in Visual-Spalten-Modus gehen und per Bewegung Mulitcursor setzen. Mit I (groß I) in den Insert-Mode und den Text ergänzen. Dann mit ESC den speziellen Visual-Mode verlassen.
Wenn man löschen will, dann einfach nur im Visual-Mode nach Wunsch markieren und dann x.
Copy & Paste OS Clipboard
Das Kopieren und Einfügen in VIm selbst geht super und kennt diverse Abläufe. Beim Kopieren über die Zwischenablage der Linux Distribtution allerdings scheitern wir zuerst. Manche VIm-User installieren sich hierfür Extra-PlugIns - wir wollen das mit Boardmitteln lösen!
Ein wenig Hilfe benötigen aber auch wir: gvim bzw. vim-gtk die Fenstervariante für Desktops sollten wir - falls nötig - nachinstallieren. Wir nutzen natürlich nicht gvim, aber die nebenbei installierten Minitools (Anm.: gesamte Nachinstallation im 1-2 MiB Bereich).
Jetzt können wir das Spezial-Register + nutzen:
Text in VIm markieren
mit " + y markierten Text in Register + yanken
in Grafikanwendung/Programm positionieren und Strg + v
Vim speichern und verlassen
Wichtig: im COMMANDMODE kann man Befehle mit angehängtem ! erzwingen.
Taste / Tastenkombination |
Aktion |
Anmerkungen |
---|---|---|
:w |
Dokument speichern |
w rite the buffer |
:q |
Vim beenden |
q uit, falls alles abgearbeit |
:q! |
Vim beenden erzwingen |
q uit |
ZZ |
speichern und beenden |
aus NORMAL |
Vim Aktionen¶
Jetzt soll etwas mit unseren Texten passieren - wir wollen Action.
Technisch: es geht um Register und Puffer
Grundsätzliche Aktionen - Modus: NORMAL
Taste / Tastenkombination |
Aktion |
Anmerkungen |
---|---|---|
yy |
aktuelle Zeile kopieren |
y ank |
y |
Markierung (VISUAL) in Register kopieren |
y ank |
dd |
aktuelle Zeile löschen |
d delete |
d |
Markierung (VISUAL) in Register löschen |
d delete |
dw |
Wort löschen |
d delete w ord |
dj |
Zeile + Zeile unterhalb löschen |
|
dk |
Zeile + Zeile oberhalb löschen |
|
D |
ab Cursor Rest Zeile löschen |
d delete zum Ende |
c |
wie d und EINFÜGEN |
Löschen + INSERT Mode |
C |
wie D und EINFÜGEN |
Löschen zum Ende + INSERT Mode |
cw, cj, ck |
wie dw, … und EINFÜGEN |
Löschen + INSERT Mode |
x |
Zeichen unter Cursor löschen |
aus x en ;-) |
s |
Zeichen unter Cursor löschen und EINFÜGEN |
lösche Zeichen + INSERT Mode |
S |
Zeile unter Cursor löschen und EINFÜGEN |
lösche Zeile + INSERT Mode |
p |
unterhalb einfügen |
p aste |
P |
oberhalb einfügen |
p aste |
u |
Schritt(e) rückgängig machen |
u ndo |
Bei der nächsten Tabelle wird i nicht als Moduswechsel (INSERT/EINFÜGEN) genutzt, sondern als Bereichsangabe Inside - also z.B. der Innenbereich von Klammern!
Kombinierte Aktionen bzw. Kombinationen - Modus: NORMAL
Taste / Tastenkombination |
Aktion |
Anmerkungen |
---|---|---|
dt) |
löschen bis ) |
Inhalt von () löschen vom Anfang |
dT( |
löschen bis ( |
Inhalt von () löschen vom Ende |
diw |
aktuelle Wort löschen |
Cursor ist in Word |
di{ |
Inhalt von { … } |
Cursor in Inhalt von Klammern |
ci[ |
Inhalt von { … ] |
… und dann EINFÜGEN Mode! |
cip |
Inhalt Absatz/Paragraph löschen |
… und dann EINFÜGEN Mode! |
c2i[ |
Inhalt von 2 Klammerebenen entfernen |
… und dann EINFÜGEN Mode! |
ct), cT( |
löschen und INSERT |
löschen und Wechsel INSERT Mode |
4dd bzw. d4d, d4j |
4 Zeilen (nach unten) löschen |
ab aktiver Zeile |
4dw |
4 Worte löschen |
ab aktivem Wort |
4cw |
4 Worte löschen + EINFÜGEN |
in Modus EINFÜGEN / INSERT wechseln |
Zur Erinnerung: d löscht ins Register vs. c löschen und dann in den EINFÜGEN Modus wechseln!
Und das ganze mit y würde einfach nur in das Register kopieren.
Wenn in den Aktionen die Aktion i gegen a ausgetauscht wird, dann würden angrenzende Klammern eingeschlossen!
Vim Dateien¶
Kommen wir nun zum Nutzen von Dateien (Files) mit Vim. Selbstverständlich kann man einfach mit
dem Start von Vim eine Datei zum Öffnen auswählen: Vim testing.html
.
Bei einem leeren Vim hilft das Kommanodo :edit bzw. :e weiter. Bei ordentlicher Vim-Konfiguration
(siehe hierzu auch .Vimrc
) sollten hier auch unscharfe Suchen mit Auswahlmöglichkeiten erscheinen.
:e git-projekte/**/RE
TAB
Hier sollte eine Auswahl von README.md
aus Git-Projekten erscheinen und auswahlbar werden.
Tipp
Für noch professionelleres und schnelleres Suchen/Finden: FZF (Fuzzy-Finder) als Tool
im OS (z.B. apt install fzf
) und dann als Vim-Plugin fzf (by Junegunn Choi)
Wenn sich ein Dateiname/Pfad im Dokument befindet, dann einfach Dokument mit gf öffnen.
Mehrere Dateien
Für die weiteren Darstellungen vermeide ich alles zu Fenstern (Windows) oder Registerkarten (Tabs)! Denn mit den sogenannten Puffern (Buffers) können wir das Managen mehrere Dateien ebenfalls easy handeln.
Wenn man mit :e eine weitere Datei lädt, dann verschwindet die erste Datei. Das Vorhandensein von den Vim-Buffers lassen wir uns mit :buffers oder einfach mit :ls anzeigen/auflisten.
Wir können jetzt gezielt die Buffer (aka: Dateien) auswählen und wechseln:
Puffer / Buffers - Modus: NORMAL
Taste / Tastenkombination |
Aktion |
Anmerkungen |
---|---|---|
:ls |
Lister aller Buffers auflisten lassen |
oder :buffers |
:b filename |
Buffer mit Name filename |
Auch Substrings von filename möglich! |
:b3 |
Buffer mit Index 3 aufrufen |
hier: kein Leerzeichen vor Zahl |
:bn |
nächsten Buffer |
|
:bp |
vorherigen Buffer |
|
:bd |
Buffer aktuelles Fenster löschen |
Datei schließen; auch :bd 3 |
:sb 2 |
Bufferinhalt #2 in neuem Fenster |
Split hier horizontal |
:sball |
Alle Bufferinhalte splitten |
Split hier horizontal |
:vertical sb 2 |
Bufferinhalt #2 in neuem Nachbarfenster |
Split hier vertikal |
Strg + w |
Fensterwechsel mit weiterem w |
oder: Wechsel mit Richtungstasten hjkl |
Durch die split-Kommandos kamen jetzt indirekt auch Fenster ins Spiel. Allerdings werden diese nach :q immer noch in der Buffer-Liste geführt!
Trick: gleichzeitige Ändern von allen Dateien in Bufferlist (Vim Fandom Wiki)
:set autowriteall
- Buffer automatisch speichern, wenn nötig!
:bufdo %s/muster/ersatz/ge
- Anm.: Globales ersetzen; keine Fehler anzeigen falls Muster nicht gefunden.
Explorer für Dateien/Ordner
Für das Datei- und Ordnerhandling in Vim gibt es diverse Plugins (siehe NerdTree), aber in den aktuellen Vim-Versionen nutze ich das boardeigene Netrw: Anleitung auf Shapeshed.com.

Dateien und Ordner mit netrw¶
Auch hier wieder mit ausführlicher Hilfe (F1 ;-) mit der man die Konfiguration (siehe unten rechts .Vimrc
) und Nutzung
schnell nachschlagen kann.
Tipps:
gh blendet versteckte (hidden) Objekte ein/aus
v öffnet in vertical split
t öffnet in neuem Tab (nutze ich aber ja nicht ;-)
Leider ist Netrw nicht in jeder Vim-Installation verfügbar!
Tipp
Für Netrw benötigt man bei manchen Distros (siehe openSUSE 15.1 oder auch 15.2) aktuellere Vim Versionen als in den Standard-Quellen: Leap 15.1 mit Vim 8.0 - besser updaten über Editor-Repo auf 8.2!
Anleitung Leap 15.1:
zypper addrepo https://download.opensuse.org/repositories/editors/openSUSE_Leap_15.1/editors.repo
zypper refresh
zypper install vim
Anleitung Leap 15.2:
zypper addrepo https://download.opensuse.org/repositories/editors/openSUSE_Leap_15.2/editors.repo
zypper refresh
zypper install vim
Oder natürlich Vim aus den Quellen installieren: Vim aus Git-Sources erstellen
Vim Config¶
Jetzt sollten wir noch die Konfiguration für den Vim ansprechen. Und natürlich will ich hier nicht die komplette Konfigurationsumgebung des Vim abhandeln! Dafür gibt es genügend Quellen im Netz.
Basiskonfigurationen in
~/.vim
- Vim-Ordner Benutzer~/.vimrc
- Konfigurationsdatei Benutzer
~/.vim (Ordner)
Der Konfigurationsordner für Vim - hier vor Allem die Plugins/Erweiterungen für den Vim.
Eine der besten Anlaufstellen für Plugins ist Vim Awesome und für die Plugins stehen verschiedene Install-Varianten zur Verfügung:

Vim Awesome¶
Plugin-Techniken:
Pathogen
VimPlug
Vundle
NeoBundle
Ich organisiere die Erweiterungen für Vim klassisch mittels Pathogen Technik von Vim Plugin Artist Tim Pope (Github tpope) oder über die VimPlug Technik von Vim Plugin Expert Junegunn Choi (Github junegunn).
Pathogen¶
Wir starten mit der klassischen Pathogen-Technik. Die Pathogen-Technik
wird über den ~/.vim/autoload
Ordner bereitgestellt.
mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
Die Erweiterungen werden im Ordner ~/.vim/bundle
bereitgestellt.
cd ~/.vim/bundle
git clone https://github.com/mattn/emmet-vim
~/.vimrc (Datei)
Im besten Fall pflegt man eine volldokumentierte Version der eigenen
.vimrc
und verwaltet diese z.B. mit einer Versionsverwaltung wie Git!
Im meinem Fall hat die komplette .vimrc
Kommentare,
die mit "
eingeleitet werden. Ich kommentiere hier mit "
(Anführungszeichen + Leerzeichen) ausführlich und mit "Text
(Anführungszeichen direkt von Kommentar gefolgt).
Durch grep
bzw. egrep
kann man sich dann eine
schlanke Version extrahieren:
egrep -v '^"' .vimrc | egrep -v "^\s*$"
Auschluss von " gefolgt von LZ am Zeilenanfang und leere Zeilen
Hinweis
Für eine vollständige .vimrc
bitte die folgenden
Ausarbeitungen zu Vim mit Vim Plug Installer nutzen.
VimPlug¶
Source: Github junegunn
Selbstverständlich sollte man immer nur einen Plugin-Helper für VIm nutzen. Für die folgenden Konfiguration sollten also alle bestehenden Pathogen-Zeilen auskommentiert/entfernt werden.
Kurzanleitung:
Bereitstellung des VimPlug im autoload-Ordner von VIm:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Hinweis
Bitte nicht Git vergessen - wird benötigt!
Hier mal eine Rohversion einer möglichen Vimrc nahezu kommentarlos. Für eine Langversion findet man unten weiterführende Links oder ich stelle als Trainer entsprechende dokumentierte Versionen bereit.
set nocompatible
syntax enable
filetype plugin on
set path+=**
set wildmenu
set wildmode:list:full
set wildignore+=tags,_build,.vscode,node_modules,.pyc,.swp
let g:netrw_banner=0 " disable annoying banner
let g:netrw_browse_split=4 " open in prior window
let g:netrw_altv=1 " open splits to the right
let g:netrw_liststyle=3 " tree view
let g:netrw_list_hide=netrw_gitignore#Hide()
let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+'
call plug#begin('~/.vim/plugged')
Plug 'mattn/emmet-vim'
Plug 'ap/vim-css-color'
Plug 'pprovost/vim-ps1'
Plug 'tpope/vim-fugitive'
Plug 'dracula/vim',{ 'as':'dracula' }
Plug 'morhetz/gruvbox'
Plug 'kristijanhusak/vim-hybrid-material'
Plug 'NLKNguyen/papercolor-theme'
Plug 'jacoborus/tender'
Plug 'joshdick/onedark.vim'
Plug 'nanotech/jellybeans.vim'
Plug 'arcticicestudio/nord-vim'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'ryanoasis/vim-devicons'
call plug#end()
set omnifunc=syntaxcomplete#Complete
set encoding=utf8
set number
set relativenumber
set colorcolumn=81
set cursorline
set hlsearch
set scrolloff=10
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set ignorecase
set smartcase
set autoindent
set smartindent
set showcmd
colorscheme nord
let g:airline_powerline_fonts = 1
xnoremap K :move '<-2<CR>gv-gv
xnoremap J :move '<+1<CR>gv-gv
map <F2> :colorscheme dracula<CR>
map <F3> :colorscheme gruvbox<CR>
map <F4> :colorscheme hybrid_material<CR>
map <F5> :colorscheme PaperColor<CR>
map <F6> :colorscheme tender<CR>
map <F7> :colorscheme onedark<CR>
map <F8> :colorscheme jellybeans<CR>
map <F9> :colorscheme nord<CR>
Für die Nachrüstung von FZF Technik in VIm bitte vorher FZF installieren/bereitstellen und testen.
Nachfolgend ein paar Zeilen für die nötige Vim Plug Technik:
"-----------------------------------------------------------
" doing the plugins via vim-plug
"-----------------------------------------------------------
" https://github.com/junegunn/vim-plug
"-----------------------------------------------------------
" this is for vim - different oneliner for neovim
"-----------------------------------------------------------
" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
"-----------------------------------------------------------
" Specify a directory for plugins
" - For Neovim: stdpath('data') . '/plugged'
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')
" techstuff
Plug 'mattn/emmet-vim'
Plug 'ap/vim-css-color'
Plug 'pprovost/vim-ps1'
Plug 'tpope/vim-fugitive'
" Colorschemes
Plug 'dracula/vim',{ 'as':'dracula' }
Plug 'morhetz/gruvbox'
Plug 'kristijanhusak/vim-hybrid-material'
Plug 'NLKNguyen/papercolor-theme'
Plug 'jacoborus/tender'
Plug 'joshdick/onedark.vim'
Plug 'nanotech/jellybeans.vim'
Plug 'arcticicestudio/nord-vim'
" airline
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'ryanoasis/vim-devicons'
" FZF stuff - but we need FZF installed
" Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
" Plug 'junegunn/fzf.vim'
" Initialize plugin system
call plug#end()
Man sollte die Bereichsummantelung des Plugin-Helpers erkennen:
call plug#begin...
bis call plug#end()
.
Wenn die VimPlug Technik vorhanden ist (siehe Ordner autoload und curl oben, dann müssen wir im VIm nur noch die PlugIns downloaden und laden lassen.
Also VIm starten und :PlugInstall
eingeben und quittieren. Bei vielen
Plugins bitte wirklich bis zum Ende der Downloads abwarten. Dann VIm beenden
und sauber neu starten.
Hinweis
Beim Starten von VIm ohne manche PlugIns oder Colorschemes kann es zu entsprechenden Fehlermeldungen kommen. Einfach weitermachen und aktualisieren.
Die hier integrierten Plugins sind natürlich persönliche Geschmackssache und die Colorschemes sind im Grunde nur eine Spielerei aus einem Seminar, weil ich die Colorschemes dann einfach mal auf Funktionstasten gemappt habe, um sie schnell wechseln zu können.
" color Schemes switches:
map <F2> :colorscheme dracula<CR>
map <F3> :colorscheme gruvbox<CR>
map <F4> :colorscheme hybrid_material<CR>
map <F5> :colorscheme PaperColor<CR>
map <F6> :colorscheme tender<CR>
map <F7> :colorscheme onedark<CR>
map <F8> :colorscheme jellybeans<CR>
map <F9> :colorscheme nord<CR>
Am Meisten lernt man natürlich, wenn man sich die VIm-Umgebung von der Pike an selbst auf- und zusammenbaut.
Tipp
Link zu Gitlab-Projekt mit Dateien für Linux-Seminar-Teilnehmer:
Nach dem Copy & Paste muss beim ersten VIm Start (nach den Meldungen
über nicht vorhandene Tools) einfach ein :PlugInstall
durchgeführt werden,
um die Installation der PlugIns durchzuführen.
Alles - wie immer - ohne Gewähr und hoffentlich mit viel Spaß beim Anwenden.
Neovim¶
In 2022 hat Vim die Version 9 erreicht und will mit einer neuen eigenen Skriptsprache (Vimscript) glänzen.
Das war für mich der letzte Punkt, um zu Neovim zu wechseln. Ich will hier jetzt nicht alle Vor- und Nachteile der beiden Softwareentwicklungen gegenüberstellen - das ist im Netz schon hundertfach geschehen. Und natürlich schätze und ehre ich die Arbeit und Leistung von Bram Moolenaar. Aber warum das Rad neu erfinden! Das ist für mich nicht der Unix/Linux-Way.
Also: Neovim mit Community und Lua Skriptsprache.
Ich habe meine gesamte Konfiguration auf Lua umgestellt und will an dieser Stelle mal einen Einblick bieten.
Die Konfigurationsdateien kann man (z.B.) in meinem Repo zur Nutzung von Debian (und anderen Distros) in meinem Dotfiles Repo debian-i3-onedark nachvollziehen.
Zum Einstieg und eigenen Orientierung ein paar Neovim Links:
Und jetzt folgen ein paar Kurzerklärungen rund um meine Sicht auf Neovim:
Neovim installieren¶
Quellen Neovim Installationen:
Am Besten lässt sich ein aktuelles Neovim natürlich aus den Quellen der diversen Distros (Repos) installieren.
Viele Neovim Praktiker empfehlen allerdings das installieren aus den Paketquellen direkt, um eine klar definierte Version zu erhalten und zu bewahren.
Auch das Handling der Plugins wird dann gerne per Freeze gestaltet. Das heißt, dass die Plugins per Github-Commit bezeichnet und fest genutzt werden. Mehr hierzu bei der Neovim Konfiguration.
Alternativ kann man natürlich zu einem AppImage greifen:
cd ~/.local/bin
wget https://github.com/neovim/neovim/releases/download/stable/nvim.appimage
chmod u+x nvim.appimage
ln -s nvim.appimage nvim
Oder natürlich auch gerne in anderen Verzeichnissen wie ~/opt
. Man sollte
halt den $PATH
der eigenen Distribution beachten.
Neovim konfigurieren¶
Wie auch für Vim gilt: je komplizierter und weitreichender die Konfigurationen werden, umso eher schleichen sich fehlerhafte Abhängigkeiten ein. Das gilt natürlich insbesondere bei Aktualisierungen von Neovim Plugins.
Eine Ausführung zu genutzen Plugins kann man in meinen diversen Dotfiles Repos finden.
Eine Lua-basierte Konfiguration startet mit ~/.config/nvim/init.lua
.
Die benutzerspezifischen Plugins sind in Ordnerstruktur organisiert.
nvim
├── lua
│ └── user
Für das Plugin-Management nutze ich den Packer wbthomason/packer.nvim, der automatisch heruntergeladen und bereitgestellt wird.
Eine sehr gute Quelle für Informationen rund um Neovim Konfigurationen bieten die Github und Youtube Veröffentlichungen von Christian Chiarulli (aka LunarVim and chris@machine).
Besondere Bedeutung haben hier seine Darstellungen rund um seine eigene Neovim-Variante LunarVim und eine Neovim-Konfiguration als IDE, die eingefrorene Plugin-Versionen nutzt.
Vorgehensweise:
Build a definitive Version of Neovim from Code
Use commits for all Plugins
Infos and Links:
Youtube Series User chris(at)machine:
Neovim - creating an unbreakable IDE config
Secure Shell¶
Die Secure Shell SSH ist das Werkzeug für sichere Zugriffe auf Rechner und Services.
Neben der reinen Fernadministration per Shell / Konsole / Terminal bietet
uns der openSSH Server noch weitere technische Möglichkeiten wie das
Nutzen von (grafischen) Programmen über ssh -X
(siehe X-Server) oder das
Tunneln / Port-Forwarding mittels ssh -L
.
Die Standardpakete heißen openssh und sind manchmal in Server- und Client-Pakete getrennt. Die SSH-Client Technik ist immer installiert und verfügbar.
Aber Alles der Reihe nach…
SSH-Server¶
Der Status des SSH-Service lässt sich leicht ermitteln:
systemctl status sshd.service
Anm.: bei manchen Distros auch ssh.service!
Hier ein Auszug eines SSH-Status mit dem Beginn des Journals:
root@vm-lpic-server:~# systemctl status sshd.service
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-09-28 11:10:52 CEST; 1h 11min ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 473 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 513 (sshd)
Tasks: 1 (limit: 4674)
Memory: 4.0M
CPU: 130ms
CGroup: /system.slice/ssh.service
└─513 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Sep 28 11:38:19 vm-lpic-server sshd[650]: pam_unix(sshd:session): session opened for user joebserver(uid=1000) by ....
Die Konfiguration für den Server finden wir in:
/etc/ssh/sshd_config
Anm.: bitte unbedingt auf sshd_ achten!
In den (allermeisten) Standardinstallationen des SSH-Servers ist voreingestellt, dass sich nur Standarduser authentifizieren (anmelden per Benutzername + Password) dürfen.
Absicherungsmöglichkeiten für einen SSH-Server:
Standardport 22 ändern (Anm.: unüblich)
Loginkontrollen wie fail2ban
PublicKey nutzen und User+Password ausschalten!
Multifaktor-Authentifizierung (also: 2FA, Aufwand)
Ein paar beispielhafte Einstellungen:
Port 44443
PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
X11Forwarding no
Bei allen kommentierten Einträgen der Orignal-Config handelt es sich um die Standardeinträge.
Gefahr
Für das Absichern von Servern durch das Abschalten von PasswordAuthentication werden ALLE User ohne Key abgelehnt. Man sollte mit Vorsicht agieren, um sich nicht bei Cloud-Servern auszusperren!
SSH-Client¶
Mittlerweile hat jedes Betriebssystem einen SSH-Client an Bord.
Unter Linux nutzen wir in der Konsole einfach:
ssh username@servername
für den Standardport 22
ssh username@servername -p 2222
für abweichenden Port 2222
Und natürlich können statt der servernames
auch die IP-Adressen
genutzt werden, was ohne DNS/Namensauflösung wichtig ist.
X-Windows
Für die Nutzung von Tools mit Grafikfenstern in der SSH-Session erweitert man den Aufruf mittels
ssh -X username@servername
Hierdurch erhält man die Nutzung von solchen Grafikprogrammen des Servers mit Hilfe des eigenen X-Servers.
Public-Key nutzen:
ssh -i ~/.ssh/id_ed25519.pub username@servername
SSH-Client Konfigurationen
Die systemweite Konfiguration des SSH-Clients liegt
in /etc/ssh/ssh_config
.
Für den Benutzer nutzt man ~/.ssh/config
.
Man könnte z.B. für einen bestimmten Server die Nutzung eines bestimmten Public-Key hinterlegen.
Host servername
IdentityFile ~/.ssh/id_ed25519
ssh mit Windows¶
Wir brauchen einen ssh-Client und am Besten gleich noch einen X-Server (für „Linux-X-Fenster“).
putty (Link) - der Klassiker (die ssh-Tools als Sammlung oder einzeln; ohne X-Server
MobaXterm (Link) - die geniale „all-in-one“ Lösung als kostenlose Installation, Zip oder kostenpflichtige Enterprise-Version
Windows PowerShell mit openSSH-Client - aktuelle Windows haben einen openSSH-Client!
Die Überlegungen zum X-Server unter Windows lasse ich in dieser Linux-Ausarbeitung weg. Ich weise allerdings auf die erfreulichen Entwicklungen mit WSL/WSL2 unter Windows 10/11 hin.
SSH-Training¶
Zu Übungszwecken die folgenden Schritte abarbeiten:
ssh installiert?
Prozesse analysieren
Dienste-Verwaltung
Firewall
Eine beispielhafte Vorgehensweise mit Techniken aus der Praxis mit Linux:
1) Recherche zu ssh (Paket openssh) - ist „ssh“ installiert?
rpm -qa | grep ssh
(Vorgriff auf morgige Darstellungen zu
Paketmanagement und Softwareverwaltung) bzw. dpkg -l | grep ssh
(bei Debian)
zypper search ssh (zypper nur bei Suse!) bzw. apt search ssh (besser: openssh)
YaST Softwareverwaltung
Anm. zu openSUSE: Paket heißt auch openssh und beinhaltet sowohl ssh-Client also auch ssh-Server Software
2) Läuft der ssh-Dienst (sshd)?
ps ax | grep sshd
(zeigt uns: Nein - da läuft kein sshd!)
systemctl status sshd.service
(siehe auch andere Übungen)
3) Dienst sshd für unseren Standard-Runlevel 5 (genauer graphical.target für systemd) konfigurieren:
YaST2 - System - Dienste-Verwaltung - sshd (enable und starten) - Einstellungen sichern, oder
systemctl enable sshd.service
Neuer Test, ob sshd läuft? Ja!
4) Für Netzwerkzugriff
von ssh-Client (z.B. r203pc17 - 192.168.3.117)
auf ssh-Server (z.B. r203pc11 - 192.168.3.111)
jetzt noch die Firewall auf Serverseite mittels
YaST - Sicherheit und Benutzer - Firewall - Allowed Services (Erlaubte Dienste) konfigurieren und den Dienst „Secure Shell Server“ hinzufügen und Firewall-Konfiguration sichern.
Auf Debian-Systemen läuft keine Firewall bzw. es werden keine Pakete gefiltert!
Auf den ssh-Server dann mittels ssh Aufrufen verbinden:
ssh username@ip-adressse
(bzw. @ machinename - Anm.: ohne Leerzeichen um das @-Symbol)
(für namentliche Adressen linux11 benötigt man DNS oder /etc/hosts
Einträge)
Gerne per SSH auch Programmaufrufe inkl. Fenstermanagement (X-Server):
ssh -X ...
(erstellt ssh-Verbindung mit Fernaufruf für
X-Fenster-Programme)
Anm.: bei Erstverbindung Signatur/md5-Fingerabdruck bestätigen
Public-Key¶
Der Standard bei der Auslieferung eines SSH-Servers ist die Authentifizierung mittels Benutzername + Password. Hier gibt es das Problem, dass Kennwort zwar unleserlich als Hash-Wert auf den Systemen abgelegt sind, aber beim Zugriff auf diese Werte (siehe /etc/passwd) könnte man mit geeigneter Software und Zeit versuchen die passende Kombination (das Passwort) zu finden.
Bei der Pulic-Key-Authentifizierung erstellt ein Benutzer ein Schlüsselpaar bestehend aus
Öffentlicher Schlüssel (*.pub) wird auf Server hinterlegt
Privater Schlüssel verbleibt auf Rechner des Benutzers und sollte besonders geschützt werden (Zugriffsberechtigungen, Passphrase)
Beginnen wir mit der Erstellung von Schlüsseln auf unserer Maschine und mit dem Benutzer, mit dem wir die SSH-Verbindung erstellen wollen.

SSH Public-Key¶
SSH-Schlüssel erstellen - ssh-keygen
Das erledigt das Tool ssh-keygen
und wir erhalten standardmäßig
RSA-Schlüsselpaare.
Wir entscheiden uns für folgende Syntax mit maximaler Schlüssellänge für RSA:
ssh-keygen -t rsa -b 4096
oder alternativ: ssh-keygen -t ed25519
Man beantwortet alle Abfragen gemäß Vorgaben für die Bezeichner und Speicherorte und sollte sich bei Abfrage der Passphrase entscheiden.
Wichtig
Die Erstellung einer Passphrase erhöht weiter die Sicherheit der Public-Key-Authentifizierung. Aber natürlich muss dann beim Aufbau der SSH-Client-/Server-Verbindung eben auch diese Eingabe getätigt werden!
Die Schlüssel findet man dann in ~/.ssh
:
> ls -al ~/.ssh
total 20
drwx------ 2 joeb joeb 4096 May 22 17:15 .
drwxr-xr-x 24 joeb joeb 4096 Sep 28 17:52 ..
-rw------- 1 joeb joeb 464 May 22 17:14 id_ed25519
-rw-r--r-- 1 joeb joeb 103 May 22 17:14 id_ed25519.pub
Man erkennt gut die eingeschränkten (Oktaler Modus 600) Rechte für die privaten Schlüssel.
Jetzt muss der Schlüssel noch auf den SSH-Server.
SSH-Schlüssel kopieren - ssh-copy-id
Wir starten mit dem Standardtools für das Schlüssel-Kopieren:
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@servername
Der Effekt ist das Anfügen (inklusive Erstellen) der Datei
/home/username/.ssh/authorized_keys
Alternative Schlüssel-Kopiermethode: manuelles Kopieren und Manipulieren der authorized_keys Datei des Benutzers auf dem SSH-Server.
scp ~/.ssh/id_ed25519.pub username@servername:
(kopiert Public Key
in Home-Dir des Users)
cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys
(ggf. vorher mkdir -p ~/.ssh
)
Man sollte den Eintrag kontrollieren: cat ~/.ssh/authorized_keys
Und man sollte den kopierten öffentlichen Schlüssel löschen:
rm ~/id_ed25519.pub
SSH-Tunnel¶
Für die Durch- oder Umleitung von SSH-Verbindungen stehen uns diverse Umsetzungen zur Verfügung.
Eine Suche im Netz ergibt diverse Anleitungen und Erläuterungen zum Thema.
Beispiellink zum Thema SSH-Tunnel: Linuxize - How to Setup SSH Tunneling
Techniken:
Local Port Forwarding
Remote Port Forwarding
Dynamic Port Forwarding
Für eine Anwendung von Local Port Technik folgt hier eine beispielhafte Übung aus meinen Seminaren.
Beispielszenario Seminarumgebung:
Auf einem Rechner mit Virtualisierungstechnik (VirtualBox/Oracle, Hyper-V/Microsoft, …) läuft eine komplette Virtuelle Firmen-/Rechnerumgebung, die über einen (virtuellen) Router angebunden ist.
Eigener Rechner im Netz 192.168.2.0/24
Router mit NIC1 mit 192.168.2.254/24 und NIC2 mit 172.16.100.1/24
SSH-Server 172.167.100.10 (User: joebserver)
Frage: Wie kommen wir jetzt an Dienst von Maschinen innerhalb des internen (virtuellen) Netzes?
Lösung: Local Port Forwarding
Auf eigenem Rechner:
ssh -L 22222:172.16.100.10:22 joeb@192.168.2.254
Der Rechner (hier für die SSH-Verbindung) wird auch als Jump Server bezeichnet. Er ermöglicht uns quasi den Sprung zum Zielrechner.
Der ssh -L
Befehl öffnet lokal den Port 22222.
Hinweis
Die Local-Portnummern sollten oberhalb 1023 liegen, da die meisten Betriebssysteme die Ports 0…1023 als Systemports nutzen/schützen.
Die Verbindung zum entfernten Rechner im anderen Teilnetz stellen wir jetzt über den lokalen Port her:
ssh joebserver@localhost -p 22222
Diese Umsetzung ist nur für eine kurze manuelle Inbetriebnahme des Dienstezugriffs auf den internen Dienst geeignet, da der lokal geöffnete Port nicht dauerhaft aufrecht erhalten wird.
Das Aufrechterhalten des geöffneten Ports unterscheidet sich des Weiteren auch in den verschiedenen Betriebssystemen.
Für eine dauerhafte Verbindung eignet sich eher ein Port-Forwarding im Jump Server. Das führt aber früher oder später zu einer Verkomplizierung der Firewall-Einstellungen. Außerdem wollen wir im Idealfall auf einem Rand-Rechner eines Netzwerks nur die Ports 80, 443 und 22 offen haben! Lösungen: Reverse-Proxy / Edge-Router wie z.B. Nginx Proxy oder Traefik.
Erläuterungen siehe Traefik - Edge Router Doku
… tbc …
Dienste / Tools¶
In diesem Abschnitt wollen wir ein paar Dienste besser verstehen, die für das Linux-Wissen (oder auch LPIC) nötig sind.
… tbc …
DHCP¶
Wir interessieren uns für das (Debian-) Paket isc-dhcp-server
Anm.: für eine einfach Kombination aus DHCP und DNS kann man auch zu dnsmasq greifen.
Wir greifen aber zur vollständigen DHCP-Serverlösung.
Installation auf Maschine router
Wichtig
An richtigem Adapter (LAN-Seite) zur Verfügung stellen!
Vorbereitungen:
Konfiguration des Routers auf statische LAN-IP (z.B.): 172.16.1.1 / 24
Installation mittels apt install isc-dhcp-server
Die Installation quittiert am Ende mit Fehlern, da eine saubere Konfigurationen des DHCP-Servers noch fehlt.
root@vm-lpic-router:~# systemctl status isc-dhcp-server.service
isc-dhcp-server.service - LSB: DHCP server
Loaded: loaded (/etc/init.d/isc-dhcp-server; generated)
Active: failed (Result: exit-code) since Wed 2021-09-15 15:34:08 CEST; 35min ago
Docs: man:systemd-sysv-generator(8)
Process: 973 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=1/FAILURE)
CPU: 23ms
Sep 15 15:34:06 vm-lpic-router dhcpd[988]: before submitting a bug. These pages explain the proper
Sep 15 15:34:06 vm-lpic-router dhcpd[988]: process and the information we find helpful for debugging.
Sep 15 15:34:06 vm-lpic-router dhcpd[988]:
Sep 15 15:34:06 vm-lpic-router dhcpd[988]: exiting.
Sep 15 15:34:08 vm-lpic-router isc-dhcp-server[973]: Starting ISC DHCPv4 server: dhcpdcheck syslog for diagnostics. ...
Sep 15 15:34:08 vm-lpic-router isc-dhcp-server[993]: failed!
Sep 15 15:34:08 vm-lpic-router isc-dhcp-server[994]: failed!
Sep 15 15:34:08 vm-lpic-router systemd[1]: isc-dhcp-server.service: Control process exited, code=exited, status=1/FAILURE
Sep 15 15:34:08 vm-lpic-router systemd[1]: isc-dhcp-server.service: Failed with result 'exit-code'.
Sep 15 15:34:08 vm-lpic-router systemd[1]: Failed to start LSB: DHCP server.
Wir beginnen mit der Konfiguration des NIC-Adapters für DHCP:
/etc/default/isc-dhcp-server
(hier: LAN-seitiger eth1 von router)
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="eth1"
INTERFACESv6=""
Die eigentliche Konfiguration liegt in Standardverzeichnis:
/etc/dhcp/dhcpd.conf
Beispieleinträge / Konfigurationen (sollten vorher sauber bei Entwurf geplant werden!)
option domain-name "firma.local";
option domain-name-servers 8.8.8.8, 10.200.87.10;
...
subnet 172.16.1.0 netmask 255.255.255.0 {
range 172.16.1.100 172.16.1.200;
option routers 172.16.1.1;
}
Wichtig: in Firmennetzen mit eigenem DNS bitte später die (zweite) DNS anpassen!
Kurzanleitungen im Web für Debian und den ISC DHCP Server:
https://wiki.debian.org/de/DHCP_Server
Der DHCP-Daemon lässt sich mit den üblichen Target/Runlevel Tools analysieren:
systemctl status|restart|stop|enable|disable isc-dhcp-server
Journaling:
journalctl -u isc-dhcp-server
(Journal / Logging auslesen - Anm.: Persistenz checken bzw. konfigurieren! Status bei Debian 11: persistent!)
Übersicht zu Leases/Releases des DHCP-Servers:
/var/lib/dhcp/dhcpd.leases
(alle Infos inkl. MACs oder Lease-Times)
Tipp
Nach DHCP-Server Implementierung Test mit Clients/Servern und Analyse der IP-Konfigurationen.
Übungen/Erinnerungen: Netzwerktechnik manuell/klassisch konfigurieren
Konfiguration der Debian-Systeme auf klassische statische Konfigurationen mit Hilfe der
Konfigurationsdatei /etc/network/interfaces
Hier: Auszug aus der Konfiguration (Anm.: die Zeile auto … ist heute oft verschwunden)
.....
auto enp0s3
allow-hotplug enp0s3
iface enp0s3 inet static
address 192.168.17.10
netmask 255.255.255.0
gateway 192.168.17.1
.....
Für die Konfiguration mittels DHCP ist es:
...
auto enp0s3
allow-hotplug enp0s3
iface enp0s3 inet dhcp
...
Für diese Netze bitte auch immer die Tools kennen: ip
, ifup
, ifdown
Beachten: bei Verwendung von NetworkManager (z.B. unter Gnome-Desktop) oder netconfig oder auch netplan (siehe Ubuntu Server) dann bitte abweichende Konfigurationsdateien beachten!
Über die /etc/resolv.conf
Kommentare erkennt man recht schnell die genutzte Technik.
NAT-Routing¶
Es gibt verschiedenste Ansätze für das Firewalling/Routing mit Linux. Aktuell hat Debian sich von iptables
oder in den letzten Jahren
eigentlich iptables-nft
abgewendet und komplett für
Netfilter entschieden.
Wir müssen aber überhaupt erst einmal die Möglichkeit für die Weiterleitung von Netzwerkpaketen aktivieren.
Routing aktivieren¶
Mit einer Aktion beginnt die Konfiguration eine Routers immer: der Aktivierung von Weiterleitungen an einer Maschine mit mindestens 2 NICs.
Oder anders gesagt: Forwarding für den Linux-Kernel aktivieren - der Kernel denkt sonst gar nicht daran, Pakete zwischen den Adaptern weiterzuleiten! Hier kann man (zu Testzwecken) manuell vorgehen:
echo 1 > /proc/sys/net/ipv4/ip_forward
Oder aber persistent - also nachhaltig - in /etc/sysctl.conf
konfigurieren:
Zeile: net.ipv4.ip_forward = 1
auskommentieren
Anm.: Logik/Reihenfolge wie in /proc/sys/net/ipv4/ip_forward
mit Punkten getrennt und dann Rechner neustarten!
Netfilter¶
Nachdem die letzten Iptables auch bereits die Netfilter-Techniken der Linux-Kernel nutzten
(siehe iptables-nft
) haben die meisten Distributionen komplett auf Netfilter umgestellt.
Wir werden also über (z.B.) dpkg -l | grep nftables
die Softwareinstallation vorfinden.
Die entscheidende Frage ist aber, ober der nftables.service auch gestartet/genutzt wird?
root@vm-lpic-router:~# systemctl status nftables.service
nftables.service - nftables
Loaded: loaded (/lib/systemd/system/nftables.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2021-09-15 17:20:48 CEST; 2min 34s ago
Docs: man:nft(8)
http://wiki.nftables.org
Main PID: 994 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 2259)
Memory: 0B
CPU: 0
CGroup: /system.slice/nftables.service
Sep 15 17:20:48 vm-lpic-router systemd[1]: Starting nftables...
Sep 15 17:20:48 vm-lpic-router systemd[1]: Finished nftables.
Die Entwickler von Netfilter und Verwalter der Distributionen schlagen dann auch gleich noch firewalld
als Frontend vor. Wir bleiben aber in unseren Seminaren komplett in der Konsole bei den Basistechniken
der eigentlichen Software - also keine Oberfläche für die Firewall oder zusätzliche firewall-cmd
Aufrufe!
Hinweis
Über eine einfache Prozessliste, kann man die Netfilter-Firewall-Technik nicht finden, da
das Tool nft
nur einmal ausgeführt wird.
Die Konfiguration für Netfilter ist in /etc/nftables.conf
bei Debian
oder aber /etc/sysconfig/nftables.conf
bei CentOS/RHEL.
Wir sollten auch schauen, ob der Netfilter / nftables - Dienst läuft und ihn gegebenfalls für Starts aktivieren.
root@vm-lpic-router:~# systemctl enable nftables.service
Created symlink /etc/systemd/system/sysinit.target.wants/nftables.service → /lib/systemd/system/nftables.service.
Aktuelle Firewall-Analyse mit Tool nft
:
root@vm-lpic-router:~# nft list tables
table inet filter
root@vm-lpic-router:~# nft list table inet filter
table inet filter {
chain input {
type filter hook input priority filter; policy accept;
}
chain forward {
type filter hook forward priority filter; policy accept;
}
chain output {
type filter hook output priority filter; policy accept;
}
}
Links zu Netfilter:
https://wiki.nftables.org/wiki-nftables/index.php/Quick_reference-nftables_in_10_minutes
https://wiki.nftables.org/wiki-nftables/index.php/Moving_from_iptables_to_nftables
https://wiki.nftables.org/wiki-nftables/index.php/Simple_ruleset_for_a_server
https://wiki.nftables.org/wiki-nftables/index.php/Simple_ruleset_for_a_home_router
https://jensd.be/1086/linux/forward-a-tcp-port-to-another-ip-or-port-using-nat-with-nftables
Schematische Darstellung aus Link jensd.be:

Nftables Schema Jens D. Website¶
Aus dem Link für das Simple Ruleset for a Home Router kann man die wichtigsten Einstellungen für ein klassisches NAT-Routing entnehmen.
Im Original: This example shows the configuration of an IPv4-only home router using a ppp interface to go out to the Internet.
Wir ersetzen hier einfach das öffentliche PPP durch unsere WAN-Seite des Routers und passen die anderen Vorgaben/Einstellungen an.
Das wird unsere neue /etc/nftables.conf
:
flush ruleset
define DEV_PRIVATE = eth1
define DEV_WORLD = eth0
define NET_PRIVATE = 172.16.100.0/24
table ip global {
chain inbound_world {
# accepting ping (icmp-echo-request) for diagnostic purposes.
# However, it also lets probes discover this host is alive.
# This sample accepts them within a certain rate limit:
#
icmp type echo-request limit rate 5/second accept
# allow SSH connections from some well-known (internet) host
ip saddr 10.200.82.1 tcp dport ssh accept
# komplettem Teilnetz den Zugriff ermöglichen
# ip saddr 10.200.82.0/24 tcp dport ssh accept
}
chain inbound_private {
# accepting ping (icmp-echo-request) for diagnostic purposes.
icmp type echo-request limit rate 5/second accept
# allow DHCP, DNS and SSH from the private network
ip protocol . th dport vmap { tcp . 22 : accept, udp . 53 : accept, tcp . 53 : accept, udp . 67 : accept}
}
chain inbound {
type filter hook input priority 0; policy drop;
# Allow traffic from established and related packets, drop invalid
ct state vmap { established : accept, related : accept, invalid : drop }
# allow loopback traffic, anything else jump to chain for further evaluation
iifname vmap { lo : accept, $DEV_WORLD : jump inbound_world, $DEV_PRIVATE : jump inbound_private }
# the rest is dropped by the above policy
}
chain forward {
type filter hook forward priority 0; policy drop;
# Allow traffic from established and related packets, drop invalid
ct state vmap { established : accept, related : accept, invalid : drop }
# connections from the internal net to the internet or to other
# internal nets are allowed
iifname $DEV_PRIVATE accept
# erlaube Forwarding für DNAT
# iifname $DEV_WORLD accept
# iifname $DEV_WORLD tcp port 22 accept
# the rest is dropped by the above policy
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
# masquerade private IP addresses
ip saddr $NET_PRIVATE oifname $DEV_WORLD masquerade
}
# DNAT - Port-Forwarding
# chain prerouting {
# type nat hook prerouting priority -100; policy accept;
# ip daddr 10.100.200.1 tcp dport { 22223 } dnat to 172.16.100.10:22
# }
}
Zu beachten: im nft-Code wurde nur speziell für eine Maschine (10.200.81.1)
der Zugang per SSH ermöglicht. Nach dem Aktivieren dieses Regelsatzes
(nft list ruleset
) kann nur noch dieser PC sich per SSH mit dem
Router verbinden.
Gefahr
Noch ein kleiner Hinweis und Tipp:
Bitte niemals SSH-Zugänge komplett zumachen, wenn man keine Möglichkeiten hat noch direkt an die Maschine zu kommen!
Und falls es noch nicht gesagt wurde: Firewalling ist nicht gerade easy ;-)
Die Nftables Website schlägt für die Orientierung die folgende Grafik vor:

Nftables Schema Website: wiki.nftables.org¶
Link zum Wiki und der Darstellung mit den sogenannten Netfilter hooks.
Hinweis
Und wie bei den Schemata zu Iptables ist hier auch sehr wichtig, dass man die Darstellung als Schema für einen Netzadapter erkennt. Ein Router hat dann hiervon mindestens zwei!
Iptables¶
Wenn wir die folgenden klassischen Umsetzungen mit Iptables
(bei Debian 11) umsetzen wollen, dann sollten wir die Netfilter-Technik
komplett entfernen (apt purge nftables
) und dann mit dem Paket für
iptables
ersetzen.
Die folgenden Ausführungen zeigen die Umsetzung mit Iptables.
Die eigentliche Technik ist in den letzten Umsetzungen ebenfalls Netfilter:
eine im Kernel implementierte Softwareschicht - man nutzt quasi iptables-nft
Mit iptables kann man Regelsätze / Konfigurationen für verschiedene Tabellen erzeugen:
filter
nat
mangle
raw
Die Tabellen können mit Richtlinien (Policies) zum Behandeln von Paketen versehen werden und haben Ketten (chains) für die Paketvermittlungen.
Wir interessieren uns beim NAT-Routing für die
Tabelle filter (chain FORWARD) und die
Tabelle nat (chain POSTROUTING)

Prinzip Iptables - Tables and Chains¶
Wichtig
Die Analyse der Ketten bezieht sich immer auf einen einzelnen NIC und nicht auf zwei NICs für unser Routing! Die Skizze kann da durch eine „linke und rechte“ Seite in die Irre führen!
Wir arbeiten erst einmal mit einfachen manuellen Inbetriebnahmen der nötigen NAT-Routing-Regeln.
Für die folgenden Befehle bitte die richtigen Router-NICs beachten: (Beachten: hier allgemeine Konfigurationsdaten - nicht die aus dem Seminar!)
eth0 (oder auch enp0s3)
NIC für die WAN-Seite (z.B.: 192.168.3.201 / 24 ; StdGW: 192.168.3.1; DNS: 192.168.3.1)
Anm.: da wir gleich Masquerading nutzen, kann auch dynamisch – per DHCP – zugewiesen werden!
eth1 (oder auch enp0s8)
NIC für die LAN-Seite (z.B.: 172.16.0.1 / 16)
Wir müssen jetzt auf dem Router verschieden Konfigurationen für das NAT-Routing vornehmen.
Forwarding für den Linux-Kernel aktivieren - der Kernel denkt sonst gar nicht daran, Pakete zwischen den Adaptern weiterzuleiten: (siehe auch oben Netfilter Anleitungen)
echo 1 > /proc/sys/net/ipv4/ip_forward
bzw. persistent - also nachhaltig - in /etc/sysctl.conf
einstellen/konfigurieren:
Zeile: net.ipv4.ip_forward = 1
auskommentieren und Rechner neustarten
Forwarding von Paketen in table filter für beide Richtungen (LAN -> WAN und WAN -> LAN):
Anm.: Angabe von -t filter kann als Standardtabelle auch weggelassen werden!
iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state
RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT
Die Einstellung -m state
bezieht sich auf die Fähigkeit der Netfilter-Kernel-Technik
mittels Modul conntrack (Connection Tracking) Pakete auf Grund Ihrer
Verbindungseigenschaften (hier: „in Beziehung“ und „etabliert“) akzeptiert werden können,
ohne dass diese weiter untersucht werden müssen (siehe: Effizienz der Firewall)!
Kommen wir jetzt zum eigentlichen NATing bzw. Masquerading für die table nat:
NATing aktivieren (hier mit dynamischer WAN-Seite: Masquerading; sonst einfaches SNAT)
Für die Anbindung eines LAN mit mehreren Hosts müssen wir jetzt noch das gewünschte NAT-Routing (Erklärung: Masquerading - Kohnle - Masquerading - Erklärung ) ermöglichen:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Anm.: das sind nur sehr einfache Grundkonfigurationen, die bei weitem nicht alle Sicherheitsaspekte abdecken. (Einblick z.B. bei Red Hat Doku Firewall )
Iptables - Scripting
Für ein sauberes Skripting sollten immer erst die Ketten geleert werden.
Löschen von Tabellen: iptables -F
bzw. iptables -F -t nat
Anm.: solange die Regeln nicht persistent sind, reicht auch ein einfacher Neustart zum Flushen!
Gefahr
Vorsicht beim Löschen der Regeln, wenn diese Regeln den Zugang zum System überhaupt ermöglichen, da ggf. sonst (Policies) alle Zugriffe auf DROP (wegwerfen) konfiguriert sind!
Übung: Umsetzung der Regeln gerne als Skript: (touch nat-routing.sh
und chmod u+x nat-routing.sh
)
#!/bin/bash
# Variablen:
IPT="$(which iptables)"
WANNIC="eth0"
LANNIC="eth1"
# besser erst einmal alle Policies auf Akzeptieren:
$IPT –P INPUT ACCEPT
$IPT –P OUTPUT ACCEPT
$IPT –P FORWARD ACCEPT
# dann Tabellen filter und nat leeren
$IPT -t filter -F
$IPT -t nat -F
# und Regeln fuer NAT-Routing definieren
$IPT -t filter -A FORWARD -i $WANNIC -o $LANNIC -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -t filter -A FORWARD -i $LANNIC -o $WANNIC -j ACCEPT
$IPT -t nat -A POSTROUTING -o $WANNIC -j MASQUERADE
Tipp
iptables Regelsätze auch nach Neustarts und ohne Skriptverwaltungen mit Hilfe von iptables-persistent Paket!
Nach der Installation: apt install iptables-persistent
kann man mittels: iptables-save > /etc/iptables/rules.v4
die Regeln nachhaltig machen (persistieren)!
Anm.: Tool iptables-save
gehört zu Paket iptables und könnte auch manuell genutzt werden!
DNS¶
DNS mit dem BIND9 ( Berkeley Internet Name Daemon )
Umsetzung hier auf einem Debian System mit Standardeinstellungen nach diversen Anleitungen (z.B. Debian Wiki oder Debian Handbook - DNS )
Installation auf Debian 11 mit apt install bind9 bind9-doc bind9-dnsutils
Anm.: diverse DNS-Utilities/Tools mit Paketen dnsutils oder net-utils, dnsutils bzw. bind9-dnsutils, … (je nach Distribution und Version)
Die Konfigurationen des BIND befinden sich in: /etc/default/bind9
(allgemeine Konfigurationsdatei)
Bei systemd Nutzung bitte Aktivität/Status hinterfragen: systemctl status bind9.service
Hauptkonfigurationsordner für den Bind9: /etc/bind/
Mit zentraler Datei: /etc/bind/named.conf
Diese Zentraldatei named.conf
inkludiert drei weitere conf-Dateien, die ihrerseits die Konfigurationen enthalten:
named.conf.options
Einstellungen/Optionen für den DNS-Server
named.conf.local
hier werden Zonen erstellt, deren Definitionen dann in db.* Dateien (Aufruf mittels file) ausgelagert werden
(siehe db.firma17.local und 17.168.192.in-addr.arpa für unsere Übungsumgebung)
named.conf.default-zones
Standard-Zonen: localhost (db.local) oder 127.in-addr.arpa (db.127)
Die Inbetriebnahme / Konfigurationen unseres DNS-Servers erfolgen in drei Phasen:
Caching / Forwarding
Forward Lookup Zone
Reverse Lookup Zone
Während der Umsetzungen sollte der Firmenplan (die Doku) stets genau beachtet und aktualisiert werden.
Hinweis
Bei vorhandenen Konfigurationsdateien, die über eine leere Zeile am Ende verfügen, bitte auch nach Einarbeitung von Konfigurationen diese letzte leere Zeile beibehalten!
Caching / Forwarding¶
DNS - Teil 1 - Caching / Forwarding
Tipp: Analyse der Konfigurationen in /etc/bind
- Organisationsstruktur studieren: includes und Vorlagen.
Der Plan hier also: Einrichtung DNS als Caching DNS und DNS-Forwarder (Anm.: siehe Verhalten Home-Router DNS)
Installation und Einrichtung z.B. gemäß Anleitung
Bitte DHCP bzw. Static IPKonf beachten: da wir jetzt einen DNS-Server (z.B. : server - 172.16.100.10 / 24) haben - und diesen als DNS-Ansprechpartner haben wollen - müssen wir natürlich die Konfiguration für den DHCP Server anpassen:
# option domain-name-servers 172.16.100.10, 8.8.8.8;
option domain-name-servers 172.16.100.10;
Und alle statisch konfigurierten Netzwerkkonfigurationen müssen natürlich ggf. händisch angepasst werden.
Kommen wir jetzt zur DNS-Bind9 Konfiguration: /etc/bind/named.conf.options
Als DNS-Forwarder wird hier wieder der Google-DNS 8.8.8.8 eingetragen.
Alternativ sind auch die Firmen DNS denkbar (z.B.: 10.200.87.10). Aber: diese lokalen Firmen-DNS reagieren teilweise nicht auf die DNS-Requests! Das könnte dann eben auch an der folgenden Konfiguration mit goodclients liegen.
acl goodclients {
172.16.100.0/24;
localhost;
localnets;
};
options {
directory "/var/cache/bind";
recursion yes;
allow-query { goodclients; };
forwarders {
8.8.8.8;
};
forward only; # ggf. später auskommentieren!
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
Anm.: nur Auszug aus der Konfiguration - ausführliche Tests der Konfiguration im Netzwerk auf Client und Server.
Tipp
Bitte vor dem Neustart des Bind) den Befehl named-checkconf
durchführen!
Grund: die Konfigurationen sind sehr empfindlich und man kann sich schnell mal vertippen oder ein „;“ vergessen!
Dann Bind9 neustarten mit service bind9 restart
bzw. systemctl restart bind9
Das Journal bekommt ma mit journalctl -u named
Wenn man auch an die Anpassung des DHCP gedacht hat, dann sollte man die Umsetzung mit einem vollständig per
DHCP angebundenen Client austesten. Der ultimative DNS-Test sollte mit einer DHCP-Konfiguration stattfinden,
die nur unseren neuen DNS-Forwarder/Cache Server berücksichtigt! In der /etc/resolv.conf
des Testclients
sollte also nur unser DNS-Server auftauchen und die Auflösung für öffentlichen IP-Adressen funktionieren.
Forward Lookup Zone¶
DNS - Teil 2 - lokale Forward Zone firma.local
Beim DNS-Server (172.16.100.10) bedenken:
Für den DNS-Server selber bitte nicht die /etc/resolv.conf
vergessen und dort manuell
den Nameserver-Eintrag in der Netzwerkkonfiguratione vornehmen und testen!
Anm.: das gilt generell für alle statisch konfigurierten Maschinen (Server)!
Also bitte ggf. die Nachinstallation der gewünschten Pakete bind9-dnsutils/Debian, bind-utils/CentOS)
Die Vorgehensweise und Inhalte für die beteiligten Konfigurationsdateien in Kurzdarstellung:
in /etc/bind/named.conf.local
eine neue Forward Lookup Zone festlegen:
zone "firma.local" {
type master;
file "/etc/bind/db.firma.local";
};
Mit einer Kopie von /etc/bind/db.local
nach /etc/bind/db.firma01.local
die neue Master Zone firma01.local definieren:
;
; BIND data file for firma.local
;
$TTL 604800
@ IN SOA firma.local. root.firma.local. (
2018103100 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS server.firma.local.
@ IN A 172.16.100.10
router IN A 172.16.100.1
server IN A 172.16.100.10
opensuse IN A 172.16.1.100
debian-gnome IN A 172.16.1.101
ns1 IN CNAME server
www IN CNAME server
Hinweis
Bitte die Punkte am Ende der FQDN (Fully Qualified Domain Names) nicht vergessen!
Erinnerung: noch in den BIND-Optionen /etc/bind/named.conf.options
den Eintrag „forward only;“ auskommentieren!
Übung: Einträge für die „Übungsfirma“ eingerichtet und mit Tools (nslookup, host, dig) getestet
Anm.: (noch) keine Revers-Lookup-Zone eingerichtet! Das wäre für alle Installationen „Mail Exchanger“ aber notwendig!
Die Zone nehmen wir wieder mit named-checkconf
unter die Lupe und restarten den Nameserver mit
systemctl restart bind9
.
Testbefehle zum Überprüfen der neuen lokalen Forward Lookup Zone:
nslookup
dig
host
Hier mal ein Beispielaufruf mit dig
zum Analysieren der Inhalte eine DNS-Record:
dig @172.16.100.10 firma.local -t AXFR
Beachten: Einträge hier nicht genau passend zur Umsetzung oberhalb!
root@vm-lpic-router:~# dig @172.16.100.10 firma.local -t AXFR
; <<>> DiG 9.16.15-Debian <<>> @172.16.100.10 firma.local -t AXFR
; (1 server found)
;; global options: +cmd
firma.local. 604800 IN SOA firma.local. root.firma.local. 2021091600 604800 86400 2419200 604800
firma.local. 604800 IN NS firma.local.
firma.local. 604800 IN A 172.16.100.10
gnomy.firma.local. 604800 IN CNAME vm-debian-desktop.firma.local.
ns1.firma.local. 604800 IN CNAME vm-lpic-server.firma.local.
router.firma.local. 604800 IN CNAME vm-lpic-router.firma.local.
server.firma.local. 604800 IN CNAME vm-lpic-server.firma.local.
vm-debian-desktop.firma.local. 604800 IN A 172.16.100.100
vm-lpic-router.firma.local. 604800 IN A 172.16.100.1
vm-lpic-server.firma.local. 604800 IN A 172.16.100.10
firma.local. 604800 IN SOA firma.local. root.firma.local. 2021091600 604800 86400 2419200 604800
;; Query time: 0 msec
;; SERVER: 172.16.100.10#53(172.16.100.10)
;; WHEN: Do Sep 16 13:42:38 CEST 2021
;; XFR size: 11 records (messages 1, bytes 351)
Und jetzt benötigen wir noch die passende Reverse Lookup Zone für unsere Netzwerk-Infrastruktur.
Reverse Lookup Zone¶
DNS - Teil 3 - lokale Reverse Zone 1.16.172.in-addr.arpa
Jetzt also noch für unsere lokale Firma „firma.local“ im Netz 172.16.100.0 / 24 eine Reverse Lookup Zone definieren!
In /etc/bind/named.conf.local
muss eine weitere neue Zone festgelegt werden:
zone "100.16.172.in-addr.arpa" {
type master;
notify no;
file "/etc/bind/db.172.16.100";
};
Und jetzt noch die Reverse Lookup Zonen Datei /etc/bind/db.172.16.100
aus Kopie von /etc/bind/db.127
erstellen.
; BIND reverse data file for LAN-Subnet
;
$TTL 604800
@ IN SOA firma.local. root.firma.local. (
2018103100 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS server.firma.local.
1 IN PTR router.firma.local.
10 IN PTR server.firma.local.
100 IN PTR opensuse.firma.local.
Alles natürlich wieder mit Tools nslookup , host und dig testen!
Aufrufe: (Anm.: hier nur Standardaufrufe - gerne Manpages nutzen ;-)
nslookup (hier auch interaktive Konsole möglich)
host server bzw. host -a 172.16.1.1
dig router.firma.local bzw. dig -x 172.16.1.50
Hinweis zu Reverse Lookup Zonen und den richtigen Einträgen der Reverse-IPs: bei Subnetz 10.0.0.0 / 8 haben wir Rechner von 10.0.0.1 … 10.18.19.20 … 10.255.255.254 (ca. 16 Mio Hosts).
Die passenden Einträge in der Reverse-Zone 10.in-addr.arpa müssten lauten:
1.0.0 IN PTR router17.firma17.local.
20.19.18 IN PTR server17.firma17.local.
254.255.255 IN PTR centos17.firma17.local.
Reverse halt ;-)
Wenn man beim Testing (auch einfaches ping
) Probleme bei der Auflösung haben sollte - obwohl alle
Konfigurationen passen und viele Maschinen sauber funktionieren - dann sollte man mal die Konfiguration
der Nameserver (NS) Hosts-Auflösungen auf der Client-Seite begutachten.
DNS-Client-Technik: Suse (oder auch andere Distros) haben (in manchen Versionen)
in der /etc/nsswitch.conf
eine ungünstige Auflösungsreihenfolge für die „hosts“ eingestellt:
hosts: files mdns_minimal [NOTFOUND=return] dns
ändern in:
hosts: files dns mdns_minimal [NOTFOUND=return]
Dann stimmt und funktioniert die Reihenfolge bei der Auflösung von Hosts mit FQDN wie server.firma.local wieder.
Anm.: mdns geht in Richtung Avahi (Linux) / ZeroConf (Technikoberbegriff) / APIPA (Microsoft) / Bonjour (Apple) und soll bei der Auflösung von Namen ohne echtes DNS helfen.
… tbc …
LAMP¶
Der LAMP stellt klassisch das Rückgrat von vielen Internet- und Intranetumgebungen.
Hier mal im Kurzdurchlauf das Akronym im Einzelnen:
L - Linux (Betriebssystem)
A - Apache (Webserver)
M - MySQL / MariaDB (Datenbankserver)
P - PHP (serverseitige Skriptsprache)
Wir fangen am Ende an und schauen uns die PHP-Versionen genauer an. Status Anfang 2023: wir wollen PHP 8.1 auf unserem System. Für viele Managementsysteme und Webservice-Umgebungen auf Basis von PHP ist diese Version aktuell am attraktivsten.
Hier wieder das CMS-Enterprise-Beispiel TYPO3:
TYPO3 Roadmap mit PHP Compatibility Chart - da sieht man schön, dass man hier in der im Oktober 2021 kommenden Langzeitversion aber auch in mehreren Vorgängerversionen unterstützt wird.
Apache/PHP Basisinstallation¶
Wir installieren die PHP- und Apache-Grundumgebung
PHP 8 (CLI)
Apache2 Webserver Basis
Wir beginnen mit …
PHP
Hier: Unterstützung PHP Version 7.4 aus Debian 11 Quellen
Gefahr
PHP Version 7.4 hatte EOL 22. Nov. 2022!
Also: siehe z.B. Installanleitungen PHP 8 on Debian 10/11
https://www.linuxshelltips.com/install-php-8-debian/
mit Repo https://packages.sury.org/php/
Eine Anleitung wird in Praxis durchgespielt und dann funktioniert:
apt update
apt install php8.1-cli
# z.B. 8.1.16
php --version
Webserver Apache
Tipp
Wenn man Paket php8.1 installiert bekommt man den Apache2 gleich mit.
Hauptkonfiguration: /etc/apache2/apache2.conf
apt install apache2
# Serverstartmessage AH00558: could not reliably ...
# /etc/apache2/apache2.conf with: ServerName vm-bullseye
# Serverrelated commands:
apachectl configtest
systemctl restart apache2.service
Hier mal ein paar Meldungszeilen nach dem Install von apache2-Paket:
.....
Enabling conf serve-cgi-bin.
Enabling site 000-default.
Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /lib/systemd/system/apache2.service.
Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service → /lib/systemd/system/apache-htcacheclean.service.
Trigger für man-db (2.9.4-2) werden verarbeitet ...
Trigger für libc-bin (2.31-13) werden verarbeitet ...
root@vm-lpic-server:~# apachectl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
root@vm-lpic-server:~# cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf-bak
root@vm-lpic-server:~# vim /etc/apache2/apache2.conf
root@vm-lpic-server:~# apachectl configtest
Syntax OK
Die Grundinstallation des Apache ist jetzt vorhanden und kann von einem Client (Browser) getestet werden:

Apache läuft¶
Apache/PHP komplettieren¶
Die Software-Umgebung für den Apache-Webserver und serverseitige PHP-Umgebung vervollständigen.
PHP Pakete für Webserver Apache2 und Zusatztechniken PHP
Apache Module
PHP Konfigurationen
Hier beginnen wir mit der Software rund um PHP:
apt install php8.1 php8.1-mysql libapache2-mod-php8.1 php8.1-curl php8.1-gd
php8.1-mbstring php8.1-xml php8.1-soap php8.1-intl php8.1-zip curl php-pear
Hier mal ein paar Vorgaben zum Checken einer anspruchsvollen TYPO3- Umgebung. Wir nehmen unsere Orientierung für die Konfigurationsumgebung des Servers aus der TYPO3 System Requirements Dokumentbeschreibung.
Tipp
Alle Tests der Umgebung mit einem einfachm phpinfo()-Skript im
Root-Dir des Webservers /var/www/html/phpinfo.php
Testskript phpinfo.php
:
<?php
phpinfo()
Die zu überprüfenden Techniken lassen sich einfach per Strg + f finden/suchen.

Testskript phpinfo.php¶
Hier die TYPO3-Vorgabe: PHP Pakete für proper function
PDO (all OK and checked with phpinfo.php)
json
pcre >= 8.38
session
xml
filter
hash
SPL
standard
PHP-Pakete highly recommended:
mbstring
PHP-Pakete might installed separately:
fileinfo
gd
zip
zlib
openssl
intl
mysqli (if you use MySQL, MariaDB as DBMS)
postgresql (if you use PostgreSQL as DBMS)
sqlsrv (if you use SQL Server as DBMS)
sqlite (if you use SQLite as DBMS)
Webserver-Umgebung: Apache2 Module
Wir aktivieren die folgenden Module und reloaden/restarten abschließend den Apache:
a2enmod expires
a2enmod rewrite
a2enmod headers
systemctl reload | restart apache2
PHP-Konfiguration
Und jetzt komplettieren wir noch die PHP-Konfiguration: /etc/php/7.4/apache2/php.ini
# PHP Konfiguration:
# memory_limit set to at least 128M -> 256M
memory_limit = 256M
# max_execution_time set to at least 30 -> 240
max_execution_time = 240
# max_input_vars set to at least 1500 (von 1000 und auskommentiert)
max_input_vars = 1500
# plus von Joeb
post_max_size = 20M (statt 8M)
upload_max_filesize = 20M (statt 2M)
Selbstsignierte Zertifikate¶
SSL für Apache2 - selfsigned Certificates
Hinweis
Im Firmenumfeld signieren wir natürlich richtig, also mit gekauften Zertifikaten oder auch Lets Encrypt. Letzteres ist zwar professionell und kostenlos, benötigt allerdings einen Serviceport 80 in unser privates Netz.
Wir wollen auch per SSL (Port 443) auf unseren Server zugreifen und wollen uns für den Anfang mit einem einfachen selbst ausgestellten Zertifikat begnügen.
# Sources:
# https://wiki.ubuntuusers.de/ssl-cert/
# apt install ssl-cert ODER openssl (normaly already installed)
# https://wiki.ubuntuusers.de/Apache/mod_ssl/
a2enmod ssl
systemctl restart apache2
# using openssl like https://develike.com/en/articles/adding-a-self-signed-ssl-certificate-to-apache-on-debian-ubuntu
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/localhost.key -out /etc/ssl/certs/localhost.crt
# you may leave all Options untouched!
# then copy and modify the Apache2-SSL-Localhost/Default Configuration:
vim /etc/apache2/sites-available/default-ssl.conf
....
SSLEngine on
SSLCertificateFile /etc/ssl/certs/localhost.crt
SSLCertificateKeyFile /etc/ssl/private/localhost.key
.....
# Enable Site
a2ensite default-ssl
# Test Apache2 Configuration
apachectl configtest
# seeing Problem - then: source /etc/apache2/envvars
# Testing:
https://ip-adress OR https://servername
Da wir mit einem selbstausgestelltem Zertifikat arbeiten, quittiert der Browser dieses entsprechend und lässt uns dann eine Ausnahme hinzufügen.

Browser stutzt bei selfsigned certificates¶
Hier (Browser Mozilla Firefox) einfach auf Erweitert und Risiko akzeptieren und fortfahren klicken.
Datenbank MariaDB¶
Für das LAMP-System installieren wir uns jetzt noch eine MySQL/MariaDB Datenbank.
apt install mariadb-server mariadb-client
mysql_secure_installation
# Login Test via Shell mysql from root and Standarduser: OK
Eine beispielhafte Absicherung mittels mysql_secure_installation
:
root@vm-lpic-server:/var/www/html# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n
... skipping.
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Hier kann man sehen, dass das Securing Script aktuell netter Weise eine Abfrage zur Nutzung des Plugins unix_socket bereitstellt.
Unsere Technik sollten wir natürlich gleich wieder testen.
joebserver@vm-lpic-server:~$ mysql -u root -h localhost -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 53
Server version: 10.5.11-MariaDB-1 Debian 11
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)
MariaDB [(none)]> select user, password, host, plugin from user;
ERROR 1046 (3D000): No database selected
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]> select user, password, host, plugin from user;
+-------------+-------------------------------------------+-----------+-----------------------+
| User | Password | Host | plugin |
+-------------+-------------------------------------------+-----------+-----------------------+
| mariadb.sys | | localhost | mysql_native_password |
| root | *B4A975C0F9C44C243BCBE0F3B7EDA5CAC5073293 | localhost | mysql_native_password |
| mysql | invalid | localhost | mysql_native_password |
+-------------+-------------------------------------------+-----------+-----------------------+
3 rows in set (0.001 sec)
MariaDB [mysql]>
Neben dem von uns nutzbaren User root sieht man bei Datenbanken dann auch sogenannte Reservierte Benutzerkonten mit unterschiedlichen Nutzungen im System.
In diesem Fall findet ein SHOW CREATE USER 'mariadb.sys'@localhost;
heraus, dass das Konto deaktiviert (locked) ist.
Und das Password invalid ist nicht wörtlich zu nehmen, sondern bedeutet,
dass kein Password sauber mit SET PASSWORD
gesetzt wurde.
Graphicsmagick¶
Und weil wir uns die ganze Zeit ein wenig am Enterprise-Segment (siehe TYPO3) orientiert haben, stellen wir auch noch eine Grafikumgebung bereit.
apt install graphicsmagick
Path: /usr/bin/gm
(bitte mit Tool which gm
prüfen/checken)
… tbc …
LVM¶
Logical Volume Management
Mit LVM können wir dynamisch Partitionen verwalten/erweitern. Das macht vor Allem die Vergrößerung von Partitionen recht einfach. Für die Umsetzung gibt es diverse Anleitungen und Best Practise.
Ich benutze seit vielen Jahren die Anleitung von Hoster Thomas Krenn. Dessen Wiki finde ich immer wieder passend, solange man nicht die dargestellten Distributionen in den Beispielen aus dem Auge verliert. Aber das gilt natürlich für jede Recherche (siehe Arch Wiki, Ubuntuusers Wiki, Gentoo Wiki, …).
Der Aufbau der Technik basiert auf
Physikalisches Volume:
pv...
Volume Group:
vg...
Logical Volumen:
lv...
Übersicht aus einer Debian-Standard-Installation mit LVM und Partitionen:
root@vm-lpic-router:~# df -hx tmpfs
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
udev 942M 0 942M 0% /dev
/dev/mapper/vm--lpic--router--vg-root 23G 887M 21G 5% /
/dev/sda2 471M 49M 398M 11% /boot
/dev/mapper/vm--lpic--router--vg-var 8,0G 383M 7,2G 5% /var
/dev/mapper/vm--lpic--router--vg-tmp 1,4G 44K 1,4G 1% /tmp
/dev/mapper/vm--lpic--router--vg-home 91G 52K 86G 1% /home
/dev/sda1 511M 3,5M 508M 1% /boot/efi
root@vm-lpic-router:~# mount | grep ^/dev
/dev/mapper/vm--lpic--router--vg-root on / type ext4 (rw,relatime,errors=remount-ro)
/dev/sda2 on /boot type ext2 (rw,relatime,stripe=4)
/dev/mapper/vm--lpic--router--vg-var on /var type ext4 (rw,relatime)
/dev/mapper/vm--lpic--router--vg-tmp on /tmp type ext4 (rw,relatime)
/dev/mapper/vm--lpic--router--vg-home on /home type ext4 (rw,relatime)
/dev/sda1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
root@vm-lpic-router:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 127G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 488M 0 part /boot
└─sda3 8:3 0 126G 0 part
├─vm--lpic--router--vg-root 254:0 0 23,3G 0 lvm /
├─vm--lpic--router--vg-var 254:1 0 8,2G 0 lvm /var
├─vm--lpic--router--vg-swap_1 254:2 0 976M 0 lvm [SWAP]
├─vm--lpic--router--vg-tmp 254:3 0 1,4G 0 lvm /tmp
└─vm--lpic--router--vg-home 254:4 0 92,1G 0 lvm /home
sr0 11:0 1 1024M 0 rom
root@vm-lpic-router:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 vm-lpic-router-vg lvm2 a-- <126,02g 20,00m
root@vm-lpic-router:~# vgs
VG #PV #LV #SN Attr VSize VFree
vm-lpic-router-vg 1 5 0 wz--n- <126,02g 20,00m
root@vm-lpic-router:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home vm-lpic-router-vg -wi-ao---- 92,12g
root vm-lpic-router-vg -wi-ao---- 23,28g
swap_1 vm-lpic-router-vg -wi-ao---- 976,00m
tmp vm-lpic-router-vg -wi-ao---- <1,45g
var vm-lpic-router-vg -wi-ao---- <8,20g
Hier der Link zum TK Wiki LVM vergrößern.
Tipp
Statt df -h
nutzen wir df -hx tmpfs
- das ist übersichtlicher!
Kurzanleitung - Zusammenfassung der Schritte (von der Website)
Vergrößern / Hinzufügen von Festplattenspeicher (auf physikalischer oder virtueller Ebene)
Neustarten der Maschine, damit der zusätzliche Festplattenspeicher erkannt wird
Erstellen einer weiteren Partition z. B. mittels
cfdisk
Partitionstabelle neu Einlesen, z. B. per Reboot oder per Kommando
partprobe
Initialisieren einer neuen PV mittels
pvcreate
Vergrößern der VG mittels
vgextend
Vergrößern des LV mittels
lvextend
(bzw.xfs_growfs
)Vergrößern des Dateisystems z. B. mittels
resize2fs
Cron¶
Wir wollen den Service cron nutzen - einen Dienst, der automatisch Programme oder auch Skripte terminlich startet.
Aber es gibt natürlich auch Alternativen zu Cron (s.u.).
Guter Einstieg ist wieder über das Ubuntuusers Wiki zu Cron möglich.
Die Systemkonfiguration zu Cron findet sich (natürlich) in /etc/cron
.
Das Tool für Benutzer und Systemuser ist crontab
Tipp
Vor der Nutzung von crontab
bitte unbedingt mit dem VIm
Editor beschäftigen!
Bei den Skriptaufrufen bitte unbedingt absolute Pfade nutzen
Wenn Skript gar nicht will:
/bin/bash --login /pfad/script.sh
Bei Datum/Uhrzeit Formaten mit
%
bitte die Prozente mit\%
Links mit Infos und Anleitungen rund um Cronjobs:
Auch mit Tools wie Webmin oder anderen Server-Dashboards kann man seine Jobs zusammenklicken.
Es gibt auch Schlüsselworte für das Definieren von Schedules:
@reboot
@daily
@hourly
weitere Schlüssel verfügbar …
Hinweis
Die Cronjobs können nur ausgeführt werden, wenn der Rechner zur Ausführungszeit läuft!
Alternativen zu Cron:
Anacron - hier werden die Jobs auch nachträglich ausgeführt
Für Anachron benötigt man (eigentlich) Root-Rechte: die Skripte/Programme werden einfach in die entsprechenden
/etc/...
Ordner verlinkt.at
- Kommandozeilentool zum manuellen Schedulingsystemd/Timers - spezielle Systemd Units
Die aktuellen Systemd/Timer auflisten lassen:
systemctl list-timers
Dashboards¶
Jetzt geht es um den Komfort bei der Verwaltung und Analyse der Linux-Systeme. Aber mit einem einführenden großen ABER.
Jede Verwaltungsoberfläche bietet natürlich auch immer Ansatz für Sicherheitsprobleme. Und mit jedem geöffnetem Port werden die Systeme unübersichtlicher und angreifbarer.
Tipp
Unsere Netze sollten eigentlich am Ende nur über die Webports 80 + 443 sowie natürlich per SSH Port 22 erreichbar sein. Alles weitere erledigt hoffentlich später Edge-Router oder auch Reverse Proxy.
Webmin¶
Einer der ältesten und bekanntesten Vertreter dieser Zunft.
Für die jeweilige Installation bitte die Dokumentation bemühen.
Webmin listet 110+ Module für die verschiedensten Verwaltungen auf.
Im Grunde handelt es sich bei Webmin um ein Perl-Skript:
/usr/share/webmin/miniserv.pl
Und man startet | stoppt es am Besten erst einmal manuell per:
/etc/webmin/start
bzw. /etc/webmin/stop
bitte nach Neustarts die Prozesse nach webmin
durchsuchen.
Später ließe sich auch eine SystemD-Unit basteln, wenn man unbedingt wollte.
Cockpit¶
Ein moderner Vertreter der Dashboards.
Für die jeweilige Installation bitte wieder die Doku beachten.
Cockpit Info zu Installationen
Hinweis
Bei Debian wird ein bullseye-backports
Repository
eingebunden, was bei der Installation und den späteren Updates
berücksichtig werden muss (apt install -t bullseye-backports cockpit
).
Und generell sollte man mit Installationen aus Backports sparsam umgehen: Wiki Debian - Backports.
LPIC Übersicht¶
Infos zu Seminaren und dem Zertifikat des Linux Professional International Certificate.
Die hier folgenden Darstellungen finden sich (sehr wahrscheinlich) auch in anderen Abschnitten.
In diesem Kapitel möchte ich mich jeweils auf die Besonderheiten von Linux durch die Brille LPIC konzentrieren und auf bestimmte Darstellungen und Vertiefungen konzentrieren, die das Bestehen der Prüfungen in diesem Bereich erleichtern sollen.

LPI Website (de); Quelle: lpi.org¶
Man findet das LPI im Web unter
International - lpi.org
Deutsch - de.lpi.org
- Für das Ablegen der Zertifikate / Teilzertifikate benötigt man einen
Account beim LPI (LPI-ID).
Die Zertifikate LPIC-1 und LPIC-2 bestehen jeweils aus zwei Teilzertifikaten und sind (aktuell) 5 Jahre gültig.
Die Wiki-Seiten halten auch deutschsprachige Curriculi vor. Die Gültigkeitsdauer für die Gesamtzertifikate beträgt (aktuell) 5 Jahre und kann durch die Ablage eines beliebigen Teilzertifikates (Wiederholung oder aufbauend) erneuert werden.
Die Prüfungen können in Testcentern (siehe Person Vue), Online (Einschränkungen durch Corona - weitere Erklärungen bei Anbietern) und auch schriftlich (siehe LPI Events, Linux User Groups, Uni-Angebote, Messen) abgelegt werden.
Eine bestandene Prüfung benötigt 500 Punkte und enthält 60 Fragen. Wegen unterschiedlicher Gewichtung kann man zwischen 200 und 800 Punkten in den Prüfungen erreichen.
… tbc …
LPIC-Training¶
Für das Training benötigen wir Linux-Umgebungen, die man unterschiedlich bereitstellen kann.
(alte) Testhardware für Bare Metal-Installationen
Virtualisierungen nutzen für Demoinstalls
Shell-Übungen unter Windows mit WSL / WSL2
Tipp
Man sollte in den eigenen Testumgebungen alle nötigen Techniken für die praktischen Übungen rund um die LPIC-Zertifikate bereitstellen.
Diese Analysen - und einige andere Erwägungen - führen zu den folgenden Empfehlung von Distributionen für Test- und Übungs-Installationen:
Debian 11 (Bullseye) - DEB-Package-Management, SystemD, …
openSUSE 15.x (Leap) - RPM-Package-Management mit zypper
CentOS 7 - für klass. RPM-Package-Management mit yum (EOL: 30. Juni 2024)
antiX Linux oder MX Linux - Linux-Alternativen für SysVInit (und alte PCs)
Anm.: CentOS 6 - für SysVInit wurde nur noch bis 30. November 2020 unterstützt (EOL - End of Life)!

Hyper-V basierte Testinstallationen¶
LPIC-1¶
Infos zu Seminaren und dem Zertifikat des Linux Professional International Certificate - hier:
LPIC-1 - LPIC-1 Objectives V5.0 (Version 5.0) besteht aus den Modulen
Modul 101-500
Modul 102-500
Topics für Gesamt-Zertifikat LPIC-1 in Version 5.0
die Architektur eines Linux-Systems verstehen
eine Linux-Workstation einschließlich X11 installieren, warten und als Netzwerk-Client einrichten können
auf der Linux-Befehlszeile arbeiten können, einschließlich gängiger GNU- und Unix-Befehle
mit Dateien und Zugriffsberechtigungen sowie der Systemsicherheit umgehen können; und
einfache Wartungsaufgaben durchführen können: Hilfe für Benutzer, Hinzufügen von Benutzern zu einem größeren System, Backup und Wiederherstellung, Herunterfahren und Neustart.
Für die Module des LPIC-1 werden verschiedene Aspekte der Linux-Verwaltung verlangt:
Softwareverwaltungen kennen mit
rpm (yum) - klassisch Red Hat Distros
dnf - klassisch bei Red Hat Fedora oder RHEL / CentOS 8
deb (apt Tools) - klassisch Debian oder Derivate (wie Ubuntu)
zypper - Suse (SLES bzw. openSUSE)
Urprozess-Verwaltungen mit
klassischen SysVinit - also Runlevel mit Urprozess init (noch möglich mit CentOS-Alternative oder MX Linux, antiX Linux)
optimiertes, moderneres SystemD - also Targets und Units verwalten mit systemctl
Datenträgerverwaltung mit Linux
Partitionierungen
Geräte
Mounten von Datenträgern
Benutzer- und Gruppen in Linux
Grub - Starten von Linux mit Standard-Bootloader
klassischer Grub mit einfachen Textkonfigurationen (noch möglich mit CentOS 6)
Grub2 mit sehr komplexen Konfigurations- und Bootmechanismen
Shell - das Nutzen der Befehlszeile
Nutzung zur Analyse und Administration
Einfaches Skripting zur Lösung von Aufgaben oder in Cron-Jobs
Einsatz und Kombination von Shell-Tools (Pipes)
Textverarbeitung (VIm) und Textveränderungen
Desktops und deren Managements kennen
KDE bzw. KDE Plasma - z.B. openSUSE, Kubuntu, …
Gnome (aktuell Gnome 3) - z.B. Debian, CentOS 7, …
Systemverwaltung
Netzwerktechnik
Systemdienste und Protokolle/Logging
Sicherheit
Und alles zusammen verteilt sich auf die beiden Module …
LPIC-1 Modul 101¶
Eine Übersicht über die Inhalte des Moduls LPIC-1 101-500 (Version 5.0) auf LPIC-Webportalen:
Seminar 101 - Praxis:
Ich versuche unsere Seminare immer stark an der Praxis zu orientieren und mit Hilfe praktischer Übungen umzusetzen.
Für die Inhalte des 101 sollten wir die LPIC-üblichen Distributionen (Debian, CentOS, openSUSE) installieren und administrieren.
Wir sollten uns in die Befehlszeile (Terminal, Konsole) einarbeiten und diese zur Administration/Konfiguration und Analyse der Systeme nutzen.
Lernziele (Grob- und Feinlernziele)
101: Systemarchitektur
101.1 Hardwareeinstellungen ermitteln und konfigurieren
101.2 Das System starten
101.3 Runlevel wechseln und das System anhalten oder neu starten
102: Linux-Installation und -Paketverwaltung
102.1 Festplattenaufteilung planen
102.2 Einen Bootmanager installieren
102.3 Shared Libraries verwalten
102.4 Debian-Paketverwaltung verwenden
102.5 RPM und YUM-Paketverwaltung verwenden
102.6 Linux als Virtualisierungs-Gast
103: GNU- und Unix-Befehle
103.1 Auf der Befehlszeile arbeiten
103.2 Textströme mit Filtern verarbeiten
103.3 Grundlegende Dateiverwaltung
103.4 Ströme, Pipes und Umleitungen verwenden
103.5 Prozesse erzeugen, überwachen und beenden
103.6 Prozess-Ausführungsprioritäten ändern
103.7 Textdateien mit regulären Ausdrücken durchsuchen
103.8 Grundlegendes Editieren von Dateien
104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
104.1 Partitionen und Dateisysteme anlegen
104.2 Die Integrität von Dateisystemen sichern
104.3 Das Mounten und Unmounten von Dateisystemen steuern
104.4 Entfernt
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten
104.6 Symbolische und Hardlinks anlegen und ändern
104.7 Systemdateien finden und Dateien am richtigen Ort plazieren
LPIC-1 Modul 102¶
Eine Übersicht über die Inhalte des Moduls LPIC-1 102-500 (Version 5.0) auf LPIC-Webportalen:
Seminar 102 - Praxis:
Ich versuche unsere Seminare immer stark an der Praxis zu orientieren und mit Hilfe praktischer Übungen an Hand der klassischen LPIC-Distributionen (Debian, CentOS, openSUSE) umzusetzen.
Obwohl es in den Lernzielen des 102 eher um die Client-seitigen Konfigurationen und Techniken geht, nutze ich in diesem Modul gerne bereits die Dienste/Services in den praktischen Übungen.
Ich halte das für die ganzheitlichere und anregendere Umsetzung. Aber natürlich gilt immer, dass die Interessen und Schwerpunkte der Trainees Berücksichtigung finden.
Lernziele (Grob- und Feinlernziele)
105: Shells und Shell-Skripte
105.1 Die Shell-Umgebung anpassen und verwenden
105.2 Einfache Skripte anpassen oder schreiben
106: Benutzerschnittstellen und Desktops
106.1 X11 installieren und konfigurieren
106.2 Grafische Desktops
106.3 Barrierefreiheit
107: Administrative Aufgaben
107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten
107.2 Systemadministrationsaufgaben durch Einplanen von Jobs automatisieren
107.3 Lokalisierung und Internationalisierung
108: Grundlegende Systemdienste
108.1 Die Systemzeit verwalten
108.2 Systemprotokollierung
108.3 Grundlagen von Mail Transfer Agents (MTA)
108.4 Drucker und Druckvorgänge verwalten
109: Netzwerkgrundlagen
109.1 Grundlagen von Internetprotokollen
109.2 Persistente Netzwerkkonfiguration
109.3 Grundlegende Netzwerkfehlerbehebung
109.4 Clientseitiges DNS konfigurieren
110: Sicherheit
110.1 Administrationsaufgaben für Sicherheit durchführen
110.2 Einen Rechner absichern
110.3 Daten durch Verschlüsselung schützen
… tbc …
LPIC-2¶
Infos zu Seminaren und dem Zertifikat des Linux Professional International Certificate - hier:
LPIC-2 - LPIC-2 Objectives V4.5
201
202
Topics LPIC-2 (Version 4.5)
erweiterte Systemadministration durchführen, einschließlich allgemeiner Aufgaben in Bezug auf den Linux-Kernel, Systemstart und Wartung
erweitertes Management von Blockspeicher- und Dateisystemen sowie erweiterte Netzwerk- und Authentifizierungsfunktionen und Systemsicherheit einschließlich Firewall und VPN
grundlegende Netzwerkdienste installieren und konfigurieren, einschließlich DHCP, DNS, SSH, Webserver, Dateiserver mit FTP, NFS und Samba, E-Mail-Zustellung
überwachen von Assistenten und beraten der Geschäftsleitung bei der Automatisierung und dem Einkauf
Hinweis
Da die Trainees und ich den Einsatz von praktischen Umsetzungen schätzen, schule ich die grundsätzliche Installation und Nutzung von Infrastrukturdiensten (auch) in LPIC-1 Modul 102).
… tbc …
LPIC Homelab¶
Hier mal ein Entwurfsszenario aus einem meiner Seminare zum LPIC-1 (102).
Hinweis
Die genutzten Services kommen in Tiefe erst im LPIC-2 vor. Aber ich nutze mit kompakten vorbereiteten Anleitungen diese Infrastruktur auch als Praxis-Labor für verschiedene Seminare!
Alle Installationen werden von den Teilnehmern durchgeführt und konfiguriert.
Planungsentwurf (Topologie) mit LibreOffice Draw:

Topologie Virtuelle Firma für LPIC-1 Modul 102¶
Die kompletten Installationen können von den Teilnehmern per Hyper-V-Exporte am Seminarende gesichert und digital (z.B. USB-Stick) mit nach Hause* genommen werden.
Hier ein vergleichbares Entwurfsszenario (als Scribble) aus einem Seminar zum LPIC-1 (102):

Hyper-V basierte Virtuelle Firma für LPIC-1 Modul 102¶
Arch Linux Distro¶
Wer an dieser Stelle in meiner Ausarbeitung gelandet ist, fragt mit Recht: „Warum soll ich Arch Linux nutzen/ausprobieren?“.
Hier für den Einstieg mal ein paar Stichworte:
Unabhängige Entwicklergemeinschaft gemäß GNU/Linux
KISS - Keep it Simple Stupid https://wiki.archlinux.de/title/KISS-Prinzip
Arch Portal mit sehr gutem Arch Wiki
Anm.: neben dem Arch Wiki könnte für die Nutzer beliebiger Linux-Distributionen auch das Gentoo Wiki interessant sein
Software Verfügbarkeit: Standard Repo + AUR liefern aktuelle stabile Versionen für Software
Rolling Releases (Anm.: keine Versionierungen mit Updates/Upgrades)
pacman verlangt weniger Tippen:
pacman -Syu
aktualisierte Repo + SoftwareBuild from Scratch meint: man startet mit Minimalsystem (ohne Installer) und hat nur die selbst installierte Software im System
Weitere Einblicke mittels Wiki Arch Linux: Arch explained
Wer sollte den Einsatz von Arch Linux überdenken:
Keine Rolling Releases gewünscht (Anm.: Rolling Releases können auch mal instabil sein)
Absolut nur Free Software gewünscht (siehe z.B. FSF Directory SW)
Keine Lust/Zeit/Möglichkeit für RTFM Lösungen (Bitte Manuals / Arch Wiki studieren)
Man benötigt Installer- und Verwaltungstools mit Grafikoberflächen
Man will nicht als Linux Freak, Geek oder Nerd bezeichnet werden ;-)
… tbc …
Arch Derivate¶
Arch Linux ist die sogenannte Vanilla Arch Variante. Das heißt es ist die Original- und Ursprungs-Variante für Arch Technik.
Und für eine solch erfolgreiche Grundidee für die Umsetzung von Linux finden sich auch immer wieder Entwicklergemeinschaften, die versuchen das Original zu verbessern.
Die folgenden Arch-Derivate versuchen also mit speziellen Zusatztools wie z.B dem Installer Calamares oder besonderen Desktops die Gunst von Arch Nutzern zu gewinnnen.
Manjaro - Manjaro Portal
Manjaro auf Distrowatch - Text auf Distrowatch (engl.):
Manjaro Linux is a fast, user-friendly, desktop-oriented operating system based on Arch Linux. Key features include intuitive installation process, automatic hardware detection, stable rolling-release model, ability to install multiple kernels, special Bash scripts for managing graphics drivers and extensive desktop configurability.
Manjaro Linux offers Xfce as the core desktop options, as well as KDE, GNOME and a minimalist Net edition for more advanced users. Community-supported desktop flavours are also available.
Weitere Infos:
Manjaro hat insbesondere im deutschsprachigem Raum viele Nutzer und Unterstützer.
EndeavourOS - Endeavour Portal
Endeavour auf Distrowatch - Text auf Distrowatch (engl.):
EndeavourOS is a rolling release Linux distribution based on Arch Linux. The project aims to be a spiritual successor to Antergos - providing an easy setup and pre-configured desktop environment on an Arch base.
EndeavourOS offers both off-line and on-line install options. The off-line installer, Calamares, uses the Xfce desktop by default. The on-line installer can install optional software components, including most popular desktop environments.
Weitere Infos:
Bei EndeavourOS kann man ebenfalls mit bereitgestellten Tools relativ einfach verschiedene Desktops und/oder Window Manager austesten.
Arco Linux - Arco Linux Portal
Arco Linux auf Distrowatch - Text auf Distrowatch (engl.):
ArcoLinux (previously known as ArchMerge) is a distribution based on Arch Linux. The development takes places in three branches - ArcoLinux, ArcoLinuxD and ArcoLinuxB. ArcoLinux is a full-featured distribution that ships with the Xfce desktop (as well as Openbox and i3 window managers).
ArcoLinuxD (ArcoLinuxD Portal) is a minimal distribution that includes scripts that enable power users to install any desktop and application.
ArcoLinuxB (ArcoLinuxB Portal) is a project that gives users the power to build custom distributions, while also developing several community editions with pre-configured desktops, such as Awesome, bspwm, Budgie, Cinnamon, Deepin, GNOME, MATE and KDE Plasma.
ArcoLinux also provides various video tutorials as it places strong focus on learning and acquiring Linux skills.
Weitere Infos:
Mit ArcoLinuxD lassen sich über einen speziellen Installer arcolinux-tweak-tool
sehr einfach viele WM parallel installieren. Leider sind die meisten mit einer
speziellen Panel-Lösung namens polybar maßgeschneidert, deren Nutzung und
Konfiguration sich oft nicht einfach auf eigene Systeme übernehmen lässt.
Garuda Linux - Garuda Linux Portal
Garuda Linux auf Distrowatch - Text auf Distrowatch (engl.):
Garuda Linux is a rolling distribution based on the Arch Linux operating system. Unlike Arch Linux, Garuda Linux comes with a graphical installer (Calamares) for easy installation, and other advanced graphical tools for managing your system. Garuda is a performance-oriented distro with many performance enhancing tweaks. Some of the many tweaks include using zram, a performance CPU governor, along with custom memory management software. Garuda Linux has striven to provide system stability by including the Timeshift backup utility. torials as it places strong focus on learning and acquiring Linux skills.
Weitere Infos:
Garuda Linux lockt mit schönen Desktops, die immer ein wenig in Richtung MacOS schielen und grafisch aufwendig gestylt sind.
Die Standard-Desktops verlangen (wie fast immer) moderne Hardware inklusive Graphiktechnik und sind somit leider in virtuellen Umgebungen schwerlich genießbar.
Aber Garuda Linux bietet auch ISOs mit XFCE, LXqt, Bspwm, Qtile oder auch i3 an.
Und natürlich ist diese Auflistung auch ohne Anspruch auf Vollständigkeit, wie eine einfache Arch-Distrowatch-Suche zeigt.
… tbc …
Arch pacman¶
Erst einmal verhält sich Arch wie jede Linux Distro: Arch stellt Pakete mit Software über Repositories bereit und hat Tools für die Verwaltung des Package Managements.
pacman - das Basistool für das Packagemanagement
Die Arch-Gemeinschaften bieten genügend Infos rund um pacman, sodass ich mich hier auf eine kurze Darstellung und Verlinkungen konzentrieren kann.
Insbesondere mit dem letzten Infolink sollten alle Linux-User aus anderen Package-Managements eine schnelle Adaption von pacman in der Konsole möglich sein.

pacman - Basic Commands¶
Die Darstellungen auf dem pacman Arch Wiki Portal sind deutlich länger und decken im Grunde alle nötigen Tätigkeiten im Package Management ab.
Alles Weitere lässt sich erstaunlich schnell recherchieren, da Arch Linux eben eine extrem aktive Community besitzt.
Arch AUR¶
Die Zentrale für das AUR - Arch User Repository: https://wiki.archlinux.org/index.php/Arch_User_Repository
Hier der O-Ton von der Arch Wiki Website für das AUR: Arch Wiki Arch User Repository
The Arch User Repository (AUR) is a community-driven repository for Arch users. It contains package descriptions (PKGBUILDs) that allow you to compile a package from source with makepkg and then install it via pacman. The AUR was created to organize and share new packages from the community and to help expedite popular packages‘ inclusion into the community repository. This document explains how users can access and utilize the AUR.
A good number of new packages that enter the official repositories start in the AUR. In the AUR, users are able to contribute their own package builds (PKGBUILD and related files). The AUR community has the ability to vote for packages in the AUR. If a package becomes popular enough — provided it has a compatible license and good packaging technique — it may be entered into the community repository (directly accessible by pacman or abs).
Gefahr
Warning: AUR packages are user produced content. These PKGBUILDs are completely unofficial and have not been thoroughly vetted. Any use of the provided files is at your own risk.
Dem ist nichts mehr hinzuzufügen…
AUR nutzen
https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_and_upgrading_packages
Die nötigen Install-Dateien auf dem eigenen System bereitstellen
per git clone
per curl einen Snapshat (*.tar.gz) und mit tar entpacken
Wir klonen:
$ git clone https://aur.archlinux.org/package_name.git
$ cd package_name
$ less PKGBUILD
Hinweis
Signaturen beachten und die Inhalte von PKGBUILD und den .install files beachten
Wir bauen die Software mit:
$ makepkg -si
-s
- synchronisiert Abhängigkeiten-i
- installiertAlternative: the built package installieren mit
pacman -U package_name.pkg.tar.zst
AUR Packages aktualisieren
Neueste Version pullen:
$ git pull
$ makepkg -si
AUR Helper bereitstellen - AUR Hilfsprogramme
https://wiki.archlinux.de/title/AUR_Hilfsprogramme
Ich entscheide mich für yay - sehr modern in GO programmiert und umgesetzt. Die Syntax ist komplett an pacman angelehnt und lässt sich daher sehr einfach nutzen. Oft kann man Parameter auch einfach weglassen.
Suchen nach yay im AUR: https://aur.archlinux.org/packages/?O=0&K=yay
yay gemäß Anleitung oben bereitstellen - hier genauer yay-git (Developer Version) statt yay
git clone https://aur.archlinux.org/yay-git.git # oder: ./yay.git
cd yay-git # oder: cd yay
# Erinnerung: Analyse/Einsicht in Install-Configs
makepkg -si
yay nutzen
Beispiel: Picom Alternative von Entwickler Jonaburg bereitstellen (Runde Ecken + Animationen)
git clone https://aur.archlinux.org/picom-jonaburg-git.git
cd picom-jonaburg-git
# Erinnerung: Analyse/Einsicht in Install-Configs
makepkg -si
Erinnerung: diese Picom-Variante benutzt eine eigene picom.conf
mit Zusatzeinträgen.
…tbc…
Arch Installation¶
Für die Arch Installationen existieren sehr viele Darstellungen und Videos im Web.
Startpunkt für die eigenen Überlegungen sollte bei Arch immer das eigene Wiki sein. Hier gibt es einen ausführlichen Installation Guide Arch Wiki.
Tipp
Ich empfehle die Orientierung an den englischsprachigen Original-Einträgen im Arch-Wiki.
Hier mal zwei Beispiele für Darstellungen im Web:
Für meine Darstellungen gebe ich bestimmte Parameter für die Installation vor, damit die Darstellungen 1-zu-1 nachvollziehbar sind.
Hierfür benutze ich Virtualisierungstechnik. Und da in den allermeisten meiner Schulungen als Virtualisierung die Hyper-V Technik von Microsoft vorinstalliert / bereitgestellt wird, habe ich mich für diesen Hypervisor (techn.: Hypervisor Typ 1) entschieden.
Ich werde allerdings auch alternative Anmerkungen hinterlegen, damit man die Installationsanleitung auch auf physikalischen Maschinen (Bare Metal) oder mit VirtualBox, Vmware oder KVM/qemu nachvollziehen kann.
Hier der Installationsplan:
Installation als Hyper-V VM (s.a. Arch Wiki - Hyper-V)
Nutzung von Typ Generation 2: UEFI Installation
Partitionierung mit LVM (Logical Volume Management)
Verschlüsselung (encrypt) mit luks
Ich versuche also alle möglichen Techniken zu implementieren und man selber kann dann für die eigenen Installationen die eine oder auch andere Technik weglassen / überspringen.
Hinweis
Und natürlich kann man (teilweise) auch die Reihenfolgen bei den Installationen tauschen oder zusammenfassen!
Und los geht es …
Arch Hyper-V VM¶
Wir legen uns eine neue Hyper-V-VM für die Arch-Installation an. Hierfür kann man Alles
in der Konsole über PowerShell-Befehle für den Hyper-V (Get-Command *-VM*
) erledigen,
oder man nutzt einfach den Hyper-V-Manager.
Hyper-V-VM
Checkliste für neue VM:
Generation 2 für UEFI Unterstützung
Automatische Snapshots deaktivieren
Arch-ISO als DVD einhängen
RAM: min. 1GB besser mehr ;-)
CPU Kerne: gerne mehr als 1 Kern ;-)
VHDX: Standardgröße (127 GB)
Netzwerk per Default Switch (Hyper-V auf Windows 10)
Deaktivieren von Secure Boot
Bootsequence optimieren: (1) DVD/ISO (2) HD (3) Netzwerk
Das sollte dann ungefähr so aussehen:

Arch Hyper-V VM¶
Dann können wir die VM starten: Option Arch Linux install medium (x86_64, UEFI)
Tipp
Falls das VM-Fenster mal schwarz bleibt, dann entweder kurz schließen und über den Hyper-V-Manager wieder starten. Oder sogar die Maschine kurz per Schaltfläche Speichern und dann wieder starten.
Und nach dem Boot-Prozess sollte uns ein einfaches Live-System mit Root-Konsole begrüßen:

Arch Root Konsole¶
Schnell mal Netzwerk checken mit ip a s
und/oder ping -c 5 www.bahn.de
.
Und damit kann es dann jetzt richtig losgehen mit der eigentlichen Basisinstallation.
Arch Basisinstallation¶
Als erstes sollten wir uns eine deutsche Tastaturbelegung einstellen.
Tipp
Der Bindestrich (-) liegt auf ß bei englischem Layout. Eine gewisse Ahnung über die englische Tastenbelegung kann immer mal wichtig und hilfreich sein!
Wir nutzen das Tool loadkeys
: (Beachten: y und z noch vertauscht!)
loadkeys de-latin1
Test der Paketverwaltung mit Tool pacman
: (Repos auffrischen)
pacman -Syyy
Das sollte recht fix gehen. Wenn nicht sollte man /etc/pacman.d/mirrorlist
bearbeiten und die Server in der Nähe bevorzugen.
Partitionsplan für Standard-VHDX der Hyper-V-VM (127 GB):
EFI System Partition (ESP:
/boot/EFI
): 500 MBBoot Partition (
/boot
): 500 MBLVM Partition: Rest als Physical Volume für lvm2
Die verfügbaren Laufwerke lassen sich (z.B.) mit lsblk
auflisten.
Bei der frischen VM-HDD sollte es sich um das Device /dev/sda
handeln.
Partitionierung mit Tools:
fdisk (für MBR empfohlen)
gdisk (für EFI empfohlen)
cfdisk
Kurzdarstellung gdisk mit Aufruf gdisk /dev/sda
o - erstellt neue leere GUID Partition Table (GPT)
n - erstellt neue Partition
t - Partitionstypen: ef00 (EFI/ESP), 8300 (Linux filesystem), 8e00 (Linux LVM)
w - schreiben der Partitionen
mkfs - Make Filesystems - Erste Dateisysteme formatieren:
mkfs.fat -F32 /dev/sda1 # EFI/ESP-Partition
mkfs.ext4 /dev/sda2 # Boot-Partition
Wir wollen das /dev/sda3
per LVM und mit Encryption nutzen.
Falls man die Encryption
weglässt bezieht man sich später immer direkt auf das Gerät /dev/sda3
.
Gefahr
Encryption / Verschlüsselung: (bei Passphrase konzentrieren / Tastaturbelegung / CapsLock)
cryptsetup luksFormat /dev/sda3 # HINT: Passphrase !!IMPORTANT!!
cryptsetup open --type=luks /dev/sda3 lvm # lvm a name for pv our setup
LVM (alternativ auch Befehle ohne Encryption Volume)
Wir erstellen der Reihe nach
Physical Volume (Tools:
pv...
)Volume Group (Tools:
vg...
)Logical Volume (Tools:
lv...
)
pvcreate /dev/mapper/lvm # sonst: pvcreate /dev/sda3
vgcreate volgroup0 /dev/mapper/lvm # sonst: vgcreate volgroup0 /dev/sda3
lvcreate -L 40GB volgroup0 -n lv_root
lvcreate -L 50GB volgroup0 -n lv_home # ca. 30% frei für ggf. LVM Snapshots
# Rest der VG komplett nutzen: lvcreate -l 100%FREE volgroup0 -n lv_home
Die beiden Logical Volumes für root und home formatieren:
mkfs.ext4 /dev/volgroup0/lv_root
mkfs.ext4 /dev/volgroup0/lv_home
Jetzt müssen wir die Volumes mounten und hierfür ggf. entsprechende Verzeichnisse bereitstellen:
mount /dev/volgroup0/lv_root /mnt
mkdir /mnt/home
mount /dev/volgroup0/lv_home /mnt/home
mkdir /mnt/boot
mount /dev/sda2 /mnt/boot
Speziell müssen wir an die spätere /etc/fstab
denken:
mkdir /mnt/etc
genfstab -U -p /mnt >> /mnt/etc/fstab
Das sollte man auf jeden Fall mal checken mit cat /mnt/etc/fstab
!
Und jetzt geht weiter mit:
Bootstrapping des Systems mit dem Arch-Tool
pacstrap
Ch-Rooten mit Arch-Tool
arch-chroot
pacstrap -i /mnt base linux linux-firmware # gerne auch: linux-lts
arch-chroot /mnt # Wechsel in Root-Dir
Install-Tests und Vervollständigen des Systems mit weiterer Software:
pacman -S nano vim linux-headers base-devel dialog # ggf. auch linux-lts-headers
Anm.: hier könnte man auch gleich Pakete wie openssh oder networkmanager … installieren.
Vorbereitungen LVM - Kernel mit LVM bauen
pacman -S lvm2
nano /etc/mkinitcpio.conf # Change: HOOKS=" .... block encrypt lvm2 filesystem ....)
mkinitcpio -p linux
# mkinitcpio -p linux-lts # if you installed linux-lts
Sprache, Tastatur, Clock
# locales - de_DE.UTF8 UTF-8 auskommentieren
nano /etc/locale.gen
locale-gen
# LANG auskommentieren in /etc/locale.conf oder einfach
echo LANG=de_DE.UTF-8 > /etc/locale.conf
# no dead keys - dann kann man Akzentzeichen aus 2 Zeichen zusammensetzen
echo KEYMAP=de-latin1-nodeadkeys > /etc/vconsole.conf
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
# setting the hardware clock
hwclock --systohc
hostname & hosts
Bearbeiten nano /etc/hostname
(oder natürlich mit Vim)
archvbox
Bearbeiten nano /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 archvbox.localdomain archvbox
Benutzer und Passworte
passwd # set root pass
useradd -m username # erstelle neuen User
passwd username # password für neuen User
usermod -aG wheel,audio,video,optical,storage username # Gruppen
Sudo konfigurieren
pacman -S sudo # ggf. EDITOR=nano visudo
visudo # Bearbeiten von /etc/sudoers
# auskommentieren: %wheel ALL=(ALL) ALL
GRUB installieren / konfigurieren
pacman -S grub
pacman -S efibootmgr dosfstools os-prober mtools
Bei Nutzung von Encrytpion: Default Grub für crypt konfigurieren
nano /etc/default/grub
# uncomment: GRUB_ENABLE_CRYPTODISK=y
# prepare: GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 cryptdevice=/dev/sda3:volgroup0:allow-discards quiet"
Tipp
Auflösung später für Hyper-V-VM optimieren: … quiet video=hyperv_fb:1920x1080 …
Grub mit EFI
MBR-alternative: grub-install && grub-mkconfig -o /boot/grub/grub.cfg
mkdir /boot/EFI # if doing UEFI)
mount /dev/sda1 /boot/EFI # Mount FAT32 EFI partition (if doing UEFI)
grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck
grub-mkconfig -o /boot/grub/grub.cfg
Anm.: check ls -al /boot/grub/locale
(de vorhanden?)
Swapfile - kann man auch erstmal weglassen und später im System bereitstellen!
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
echo '/swapfile swap swap defaults 0 0' | tee -a /etc/fstab
Networking
pacman -S networkmanager # later/also: network-manager-applet
systemctl enable NetworkManager
ssh - openSSH Server
pacman -S openssh
systemctl enable sshd
Reboot
exit # the chroot by typing "exit"
umount /mnt # unmount - if busy: umount -l /mnt)
reboot
Vor dem eigentlichen Neustart die ISO aus der VM-Umgebung/Konfiguration entfernen.
Post-Installation
cat /etc/fstab # Mounts checken
pacman -Syu # System aktualisieren
pacman -S man-db man-pages # Weiterer Test und ggf. man-pages-de
pacman -S bash-completion # Bash Completion
yay - AUR Helper bereitstellen
Weiteres Tool installieren: hier für die Nutzung des AUR
pacman -S git base-devel # Standardtools bereitstellen
# als User in /home/user/:
git clone https://aur.archlinux.org/yay-git.git
cd yay-git
makepkg -si
Das sollte es dann gewesen sein: wir haben eine funktionstüchtige Basisinstallation mit Arch Linux als Hyper-V-VM:

AUR Helper yay installiert / Man-Page¶
Als Rausschmeißer noch ein paar Infos rund um Arch-Installationen:
Infos / more Zeug zu Arch-Installationen
#############################################################
INFO: till here everything working Arch as Hyper-V Machines !
#############################################################
Hint: Snapshot and then tests with X-server / Graphic-Env !
#############################################################
You may install on **real machines** or Vbox (kein Installationen bei Hyper-V)
#############################################################
pacman -S intel-ucode (or amd-ucode)
pacman -S mesa
pacman -S nvidia nvidia-utils (or/and nvidia-lts)
pacman -S virtualbox-guest-utils xf64-video-vmware (or xf86-video-fbdev)
#############################################################
Hyper-V: just for Hyper-V **integration services**
see: https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/manage/manage-hyper-v-integration-services )
(for X-Support later: xf86-video-fbdev)
#############################################################
pacman -S hyperv # do not install - only for those integrations*
systemctl enable hy_fcopy_daemon.service
systemctl enable hy_kvp_daemon.service
systemctl enable hy_vss_daemon.service
#############################################################
Insbesondere sei nochmals auf die Hyper-V Integration Services von Microsoft hingewiesen, die man nur für die dargestellten Zusatztechniken benötigt - eine Verbesserung der Grafikausgaben wird nicht angeboten.
Status Pakete: pacman -Q | wc -l
ergeben knapp 200 Pakete.
Arch mit Xmonad¶
In Nicht-Hyper-V-Umgebungen installiere ich oft einfach die gesamte Software (als Oneliner).
Beim Hyper-V hat das allerdings über die Jahre manches Mal zu nicht funktionsfähigen X-Oberflächen geführt.
Daher teile ich die Installation in 2 Phasen.
Phase 1: X-Server pur
Jetzt wollen wir also nur die nötigen X-Server / Xorg Tools bereitstellen und testen dann das Ganze mit dem eingebauten TWM (Tom’s - oder auch Tab - Window Manager).
# Minimalinstallation video/x-Server
sudo pacman -S xf86-video-fbdev xorg xorg-xinit xterm xorg-xclock
Das installiert alle Notwendige für die X-Server-Nutzung: xorg, xorg init-Tools, x-Libs, mesa, …
Tipp
Bei Tests und Spielereien mit X-Server und Window Managern
sollte man niemals xterm
vergessen!
Wir benötigen für das Starten des X-Servers (Tool: startx
)
eine Konfiguration:
cp /etc/X11/xinit/xinitrc ~/.xinitrc
startx # Test X mit Standard-TWM siehe: letzte 5 Zeilen in .xinitrc
Die vorliegende Standard-Konfiguration beinhaltet am Ende den Start
von twm
und die Bereitstellung von xclock
und xterm
-inals.
...
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login
Wenn der TWM läuft, dann können wir alles mit exit
beenden
und uns (ggf. nach reboot
)
den weiteren Installationen zuwenden.
Status Pakete: pacman -Q | wc -l
ergeben jetzt knapp 300 Pakete.
Phase 2: WM Xmonad und Tools/Software
Nach der Basisinstallation trennen sich die Wege für viele Installationsanleitungen.
Ich entscheide mich für den Window Manager Xmonad (basiert auf Haskell) und einer recht vielseitigen Softwareausstattung. Für mich bedeutet Window Manager nicht Einschränkung oder Minimalismus bei der Softwareausstattung. Man könnte das folgende auch stark minimalisieren.
Für die Standardinstallation von Xmonad hier dessen Standard-Shortcuts aus der Haskell-Xmonad-Doku:

Xmonad - Standard Tastenkombinationen (Xmonad Doku)¶
Insbesondere mit Xmonad (Webportal Xmonad) bekommt man eine größere Menge Software auf die Platte, da der WM Xmonad mit Haskell (Webportal Haskell) bereitgetstellt und übersetzt wird.
Wir benötigen also den kompletten GHC (Glasgow Haskell Compiler) und alle nötigen Build und Developer Tools.
pacman -S lxappearance \
xmonad xmonad-contrib xmobar dmenu dzen2 rofi \
trayer volumeicon network-manager-applet \
nitrogen picom awesome-terminal-fonts xdotool xclip gsimplecal arandr \
rxvt-unicode urxvt-perls firefox mc neovim neofetch xed \
ranger ueberzug pcmanfm w3m imlib2 highlight poppler sxiv zsh \
nemo nemo-fileroller nemo-image-converter nemo-preview nemo-terminal \
alacritty qutebrowser pulseaudio pulseaudio-alsa alsa-utils \
zathura zathura-pdf-poppler zathura-djvu fzf ripgrep \
cowsay lolcat sl cmatrix fortune-mod figlet asciiquarium banner
Anm.: die erste Zeile ist hier kürzer, weil dort normalerweise auch die Tools aus Phase 1 aufgeführt sind.
Auszug aus Quittung für sudo pacman -S ...
(430 Pakete nach Auflösung):
Gesamtgröße des Downloads: 379,95 MiB
Gesamtgröße der installierten Pakete: 1803,02 MiB
Und natürlich handelt es sich bei dieser Auswahl auch nur um eine beispielhafte Auflistung. Jeder kann hier installieren, wonach der Sinn steht.
Bestenfalls passen dann die Paketnamen noch genau zur Distro und man hat auch die nötigen Dotfiles inklusive Fonts und Co für die vollständige Schnellausstattung eines persönlichen Systems parat.
Hinweis
In einer Hyper-V-VM machen die Audio-Tools pulseaudio, pulseaudio-alsa und alsa-utils die Maschine nicht lauter ;-) Eine Hyper-V-VM hat ohne einen Erweiterten Sitzungsmodus (siehe RDP-Session) keine Sound-Unterstützung.
Und für VirtualBox VMs: pacman -S virtualbox-guest-utils
Gefolgt von: systemctl enable vboxservice.service
Xmonad (re)kompilieren / bereitstellen
Die Xmonad-Konfiguration und die lauffähige Xmonad-Software
findet man in: ~/.xmonad
.
Hinweis
Dafür benötigt man natürlich eine entsprechende Konfigurationsdatei
~/.xmonad/xmonad.hs
.
Wir erstellen die nötige Xmonad-SW und Xmonad-Bibliotheken
mit: xmonad --recompile
Wir checken den ~/.xmonad
Ordner, der ungefähr so aussehen sollte:
ls -l ~/.xmonad
insgesamt 9016
-rw------- 1 joeb joeb 30 Nov 24 15:24 prompt-history
drwxrwxr-x 2 joeb joeb 4096 Nov 24 16:21 scripts
-rw-rw-r-- 1 joeb joeb 0 Nov 30 19:44 xmonad.errors
-rw-rw-r-- 1 joeb joeb 7279 Nov 24 15:15 xmonad.hi
-rw-rw-r-- 1 joeb joeb 64095 Nov 24 17:13 xmonad.hs
-rw-rw-r-- 1 joeb joeb 823696 Nov 30 19:44 xmonad.o
-rwxrwxr-x 1 joeb joeb 8266168 Nov 30 19:44 xmonad-x86_64-linux
drwxrwxr-x 2 joeb joeb 4096 Nov 24 14:40 xpm
Hier findet sich auch die Konfigurationsdatei xmonad.hs
(Haskell-Code).
Für das Standardpanel nutzt man Xmobar (Konfiguration: ~/.config/xmobar/..). Die komplette Darstellung aller Optionen und Konfigurationen sprengt diesen Rahmen.
Hinweis
Für meine Trainees stelle ich fertige Xmonad-Home-Dirs mit Konfigurationen zur Verfügung!
Deutsche Tastatur im WM
Auch in der Terminals unter Xmonad wollen wir Deutsche Tastatur:
# german keymap:
sudo localectl set-x11-keymap de pc105 nodeadkeys compose:rwin
Das sollte uns eine Xorg-Keyboard Konfiguration erzeugen:
/etc/X11/xorg.conf.d/00-keyboard.conf
Picom Special
Mit der Standardsoftware Picom (Paket: picom aus Arch-Repo) hat man klassische Fenstereffekte wie Opazität. Will man etwas mehr Action (z.B. runde Fensterecken, Fensteranimationen) kann man zu alternativen Picom-Entwicklerpaketen greifen.
Und hier kommt der AUR-Helper yay ins Spiel: yay picom-jonaburg-git
Das installiert eine andere Picom-Variante -
die Standard-Picom Variante wird deinstalliert. Die Picom-Jonaburg
Variante benötigt eine speziell angepasste ~/.config/picom/picom.conf
.
…tbc…
Debian mit Xmonad¶
Auch wenn Debian nicht wirklich eine Installation Linux from Scratch darstellt, so ist eine Debian-Basisinstallation doch auch eine gute Grundlage für ein solides und schlankes System. Hier lässt sich dann auch ein Window Manager Xmonad gut kombinieren und wir erhalten ein ausreichend schlankes Fenster-System.
Wir starten also mit einer Debian Minimalinstallation und installieren dann ebenfalls erst einmal eine Xorg-Umgebung.
apt install -y xserver-xorg-video-fbdev xserver-xorg xinit xterm x11-apps
Es müssen 62,2 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 207 MB Plattenplatz zusätzlich benutzt.
Für die Grundkonfiguration kopieren wir aus /etc/Xorg/..
wieder eine
grundlegende xinitrc
zur ~/.xinitrc
.
Hinweis
Wir erhalten einfacheste xterm WM Xorg-Umgebung
mit sehr einfacher .xinitrc
.
Nach Test mit dieser Roh-WM-Umgebung über startx
können wir jetzt
die fehlende Xmonad Pakete und Software nachinstallieren:
apt install -y lxappearance git curl \
xmonad libghc-xmonad-contrib-dev xmobar dzen2 rofi \
trayer volumeicon-alsa python3-pip \
nitrogen picom fonts-font-awesome xdotool xclip gsimplecal arandr \
rxvt-unicode firefox-esr mc neovim neofetch \
ranger pcmanfm w3m libimlib2 highlight poppler-utils sxiv zsh \
nemo nemo-fileroller \
qutebrowser pulseaudio alsa-utils \
zathura zathura-pdf-poppler zathura-djvu fzf ripgrep \
cowsay lolcat sl cmatrix fortune-mod figlet
0 aktualisiert, 752 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen noch 554 MB von 572 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 2.673 MB Plattenplatz zusätzlich benutzt.
Danach kann man wieder mit Konfigurationen (z.B. aus Git-Repos) die Umgebung fertig konfigurieren.
Anmerkung: Gegenüber der Arch-Installation haben manche Debian-Pakete abweichende Namen und es fehlen auch verschiedene Pakete:
dmenu network-manager-applet urxvt-perls xed ueberzug
nemo-image-converter nemo-preview nemo-terminal alacritty
pulseaudio-alsa asciiquarium banner
Literatur¶
Die folgenden Bücher liefern die Schwerpunkte zu unserer Seminarpraxis und den Übungen.
Hinweis
Texte und Anmerkungen zu den Büchern von Amazon bzw. Verlagen
Und natürlich liefert auch die Linksammlung viele Quellen für weitere Beschäftigungen.
Linux Fachbücher¶
Hier ein paar Bücher mit dem Kernthema Linux.
Linux-Server¶
Linux-Server: Das umfassende Handbuch. Inkl. Samba, Kerberos, Datenbanken, KVM und Docker, Ansible u.v.m. (Ausgabe 2019)
Mit eigenen Kapiteln zu Virtualisierung (Kap. 20) und Docker Containern (Kap. 21).
Link zum Rheinwerk Verlag - Linux-Server (2018)
Linux-Server: Das umfassende Handbuch. Inkl. Samba, Kerberos, Datenbanken, KVM und Docker, Ansible u.v.m. (Ausgabe 2019)
Gebundene Ausgabe: 1270 Seiten
Verlag: Rheinwerk Computing; Auflage: 5 (23. November 2018)
Sprache: Deutsch
ISBN-10: 3836260921
ISBN-13: 978-3836260923
Größe und/oder Gewicht: 22,2 x 7,3 x 24,6 cm
Wie Sie Linux-Server effizient nach den aktuellen Standards administrieren, vermittelt Ihnen dieses Buch. Von Hochverfügbarkeit über Sicherheit bis hin zu Scripting und Virtualisierung: Sie lernen Linux-Server distributionsunabhängig intensiv kennen.
Das Buch bietet Ihnen über benötigtes Hintergrundwissen hinaus zahlreiche Praxisbeispiele zu den häufigsten in Unternehmen eingesetzten Distributionen. Und dank Shell-Programmierung, Python, Ansible sowie den im Buch vorgestellten Tools und Automatisierungsskripten lassen Sie Ihre Rechner für sich arbeiten!

Linux-Server (2018/2019)¶
Aus dem Inhalt:
Administrationsgrundlagen
Devices und Paketmanagement
Dateisysteme und Berechtigungen
Scripting und Shell-Coding
Dienste
Web-, Mail-, Proxy-, FTP- und Druckserver
Samba, LDAP, Kerberos, NFSv4
Infrastruktur und Netze
Hochverfügbarkeit
Virtualisierung (KVM, Docker)
Routing, Bonding, Firewalls
DHCP, DNS, OpenSSH
Versionskontrolle (VCS)
Sicherheit, Monitoring & Co.
Backup und Recovery
Verschlüsselung
Automatisierung
Ansible
PKI mit OCSP

Rückseite - Linux-Server (2018/2019)¶
Linux Kommandoreferenz¶
Shell-Befehle von A bis Z (Ausgabe 2018)
Alle Linux-Befehle immer griffbereit
Link zum Rheinwerk Verlag - Linux Kommandoreferenz
Über 500 Befehle und Konfigurationsdateien immer griffbereit
Schnell thematisch und alphabetisch nachschlagen
Inkl. Shortcuts, Shell-Werkzeuge und Anwendungsbeispiele
Linux Kommandoreferenz - Shell-Befehle von A bis Z (Ausgabe 2018)
Gebundene Ausgabe: 528 Seiten
Verlag: Rheinwerk Computing; Auflage: 5 (23. November 2018)
Sprache: Deutsch
ISBN-10: 3836263416
ISBN-13: 978-3836263412
Größe und/oder Gewicht: 17,2 x 3,5 x 24,6 cm
Mit der Kommandoreferenz nutzen Sie die Shell voll aus. Sie liefert Ihnen einen strukturierten Überblick über alle Linux-Befehle, erklärt ihre Verwendung und zeigt Ihnen Praxisbeispiele zu den wichtigsten Anwendungsfälle.
Einsteiger finden verständliche Erklärungen zu allen Werkzeugen, fortgeschrittene Linux-User profitieren von Hinweisen zu distributionsspezifischen Abweichungen und kommentierten Konfigurationsdateien.
Kurz: Über 500 Befehle aus allen Bereichen, thematischer und alphabetischer Zugriff auf Kommandos, sofort einsetzbare Praxisbeispiele – einfach eine runde Sache.

Linux Kommandoreferenz (2018) - Bild: Rheinwerk Verlag¶
Aus dem Inhalt:
Über 500 Kommandos
Dateien verwalten, suchen
und bearbeiten
Programm-/Prozessverwaltung
Benutzerverwaltung
Dateisystem- und Netzwerk-
Administration
SELinux, AppArmor
Paketverwaltung
Drucker-, Datenbank- und
Server-Administration
Hardware, Bluetooth
Systemstart/-stopp,
Init-System, GRUB
libvirt, KVM, Container und Docker
X und Gnome
bash-Programmierung
Konfigurationsdateien
Tastenkürzelreferenz
Shell-Programmierung¶
Das umfassende Handbuch (Ausgabe 2019)
Link zum Rheinwerk Verlag - Shell-Programmierung
Shell-Programmierung - Das umfassende Handbuch (Ausgabe 2019)
Gebundene Ausgabe: 838 Seiten
Verlag: Rheinwerk Computing; Auflage: 6 (22. März 2019)
Sprache: Deutsch
ISBN-10: 3836263467
ISBN-13: 978-3836263467
Größe und/oder Gewicht: 18 x 5,3 x 24,6 cm
Die Shell-Programmierung ist das Fundament jedes Linux-Anwenders und System-Administrators. Wer die Kommandozeile sowie die wichtigsten Builtins und Werkzeuge beherrscht, der verwaltet Linux-Systeme weitaus flexibler.
Dieses Handbuch bietet Ihnen alles, was Sie zur Shell-Programmierung benötigen, um eigene Shellscripts zu erstellen. Dank der umfangreichen Linux-UNIX-Referenz ist das Buch auch perfekt zum Nachschlagen aller grundlegenden Terminal-Kommandos geeignet.
Praxisbeispiele sowie Übungen mit Lösungen unterstützen Sie zusätzlich beim Lernen und bei der täglichen Arbeit in der Shell. So wird Ihr Admin-Alltag noch effizienter.

Shell-Programmierung (2019) - Bild: Rheinwerk Verlag¶
Aus dem Inhalt:
Einführung, Praxis, Musterlösungen, Kommandoreferenz
Anleitungen, Beispiele und Übungen für zsh, ksh und bash
Mit Shell-Werkzeugen: grep, sed, awk, zenity und mehr
LPIC Bücher¶
Die Bücher zum LPIC aus dem Rheinwerk-Verlag gibt es auch als Komplettpakete (LPIC-1 & LPIC 2).
LPIC-1 - Rheinwerk¶
Autor: Harald Maaßen
Sicher zur erfolgreichen Linux-Zertifizierung
LPIC-1: Sicher zur erfolgreichen Linux-Zertifizierung
Gebundene Ausgabe: 548 Seiten
Verlag: Rheinwerk Computing; Auflage: 5 (2018)
Sprache: Deutsch
ISBN-13: 978-3-8362-6375-7
Aktuell zu den Prüfungszielen von 2018 (Version 5). (Deutsch)
Mit diesem Buch sind Sie bestens gerüstet für die Prüfungen des LPI. Hier finden Sie konkrete Anforderungen zu allen relevanten Prüfungsthemen. Testen Sie Ihren Kenntnisstand anhand zahlreicher prüfungsrelevanter Fragen. Der Prüfungssimulator ermöglicht es Ihnen, eine äußerst realistische Testprüfung abzulegen.
Das Buch eignet sich auch zur Vorbereitung auf die Prüfungen für das Zertifikat CompTIA Linux+ Powered by LPI.

LPIC-1: Sicher zur erfolgreichen Linux-Zertifizierung¶
Aus dem Inhalt:
Vorbereitung auf die Prüfungen 101 und 102
Kommentierte Testfragen für beide Prüfungen
Prüfungssimulator mit sofortiger Auswertung

Rückseite - LPIC-1: Sicher zur erfolgreichen Linux-Zertifizierung¶
LPIC-2 - Rheinwerk¶
Autor: Harald Maaßen
Sicher zur erfolgreichen Linux-Zertifizierung
LPIC-2: Sicher zur erfolgreichen Linux-Zertifizierung
Gebundene Ausgabe: 575 Seiten
Verlag: Rheinwerk Computing; Auflage: 3 (2017)
Sprache: Deutsch
ISBN-13: 978-3-8362-4498-5
Aktuell zu den Prüfungsfragen ab Februar 2017 (Version 4.5)
So gehen Sie optimal vorbereitet in die Prüfung: Harald Maaßen erklärt alle Lernziele des LPI und gibt Tipps zu häufigen Stolperfallen. Prüfungsähnliche Testfragen mit ausführlich kommentierten Antworten zeigen Ihnen, wie das Wissen abgefragt wird und worauf Sie besonders achten müssen. Mit dem Prüfungssimulator können Sie Testprüfungen mit Zeitvorgabe ablegen.

LPIC-2: Sicher zur erfolgreichen Linux-Zertifizierung¶
Aus dem Inhalt:
Vorbereitung auf die Prüfungen 201 und 202
Kommentierte Testfragen für beide Prüfungen
Prüfungssimulator mit sofortiger Auswertung

Rückseite - LPIC-2: Sicher zur erfolgreichen Linux-Zertifizierung¶
Virtualisierung und Container¶
Bücher zu vertiefenden Themen im Bereich Virtualisierung und Container.
Skalierbare Container¶
Oliver Liebel - Skalierbare Container-Infrastrukturen für Ihr Unternehmen
Skalierbare Container-Infrastrukturen: Das Handbuch für Administratoren und DevOps-Teams.
Inkl. Container-Orchestrierung mit Docker, Rocket, Kubernetes, Rancher & Co.
Gebundene Ausgabe: 1071 Seiten
Verlag: Rheinwerk Computing; Auflage: 1 (28. April 2017)
Sprache: Deutsch
ISBN-10: 3836243660
ISBN-13: 978-3836243667
Größe und/oder Gewicht: 18,4 x 6,9 x 25,6 cm
Und nach knapp 18 Monaten bereits eine 2. Auflage mit stark angepassten Inhalten - typisch Container/Docker ;-)
Skalierbare Container-Infrastrukturen Das Handbuch für Administratoren
Verlag: Rheinwerk Computing; Auflage: 2 (aktualisiert/erweitert am 26. Oktober 2018)
Sprache: Deutsch
ISBN-10: 3836263858
ISBN-13: 978-3-8362-6385-6
Hier die Anreißertexte und Inhalte der 2. Auflage:
Virtualisierung erreicht die nächste Evolutionsstufe: Hochskalierbare und ausfallsichere Container-Umgebungen. Mit Continuous Delivery und Continuous Integration, flexibler Modularisierung, Rolling Upgrades, reibungslosen Prozessabläufen und nahtloser, bei Bedarf automatischer Skalierung von Anwendungen machen Sie Ihre Infrastruktur fit für die Zukunft.
Die zweite, komplett überarbeitete und deutlich erweiterte Auflage der bewährten Container-Referenz liefert Ihnen fundiertes Know-how und praxiserprobte Anleitungen zu Container Engines wie Docker, CRI-O oder cri-containerd sowie Orchestrierungstools wie Kubernetes oder OpenShift.
Auf diesem Weg stellen Sie Software schneller bereit und vereinfachen das Deployment und die Wartung Ihrer Infrastruktur – nur so ist Ihre IT-Landschaft zukünftigen Anforderungen an Skalierbarkeit, Flexibilität, Hochverfügbarkeit und Planungssicherheit gewachsen!

Skalierbare Container-Infrastrukturen für Ihr Unternehmen (1. Auflage)¶
Aus dem Inhalt:
Von Microservices zu Container-Clustern
Container Engines und Image Build: Docker, CRI-O und cri-containerd, Buildah und Skopeo
Orchestrieren Sie Ihre Container professionell mit Kubernetes und OpenShift
Die Zukunft des intelligenten Scale-Out: Das Operator Framework
Storage-Anbindung, Key Value Stores, Security, Aggregated Logging, Cloud-Lösungen

Rückseite - Skalierbare Container-Infrastrukturen für Ihr Unternehmen (1. Auflage)¶
Docker - Praxisbuch¶
Autoren: Bernd Öggl und Michael Kofler
Docker: Das Praxisbuch für Entwickler und DevOps-Teams.
Docker: Das Praxisbuch für Entwickler und DevOps-Teams.
Gebundene Ausgabe: 431 Seiten
Verlag: Rheinwerk Computing; Auflage: 1 (24. August 2018)
Sprache: Deutsch
ISBN-10: 3836261766
ISBN-13: 978-3836261760
Größe und/oder Gewicht: 17,2 x 3 x 24,6 cm
Neue Auflage verfügar seit Ende Januar 2020:
Docker: Das Praxisbuch für Entwickler und DevOps-Teams.
Gebundene Ausgabe: 467 Seiten
Verlag: Rheinwerk Computing; Auflage: 2 (Anfang 2020)
Sprache: Deutsch
ISBN-13: 978-3-8362-7226-1
Docker: Das Praxisbuch für Entwickler und DevOps-Teams. 2. Auflage Rheinwerk-Verlag
Software-Container verstehen und produktiv einsetzen
Docker ist aus der modernen Softwareentwicklung nicht mehr wegzudenken. Ob Sie Entwickler oder Administrator sind, ob Sie gerade einsteigen oder bereits produktiv mit Software-Containern arbeiten: Dieses Buch zeigt Ihnen Docker und die Containerwelt.
Dabei lässt es Sie auch bei Troubleshooting und Orchestrierung nicht alleine. Inkl. Best Practices, umfangreichem Werkzeugkasten und vielen Tipps zu Projektmigration, Container-Sicherheit, Kubernetes und mehr.

Docker: Das Praxisbuch für Entwickler und DevOps-Teams.¶
Aus dem Inhalt:
Konzepte und Kommandos
Eigene Docker-Images
Container-Sicherheit
Webserver und Tools
Datenbanksysteme
Programmiersprachen
Webapplikationen und CMS
Praxisbeispiel: Webapplikation, Grafana, Gitlab und mehr
Anwendungen migrieren
Deployment
Continuous Integration und Continuous Delivery
Orchestrierung mit Swarm und Kubernetes
Docker in der Cloud: AWS, Azure, Google Cloud

Rückseite - Docker: Das Praxisbuch für Entwickler und DevOps-Teams.¶
Linksammlung¶
Die folgende Linksammlung natürlich ohne Anspruch auf Vollständigkeit ;-) und mit dem Versuch einer Gliederung.
Tipp
Erst nach dem Seminar stöbern! Work in progress…
Und los geht es…
Hinweis
Mir ist erst im letzten Seminar aufgefallen, dass ich noch die ganzen im Dokument verteilten Links an dieser Stelle zusammenfassen und auflisten möchte. Die Arbeit soll mir nur ein Skript abnehmen… Schauen wir mal!
LPIC Links¶
openSUSE Links¶
Portal: https://www.opensuse.org/
Wiki deutsch: https://de.opensuse.org/Hauptseite
Wiki Leap: https://de.opensuse.org/Portal:Wiki
Leap Download: https://software.opensuse.org/distributions/leap
Documentation english: https://doc.opensuse.org/
Upgrades: https://de.opensuse.org/SDB:Distribution-UpgradeDistribution-Upgrade
kürzer/besser: engl. Variante des Upgrade DB Eintrags
Tumbleweed rolling upgrades: https://software.opensuse.org/distributions/tumbleweed
Linux Befehle¶
… tbc …
ReStructuredText¶
Hier folgen abschließend noch die Meta-Infos zur Dokumentenversionspflege mit Hilfe von restructuredText:

restructuredText auf Wikipedia¶
Kurzinfo auf Wikipedia:
reStructuredText (kurz ReST, reST oder RST) ist eine vereinfachte Auszeichnungssprache (Markup) mit dem Ziel, in der reinen Textform besonders lesbar zu sein.
Die reST-Dokumenten lassen sich nahezu beliebig in gewünschte Formate wandeln:
ODT - OASIS Open Document Format for Office Applications
Kurzform: OpenDocument, ODF – engl. Offenes Dokumentformat für Büroanwendungen
Textformate wie für LibreOffice, Microsoft Word
HTML - diverse HTML-Varianten (Websitestile)
LaTex
professioneller Schriftsatz mit Exportmöglichkeiten nach PostScript und PDF
PDF (bzw. PostScript)
Epub - Standard für eBooks
Desweiteren lassen sich die Dokumente
professionell verlinken (taggen)
indizieren und
durchsuchen.
Bildinfos¶
Alle Bildmaterialien in dieser Ausarbeitung wurden nach bestem Wissen recherchiert und sind gemäß ihrer geforderten Bedingungen hinsichtlich des Autors kommentiert.

Unsplash.com - Freie Bilder¶
Die entsprechenden Bildmaterialien entstammen folgenden Quellen:
Eigene Bildmaterialien
oder Bildkompositionen
Wikipedia
Link zum Wikipedia Bild (inkl. Autorennennung)
Unsplash
Aus dieser Quelle werden alle Bildmaterialien mit Name attributisiert:
Bild: magnet-me-beCkhUB5aIA-unsplash.jpg
Unsplash Autor: magnet-me; Bild-Code: beCkhUB5aIA
Aus dem Unsplash-Bild-Code (hier: beCkhUB5aIA) lässt sich der Bildlink zum Unsplash-Portal zusammenbauen:
https: // unsplash.com / photos / beCkhUB5aIA
Abweichende Bild-Quellen wurden entsprechend kommentiert/dokumentiert.
Status dieser Unterlage¶
Meine inhaltlichen Aufbereitungen zu den Themen unserer Seminarreihe unterliegen ständigen Änderungen und Aktualisierungen.
Bemerkung
Diese Dokument befindet sich in stetiger Überarbeitung. Fehlerbereinigung (Typos) oder eine ggf. noch fehlende Indexierung der Dokumente ist ein Work in Progress und findet auch im Seminar statt.
Fragen Sie also gerne auch einmal später nach einer aktualisierten Variante dieser Ausarbeitung und beziehen sich dabei bitte auf die entsprechende Versionsnummer des Dokuments (oder der angegebenen Versionierung).
Version¶
Versionierungsmerkmale für die reST-Dokumentstrukturen
Hier folgen jetzt Meta-Infos zur Dokumentenversionspflege:
- Version
2.2-2023
- Language
de
- Description
- Unterlagen zu Linux Seminaren Trainer Joe Brandes.Erstellt mit restructuredText / Sphinx / ReadTheDocs / sphinx_typo3_theme!
- Keywords
Linux, Seminarunterlage, Trainer Joe Brandes
- Copyright
Joe Brandes
- Author
Joe Brandes
- License
GNU General Public License, either version 2 of the License or any later version.
- Rendered
28.03.2023