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

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:

  1. BASICS

    Einführung in Linux und mein „Roter Faden“

  2. TOOLS

    Werkzeuge, Best Practices und Linux-Knowledgebase

  3. LPIC

    Infos zum Linux Professional Institute Certificate

  4. Arch Linux

    Eine Linux-Distribution build from Scratch mit sehr guter Community und Dokumentation

  5. 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:


Stichwortverzeichnis


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

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

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)

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

(de.redhat.com)

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

(debian.org)

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

(archlinux.org)

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

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

    https://kde.org/plasma-desktop/

  • Gnome 2 bzw. Gnome 3

    Standard-Desktop bei Debian, Ubuntu, CentOS, …

    https://www.gnome.org/

  • 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“…

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

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 Windows Manager für Arco Linux D

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:

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

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

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.

Quelle: Wikipedia - Roter Faden

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

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.

Kernel (Wiki-Link)

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)

X-Server (Wiki-Link)

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!

Übersicht Window Manager for X

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 Hierarchy

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

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

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... oder chmod u+s

  • SetGID: chmod 2... oder chmod g+s

  • Sticky-Bit: chmod 1... oder chmod 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:

  1. Einschalten (Reset, POST - Power On Self Test)

  2. BIOS / UEFI mit Bootsequenz (Startreihenfolge; engl: Bootsequence / Startmedien)

    Übersicht Bootmedien:

    USB (Sticks / HD), Netzwerk (PXE / TFTP), Festplatten / SSDs, Optische Medien (CD/DVD)

  3. 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 Reparaturkonsole

    Darstellung zu Partitionierungen:

    exemplarische Szenarios für Parallelinstallation mit Windows - Linktipp MS

  4. Linux-Bootmanager: GRUB2 (Übersicht Bootmanager und Technik Bootmanager folgt)

    Vorgänger / Bootalternativen: GRUB (Version 1), LILO (Linux Loader)

  5. 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

  6. 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

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“),

Linupedia-Artikel

Targets / Runlevel

Wir wollen jetzt das Prozessmanagement unter Linux besser verstehen. Hierzu wieder ein Scribble aus einem meiner Seminare zum Thema:

SysVinit vs. SystemD

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 (siehe systemd-analyze) und Co

  • journalctl - Tool für die Auswertung und den Zugriff auf die SystemD-Journale

Ein paar beispielhafte Aufrufe:

  • systemctl bzw. systemctl list-units - alle SystemD Units auflisten

  • systemctl list-units --type service --state running - alle laufende Dienste (.service) auflisten

  • journalctl -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) und

  • xfs 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

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: /dev/sda1 (primäre Partition) Filesystem: ext4

/home

Benutzerverzeichnisse

Größe: 50 GiB Gerät: /dev/sda2 (primäre Partition) Filesystem: ext4

swap

Auslagerungspartition, VMM Virtual Memory Management

Größe: 7 GiB Gerät: /dev/sda3 (primäre Partition) Filesystem: swap

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:

YaST (Suse) Benutzer anlegen

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 + F1F6

  • 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 oder ls -A

  • ls -al

  • cd

  • su

  • who

  • whoami

  • which bzw. whereis

  • ping

  • ifconfig oder runlevel 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 Users

  • Strg + 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):

Arch-Wiki - Pacman/Rosetta

Paketverwaltungen - ausführlich im Arch Wiki

Paketverwaltungen - ausführlich im Arch Wiki

Wikipedia - Paketemanager

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

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)

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 oder

  • yum 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:

  1. 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

  2. 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!

  3. NetworkManager

    Eine Red Hat Technik mit Applet (Miniprogramm für Windows Manager KDE kde5-nm-connection-editor , Gnome und Co)

  4. 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

  5. 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 Netzwerktechnik

  • route - Klassiker für das Routing

  • dig, host , nslookup - die DNS-Profis

  • arp - Analytik MAC-Adressen zu IP

  • ifconfig - 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

ip address show (zeigt immer alle NICs)

ip a s (kurze Variante)

/sbin/ifconfig (veraltet / obsolet)

Standardgateway (bzw. Router)

/sbin/route -n hier: in Spalte Flags das G suchen - dann Spalte Router

ip route show

ip r s (kurze Variante)

DNS-Server

cat /etc/resolv.conf hier: Zeile mit nameserver analysieren

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 oder zypper info cifs-utils

  • dpkg -l | grep cifs oder apt 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:

  1. 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.

  2. 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 )

  3. YaST2 Modul Drucker

    zum Installieren oder Verwalten von Druckern bei Suse-Systemen

  4. Desktopmanager Druckerkonfiguration (KDE, Gnome, XFCE)

    Tipp: sind möglichst zu vermeiden, weil diese Tools manchmal individuelle Konfigurationen verwenden!

  5. 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

Druckserver CUPS (Apple)

Die eine Technik die man indirekt aus Cupertino beisteuert ;-).

HPLIP

Link zum Webportal HPLIP

HP Linux Imaging and Printing

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

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

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

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 fdisk

  • Entsprechende Partition mir „rw“ mount:

    z.B. mount /dev/sda2 /mnt oder mount -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

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

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

Github Projekt - Peltoche

Anmerkung: wir benötigen wieder NerdFonts!

Konsolentool ls Deluxe

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 -

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)

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

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

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 Ripgrep rg

  • Aufruf für gestylte Ausgaben mit Tool batcat (sonst bat).

Kurzanleitung:

  1. Falls noch nicht geschehen:

    apt install fzf ripgrep bat

  2. 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)"
    
  3. 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 Ripgrep rg

  • Aufruf für gestylte Ausgaben mit Tool bat (sonst auch mal batcat).

Kurzanleitung:

  1. Falls noch nicht geschehen: (für die FZF Bereitstellung nutzen wir Git)

    zypper install ripgrep bat git

  2. 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
    
  3. 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)"
    
  4. 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

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)

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

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:

  • git

    Standardplugin: z.B. Aliase wie gst statt git status oder Function wie git_current_user_name

  • colorize

    stellt Alias ccat zu Tool colorize_cat und Alias cless zu Tool colorize_less bereit; benötigt Python-Tools Chroma oder Pygments

  • colored-man-pages

    färbt Man-Pages ein; Tool colord kann auch bei Aufrufen helfen: colored git help clone

  • alias-finder

    findet Aliase die longer -l oder kürzer/exact -e sind: alias-finder -l "git commit -v"

  • zsh-completions

    (*) - benötigt Zusatzzeile nach Plugins: autoload -U compinit && compinit - weitere Vervollständigungen für die Zsh; später vielleicht ein Standardplugin

  • zsh-syntax-highlighting

    (*) - weiter verbessertes Syntaxhighlighting (Fish-Style)

  • zsh-autosuggestions

    (*) - die Zsh macht Vorschläge (again Fish-Style)

  • z - cd clever

    das z-Kommando von Github Projekt Rupa/z

    klassische 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

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.

Github zsh-users/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 und completion.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:

Beispiel für .zshrc Antigen Minimal Konfigurationsdatei

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:

Beispiel für .zshrc Antigen Konfigurationsdatei

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

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

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)

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

Bewegungen

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.

Modi

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.

Vim speichern und verlassen

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

Grundsätzliche Aktionen

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

Kombinierte Aktionen

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

Puffer / Buffers

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

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

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:

Beispiel für .vimrc VimPlug Konfigurationsdatei

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:

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:

  1. ssh installiert?

  2. Prozesse analysieren

  3. Dienste-Verwaltung

  4. 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 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:

Schematische Darstellung aus Link jensd.be:

Nftables Schema Jens D. Website

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

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

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:

  1. Caching / Forwarding

  2. Forward Lookup Zone

  3. 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 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

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

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 Scheduling

    Komando at in Wiki Ubuntuusers

  • systemd/Timers - spezielle Systemd Units

    Arch Wiki zu systemd/Timer

    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.

Portal Webmin.com

Für die jeweilige Installation bitte die Dokumentation bemühen.

Wiki Webmin - Installation

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.

Portal cockpit-project.org

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)

LPI Website (de); Quelle: lpi.org

Man findet das LPI im Web unter

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.

Wiki Projekt zu LPI

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

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

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

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 + Software

  • Build 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

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 - installiert

  • Alternative: 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.

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

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

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):

  1. EFI System Partition (ESP: /boot/EFI): 500 MB

  2. Boot Partition (/boot): 500 MB

  3. LVM 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

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)

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)

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)

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)

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)

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

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

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

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

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

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

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.

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.

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!

Linux Befehle

… tbc …

ReStructuredText

Hier folgen abschließend noch die Meta-Infos zur Dokumentenversionspflege mit Hilfe von restructuredText:

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.

Wikipedia - restructuredText

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

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