Linux Seminare

(Wer sofort mit den Linux Seminarunterlagen und Infos loslegen will: Einführung)

Die Linux-Seminare, die ich begleite und leite nutzen unterschiedliche Linux-Distributionen und Technik-Umgebungen. 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.

Linux Kernel.org

Linux Kernel.org

Im Grunde schule ich alle möglichen Aspekte rund um Linux angefangen beim Einstieg in Linux, über Techniken als Serverumgebungen bis hin zu speziellen Themen wie Linux Sicherheit, Linux Shell, Virtualisierungen mit Linux oder auch Linux Container.

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-KB zum Thema Linux auch als Ablage-System für Anleitungen und Code-Schnippsel zum Thema „Linux“.

Themenabschnitte

Hier eine Übersicht über die behandelten Themenabschnitte rund um Linux und Co:

  1. INTRO

    Einführung in Linux und mein „Rote Faden“

  2. SPECIALS

    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

  • Window Manager (WM)

Hier als erste Annäherungen:

Distributionen

Zusammenstellungen von Linux-Technik von Firmen oder Entwicklergemeinschaften inklusive Installationstechnik und Paketverwaltung(en).

Desktops

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.

Window Manager

Die WM machen exakt, was ihr Name verspricht: sie managen Fenster. Die eigentliche einfache Darstellung übernimmt hier (wie auch bei Desktops) der X-Server.

Window Manager versprechen besonders ressourcensparende Fensterauslieferung und sind somit auch immer für alte / leistungsschwache Hardware interessant.

Mehr zu diesen Rubriken in den folgenden Abschnitten…

… tbc …

Distributionen

Eine kurze Auflistung:

Debian - die #1 bei den Server-OS für Web-Services, Cloud und Co

Und Debian ist auch #1 bei der Marktverbreitung über 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)

    • 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

  • Antix - als Live-Distro und sehr leichtgewichtige Alt-HW-Installation (Pentium III !)

  • 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

Entwicklungsabfolge: Fedora - RHEL - CentOS (Nov 2020: IBM / Red Hat nimmt CentOS den Long Term Support!)

Suse (Novell) - 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

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

Und dann weiter mit Standard-Browser(n): Mozilla Firefox, Vivaldi, Brave,… oder Bürosuite LibreOffice, …

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

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.

Installationen

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

… tbc …

Grundlagen

Wir starten mit der wichtigsten Erkenntnis rund um Linux: dem Kernel (siehe kernel.org ).

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

Linux-Technik

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

Installation / Inbetriebnahme

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)

Dateiberechtigungen

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)

… tbc …

Technik

System und Booten

Das Linux-System unter der Haube und der Startvorgang unsere 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 (aktuell nutzt Ubuntu 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

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 arbeitet mit 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 (wir aktuell als BtrFS-Alternative von Ubuntu gepuscht - Lizenzprobleme!?)

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

… tbc …

Netzwerke

Für die Verwaltung und Konfiguration von Netzwerktechnik in Linux stehen verschiedene Techniken zur Verfügung:

  1. ifup - 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: entweder / oder mit NetworkManager nutzen Konfiguration mittels YaST - Netzwerkeinstellungen - Global Options

  5. netconfig

    Eine weitere Konfigurationsmöglichkeit für unsere Netzwerkumgebung.

Diese kurze Übersicht ist nicht vollständig! Insbesondere müsste man noch ausführlich die Möglichkeit über SystemD-Technik betrachten.

Tipp

Sie finden den Hinweis für die Netzwerkkonfigurationstechnik des Systems über die /etc/resolv.conf!

Befehle Netzwerktechnik:

ping -c 10 www.bahn.de

traceroute www.vhs-braunschweig.de

Analysewerkzeuge:

ip, route, dig , host , nslookup , arp , ifconfig (auch Konfigurationen), iwconfig (für WLAN)

Konfiguration DNS-Namenserver: /etc/resolv.conf (natürlich auch alles per GUI/YaST einstellbar)

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

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 (bzw. 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!

… tbc …

Softwareverwaltung

Hier erst einmal mit der Konzentration auf die klassischen Paketverwaltungen.

Linux-Systeme managen ihre Softwareverteilung mit Hilfe von Paketmanagern…

Überblick Paketmanagement

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

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

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

… tbc …

Benutzerverwaltung

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!

Anzeige zu Benutzern mittels Befehlen whoami, who, id, groups

Dateien der Benutzer/Gruppen:

/etc/passwd, /etc/shadow, /etc/group (Inhalte und Aufbau der Dateien sind wichtig!)

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

cat /etc/shadow mit normalem Benutzer: keine Anzeige mit Hinweis „Keine Berechtigung“

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.

Benutzer- und Gruppenverwaltung in der 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 verfügen auch über das Skript adduser um Benutzer interaktiv anlegen zu können.

… tbc …

Tools

Konsolen / Terminals

Erklärung: tty - Teletyper

Aufruf von Programmen im Desktop mit Alt + F2 und Programmname

bei openSUSE:

Terminals 1 bis 6 (ohne Desktop) mittels Strg + Alt + F1 … F6

zurück zu Desktop mittels (Strg +) Alt + F7

Die Belegungsnummer des grafischen Terminals wird von der Distribution konfiguriert - also: oft muss man ausprobieren!

Beenden eines Terminals mittels exit (Anm.: logout nur bei Login-Shells)

erste Gehversuche in der Konsole (shell) mit: ls -a, ls -al, cd, su, who, whoami, ping, ifconfig

wichtig: ifconfig nur mit kompletten Pfad als Standard-User aufrufbar: /sbin/ifconfig oder erst nach Nachinstallation von Paket net-tools verfügbar.

Anm.: die Superuser/Root haben den Pfad /sbin in Ihrem Pfad Pfade anzeigen mit echo $PATH (Pfadvariable)

Erste Hilfe in Terminal/Konsole

Man-Pages (z.B. man rm) oder Befehl mit –help (z.B. rm --help),

gerne auch Hilfe zur Hilfe mit man man

Alternative: info Pages

Tricks in Terminal/Konsole

Befehle/Verzeichnisse/Dateien mittels Tabulator komplettieren,

mit Cursor-Tasten wiederholen (durchblättern),

nach oben blättern mittels Shift + PgUp (Seite hoch) bzw. Shift PgDown;

die Historie aller Shell-Aufrufe des Users in ~/.bash_history

Rekursive Suche in History mittels Strg + R (vorwärts dann mit Strg + S )

Löschen der Konsole mittels Strg + L

Anfang und Ende Kommandozeile mit Strg + A und Strg + E

Löschen der Kommandozeile von Cursor bis Anfang mit Strg + U

Kopieren und Einfügen (mittlere Maustaste) in der Konsole

SSH

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

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!

Dateimanager

Dolphin (aktuell der Standard-Dateimanager bei KDE) vs. Nautilus (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 mit zypper install mc bzw. apt install mc oder yum install mc

Aufrufen in Shell/Konsole mit mc

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!

VIM (VI improved)

Unterschiedliche Modi:

Einfügenmodus (z.B. mit Taste i), 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 noch ein Special geben.

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…

Drucken

Verschiedene Nutzungen und 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)

Druckserver CUPS

Druckserver CUPS (Apple)

Beispielinstallation eines „HP Color 500 Laserjet (m551)“ mit Hilfe der HP Linux Imaging and Printing Toolserie auf hplip.net Website bzw. des entsprechenden Pakets

hplip (zypper search hplip , zypper info hplip , zypper install hplip );

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:

hp-setup - Anm.: für das saubere Finden der HP-Drucker im Netzwerk muss ggf. kurz die Firewall gestoppt werden: systemctl stop firewall.service (später natürlich wieder starten oder einfach neustart abwarten)

Empfohlene Verwaltung der Druckserver-Umgebung dann mit CUPS

… tbc …

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.

… tbc …

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)

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

… tbc …

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

find

Das Standard-Suchtool mit nahezu unendlichen Aufrufmodi und Unterstützungen.

# 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 {} \;

findmnt

Die bessere Darstellung von Mount-Techniken und Hierarchien.

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

# 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

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

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

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

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)

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.

top bzw. htop

Das Tool für die Table of Processes - in den verbesserten Varianten als htop oder glances (mit gleichnamigen Paketen) 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 einer Shell zu.

Für einen kurzen Überblick über die aktuellen verfügbaren Shell 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

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)

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.

z - Change Directory

Irgendwann wird man es leid immer dieselben Verzeichnisse aufzurufen und mit Tab zu vervollständigen.

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

… tbc …

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!

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

  • Esc DEL

  • 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

In diesem Beispiel mal ein paar Aufrufe und Nutzungen in der Bash. Das lässt sich dann gerne einmal weiter Richtung Bash-Skripting erweitern.

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 Alternative wie 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 eigenen 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 früh in die Hände der Oh My Zsh Entwicklergemeinschaft begeben. Damit vereinfacht sich das Zsh-Leben einigermaßen.

Es soll also mit Oh My Zsh losgehen

… tbc …

Oh My Zsh

Bei Oh My Zsh handelt es sich um ein Framework zum Managen der Zsh-Konfiguration.

Über 100e von Plugins lässt 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.

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 Tools ccat und cless 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

  • vi-mode - lässt die Zsh nutzen über Vi-Kommandos: z.B. dd lösche Zeile

  • autojump (*) - benötigt Paket autojump - autojump github project mit Beispielen für Tool j

  • zsh-syntax-highlighting (*) - weiter verbessertes Syntaxhighlighting (Fish-Style)

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

(*) - Hier die Plugins mit zusätzlichen Installationen: (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

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

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

Und - wie schon gesagt - wir müssen unsere .zshrc entsprechend erweitern.

zshrc

Oder besser gesagt natürlich .zshrc - die Konfigurationsdatei für die Zsh. Wir beginnen mit den …

Themes - hier: Powerlevel10K - Styling like Powerline, Icons und Infos zu Git & Co…

Für die Nutzung des Powerlevel10k Themes benötigen wir:

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 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, das 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 man noch weitere Plugins, die das Leben in der 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.

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.

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 Beginner empfehlen würde ;-).

Stattdessen habe ich in den nächsten Abschnitten viel Wissen und Praxis rund um Vim untergebracht.

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

… tbc …

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)

Ich füge an dieser Stelle mal eine meiner .vimrc in gekürzter Fassung ein.

"Slim-Down-Version (without wanted Commentary) with
"egrep -v '^" ' .vimrc | egrep -v "^\s*$"
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\+'
"-----------------------------------------------------------
"mkdir -p ~/.vim/autoload ~/.vim/bundle && \
"curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
"-----------------------------------------------------------
"If you're using Windows, change all occurrences of ~/.vim to ~\vimfiles.
"-----------------------------------------------------------
"Plugin-list: see folder .vim/bundle and www.vimawesome.com
"cd ~/.vim/bundle
"git clone https://github.com/mattn/emmet-vim
"git clone https://github.com/morhetz/gruvbox
"git clone https://github.com/vim-airline/vim-airline
"git clone https://github.com/vim-airline/vim-airline-themes
"git clone https://github.com/altercation/vim-colors-solarized
"git clone https://github.com/tpope/vim-fugitive
"-----------------------------------------------------------
execute pathogen#infect()
set omnifunc=syntaxcomplete#Complete
set encoding=utf8
set number
set relativenumber
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
set background=dark
colorscheme solarized
let g:airline_solarized_bg='dark'
let g:airline_powerline_fonts = 1

Im besten Fall pflegt man eine volldokumentierte Version der eigenen .vimrc und verwaltet diese z.B. mit einer Versionsverwaltung wie Git!

Im vorliegendem Fall hat meine 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

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

Möglicher Inhalt für die ~/.vimrc:

"-----------------------------------------------------------
" 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'

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

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 ntschieden

Routing aktivieren

Mit einer Aktion beginnt allerdings 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.

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:

Aus dem Link für das Simple Ruleset for a Home Router kann man die wichtigsten Einstellungen 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
    }

    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

        # 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
    }
}

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!

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

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 DSN-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 Ende 2021: wir wollen PHP 7.4 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.

PHP 7 Basisinstallation

Hier: PHP Version 7.4 aus Debian Quellen

apt update
apt install php7.4-cli
# bei Erstinstall: 7.4.21
php --version

Webserver Apache

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

Apache2 - PHP 7 komplettieren

apt install php7.4 php7.4-mysql libapache2-mod-php7.4 php7.4-curl \
    php7.4-gd php7.4-mbstring php7.4-xml php7.4-soap \
    php7.4-intl php7.4-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.

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)

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.

SSL für Apache2 - selfsigned Certificates

# 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

Datenbank MariaDB: (v10.5)

apt install mariadb-server mariadb-client
mysql_secure_installation
# Login Test via Shell mysql from root and Standarduser: OK

Und weil wir uns die ganze Zeit ein wenig am Enterprise-Segment (siehe TYPO3) orientiert haben, stellen wir auch noch eine Grafikumgebung bereit.

Graphicsmagick

Path: /usr/bin/gm

apt install graphicsmagick

… 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

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.

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 entsprechende Tests bereitstellen.

Diese Analysen - und einige andere Erwägungen - führen zu den folgenden Empfehlung von Distributionen für Testinstalls:

  • 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

… tbc …

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)

Portal LPI.org LPIC-1 (deutsche Übersichtsseite Module 101 + 102)

Direktlink Wiki LPI Lernziele Prüfung 101

  • 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

… tbc …

LPIC-1 Modul 102

Eine Übersicht über die Inhalte des Moduls LPIC-1 102-500 (Version 5.0)

Portal LPI.org LPIC-1 (deutsche Übersichtsseite Module 101 + 102)

Direktlink Wiki LPI Lernziele Prüfung 102

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

… 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 als Labor für die Seminarpraxis!

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.

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 & Grub

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

Default Grub für crypt und LVM konfigurieren

nano /etc/default/grub
# uncomment: GRUB_ENABLE_CRYPTODISK=y
# prepare: GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3   cryptdevice=/dev/sda3:volgroup0:allow-discards    quiet"

Tipps: Auflösung 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

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
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 210 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 310 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 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 einem 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.

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…

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.

… tbc …

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 Komplettpakte (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

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!


RST

Dokumenttechnik: restructuredText

Seit Mitte 2017 erstelle ich neue Seminarunterlagen in restructuredText (RST) und wandele bestehende Dokumentationen und Seminarbegleitungen in RST um.

Für gelegentliche „Typos“, die schon verhanden waren oder beim Konvertieren entstanden sind, bitte ich um Verständnis. Bitte einfach unter Angabe der Kapitel-Info an mich übermitteln. Hierfür Danke im Voraus.

Für Kenner meiner Seminarunterlagen hier kurz die wichtigsten Gründe für die teils aufwändigen Arbeiten:

Flexibilität

Word- (.docx), LibreOffice- (.odt) und PDF-Dokumente lassen sich zwar einfach erstellen!

Aber solche Dokumente lassen sich leider überhaupt nicht geeignet und sauber in HTML (gegliedert / oder als eine Seite), JSON, XML, Manpages, Texinfo oder gar EPUB wandeln!

Metainfos

Meta-Techniken, Fußnoten oder Indizes lassen sich einheitlich in den unterschiedlichen Formaten pflegen.

Versionsmanagement

Eine Versionsverwaltung wie Git (Plattform: github.com) arbeitet am effizientesten mit einfachen Textdokumenten - kann aber natürlich auch binäre Objekte handeln. Auch manuelles „Diffen“ ist mit Rohtexten eine mächtige und einfache Technik, während bei Word/PDF-Dokumenten immer sehr aufwändige und unübersichtliche Techniken eingesetzt werden müssen.

Conclusio: man nutze ein einziges grundlegendes Dokumentformat restructuredText und Werkzeuge (RstTools, DocUtils, Pandoc oder Sphinx) zum sauberen Erzeugen der gewünschten Dokumentformate (HTML, SingleHTML, Latex, PDF, EPUB, ODT, DOCX,…)

Ihr Trainer Joe Brandes - Braunschweig, 2020


Hier folgen jetzt Meta-Infos zur Dokumentenversionspflege:

Version

1.0-2020

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

17.09.2021