Linux-Wissen

Inhaltsverzeichnis

  1. Linux, ist eigentlich nur ein Kernel
  2. Linux und GNU als ein Betriebssystem
  3. Einsatzfelder von Linux
  4. Wahl einer Linux-Distribution
  5. Installation einer Linux-Distribution
  6. Interaktion mit einem Linux-System: Denktop-Environments, Shells, APIs & Logins
  7. Betreiben von Software

Wenn man Linux für private und/oder berufliche Zwecke lernen will, stellt sich als zuerst die Frage wo genau man starten soll. Diese Seite soll einen Einstieg bieten und das Große Ganze darstellen. Linux kann ein riesiger Eisberg sein, von dem man oft nur die Spitze sieht. Genau hier wollen wir einsteigen.

Linux, ist eigentlich nur ein Kernel

Linux selbst ist, nicht wie viele denken ein Betriebssystem, sondern ein Kernel, der ein Bestandteil eines Betriebssystems ist. Der Kernel steuert die Hardware wird und ermöglicht es Software, die auf dem Betriebssystem läuft, mit der Hardware zu kommunizieren.

Die Entwicklung des Linux-Kernel startete mit Linus Torvalds und wird heute durch den Beitrag vieler weiterer Entwickler vorangetrieben. Der Linux-Kernel und viele weitere um den Betrieb von Linux-Systemen gewachsene Projekte werden von der Linux Foundation betreut, bei der Linus Torvalds angestellt ist.

Linux und GNU als ein Betriebssystem

Wenn man hier aufhören würde, würde man Linux nicht gerecht werden, bzw. man würde GNU/Linux, was die richtigere Bezeichnung für ein Linux-Betriebssystem ist, nicht gerecht werden.

GNU ist ein von Richard Stallman initiiertes Betriebssystem Projekt, das bei seiner Entwicklung viele für ein Betriebssystem relevante Tools in Form von Software und Software-Bibliotheken hatte, jedoch keinen Kernel besaß. Da die GNU-Tools jedoch unter einer freien Lizenz stehen wurden diese genutzt um ein betriebsfähiges System zu schaffe. GNU/Linux war geboren.

Auch wenn GNU/Linux von vielen als die richtigere Art das Betriebssystem zu benenne angesehen wird, werde ich aus Gründen der Einfachheit ( bzw. Faulheit) weiterhin Linux nutzen wenn ich Linux-basierte Betriebssysteme meine. Im Sprachgebrauch hat sich das auch außerhalb meiner Komfortzone bei anderen Usern auch etabliert.

Einsatzfelder von Linux

Da Linux unter einer freien Lizenz veröffentlicht wird ist es nicht nur als Kernel sondern auch als Betriebssystem flexibel anpassbar und findet dadurch eine weite Verbreitung in den unterschiedlichsten Branchen und Einsatzfeldern. Die am meisten verbreiteten Nutzung von Linux findet man in folgenden Bereichen:

  • Server: Web-Server, Clou-Infrastruktur & Supercomputer
  • Mobile: Smartphones, Tablets, Smart-TVs & -Watches (Android nutzt einen angepassten Linux-Kernel)
  • Embedded Systems: IoT-Geräte, Industrielle Steuerung, Router, Edge-Geräte oder Roboter auf dem Mars.
  • Computer: Laptops und Desktops

Wahl einer Linux-Distribution

Es gibt nicht nur eine Linux-Distribution

Wenn man sich, aus welchen Gründen auch immer, entschieden hat Linux zu nutzen. Wird man nicht drum herum kommen eine Linux-Distribution zu wählen. Eine Distribution ist eine spezifische Ansammlung von Software, die einem bestimmten Zweck dient. Im Verhältnis zu Windows und Mac OS, die nur unterschiedliche Versionen des eigenen Systems kennen, hat man bei Linux die Qual der Wahl.

Alleinstellngsmerkmale und der Fokus auf Zielgruppen

Im besten Fall hat einen Linux-Distribution natürlich einen Alleinstellungsmerkmal und/oder eine spezifische Zielgruppe mit spezifischen Bedürfnissen, welche sie bedient. Stabilität, Usablity, Community, Größe der Distribution, Unterstützung spezifischer Technologien und Architekturen, Einsatzgebiet (Desktop, Server, Embedded, Container, Robotik, Cyberr Security).

Unterschiede in Paketmanager und Software

Im Grunde unterscheiden sich Distributionen aber nur oft im Namen dem, Paketmanager und der vorinstallierten bzw. für die Distribution verfügbar oder zur Verfügung gestellt Software .

Selbstgebaute Distribution oder doch von der Stange

Man könnte also mit viel Mühe eine Distribution so umbauen das sie sich so verhält und so aussieht wie eine andere. Dies würde aber viel Zeit, und wenn Zeit im Business-Kontext auch Geld ist, dann eben auch viel Geld kosten.

Also wählt man die Distribution, die für den eigenen Nutzen passt, oder wenn man viel Zeit oder Geld bzw. den Bedarf hat, baut man sich aus den tausenden Einzelteilen, die man dafür benötigt eine eigene wie z.B. bei dem Projekt Linux From Scratch.

Die meisten werden sich jedoch in der Regel für eine bereits bestehende Distribution entscheiden. Da auch die Entwickler von neuen Distributionen nicht das Rad neu erfinden möchten, bauen viele bekannte Distributionen auf den Schultern anderer Distributionen auf und sich eine Kategorisierung in Distributionsfamilien anbietet.

Verwandtschaft und Linux-Distributionsfamilien

Die am weitesten verbreiteten Distributionen sind Debain, Red Hat Enterprise Linux (RHEL), SUSE und Arch Linux. Hier eine Übersicht von einige Distributionen, die entweder als getunte Abspaltung oder die Spielwiese für neue Technologien für die ursprüngliche Distribution dienen:

  • Debian: Linux Mint, Mx Linux, Pop!_OS, Zorin, Ubuntu, elementary, antiX, KDE neon, Garuda, Tuxedo, Kali, Tails, Proxmox u.a.
  • REHL: Fedora, Nobara, Bazzite, Alma Linux, CentOS u.a.
  • SUSE: openSUSE, Aeon, Regata OS, Kamarada, Rockstor u.a.
  • Arch: CachyOS, EndeavourOS, Manjaro, Bluestar, BigLinux, Artix u.a

Für wenn das eine zu kleine Auswahl darstellen sollte, empfehle ich die Website Distrowatch.com um die aktuell beliebtesten Distributionen und die passenden News zu konsumieren. Und ja, das Design der Website ist irgendwo in den 90er hängen geblieben.

Meine (aktuelle) Wahl: Fedora – Testfeld von Red Hat Enterprise Linux

In meinem Fall entschied ich mich für Fedora Workstation. Die Mischung aus Stabilität, Aktualität der Pakete und die Implementierung des Gnome-Desktop. Fedora wird von RHEL gesponsert und ist quasi das Testfeld für alle zukünftigen technologischen Features in Red Hat Enterprise Linux. Wer als auch im Corporate-Umfeld mit RHEL arbeiten will, könnte an Fedora auch interessiert sein.

Installation einer Linux-Distribution

Tools zum schreiben einer ISO auf einen USB-Stick

Hat man die Wahl getroffen, erfolgt die Installation auf Bare-Metal-Systemen in der Regel durch ein bootfähiges Medium, was in der heutigen Zeit ein USB-Stick ist, auf dem zuvor ein Iso-Image einer Distribution mit Tools wie z. B. Balena Etcher oder Fedora Media Writer geschrieben wurde. Das Tool Ventoy (eher für Poweruser, da Installation tricky ist) bietet sogar die Möglichkeit mehrere ISOs auf einen USB-Stick zu kopieren um bei Bedarf mehrere Distributionen Testen oder installieren zu können, was sich in der Linux-Community Distrohopping nennt. Distrohopping ist eine typisches Verhalten jedes Linux-Einsteigers und die Möglichkeit herauszufinden welches System am besten zu den eigenen Workflows passt.

Testen Distribution und der Hardware mit einem Live-Image

Eine gute Idee, vor allem bei Desktop-Linux-Systemen, ist es ein Live-Image zu nutzen. Das heißt die Fähigkeit zu haben die Distribution Live zu nutzen, um unteranderem die Unterstützung für z. B. Drucker, Wifi und Bluetooth zu testen. Wenn man genug getestet und mit dem System herumgespielt hat, bieten die meisten Live-Images die Funktion die Distribution zu installieren.

GUI und textbasierte Installer und der Installationsprozess

Die Installation unterscheidet sich teilweise von Distro zu Distro. Es gibt textbasierte oder grafische Installer. Wobei die ersten oft im Kontext von Server und die zweite oft auf Desktop-Linux Anwendung finden. Einer der Standard-GUI-Installer ist Calamares und wird von vielen Distributionen im Baukastenprinzip eingesetzt. RHEL & Fedora nutzen Anaconda, SUSE und openSUSE setzten auf Agama.

Wenn man als Distrohopper z. B. viel Normaluser-Distros getestet hat, wird man mit dem Calamares-Installer vertraut sein und Agama und Anaconda erstmals seltsam finden.

In der Regel legt man jedech einen User und ein Passwort fest (erlaubt eventuell de User als Admin zu agieren), partitioniert & verschlüsselt die Festplatte, sucht sich vielleicht noch ein paar Pakete aus die man benötigt (z. B. Treiber oder Software) und lässt den Installer sein Ding machen. Wenn man aus der Windows-Welt kommt, wird man überrascht sein, das je nach CPU-Leistung, eine Installation schon nach 10 Minuten fertig sein kann.

Hochgeschwindigkeitsinstallationen in der Cloud

In Zeiten des Cloud-Computing könne Linux-Systeme noch schneller erstellt werden (teilweise unter 1 Minute). Ein paar Klicks reichen um ein vordefiniertes System in vorm eines Images bei einem Cloud-Anbieter wie AWS hoch zu fahren.

Interaktion mit einem Linux-System: Denktop-Environments, Shells, APIs & Logins

Wenn die Installation erfolgreich verlaufen, kann man sich in der Regel nach einem Neustart in eine textbasierten oder Grafischen Oberfläche einloggen und mit dem System interagieren.

Desktop-Entironments & Windown-Manager

Die Interaktion mit einem Linuxsysthem erfolgt als normaler User in der Regel über ein Desktop-Environment (DE) wie z. B. KDE oder Gnome. Im Verhältnis zu Windows oder MacOS, hat der User bei Linux die Wahl welchen Art von Interaktion er mit dem System wählen will und kann neben den oben genannten Desktop aus einem große Pool von DEs wählen. Eine größere Übersicht liefert der Arch Wiki-Eintrag zu Desktop-Environments. Eine Alternative bieten die (Auto-)Window-(Tiling)-Manager, welche die Festerverwaltung übernehmen. Das Auto-Tiling steht für die automatische Kachelung der Fenster nach spezifischen Regeln um den ganzen Platz des Bildschirms effizient zu nutzen ohne die Fenster manuell verschieben und in igendwelche Ecken und Kanten schieben zu müssen.

Wer sich für einen Tiling-Window-Manager entscheidet, muss aber auch bereit sein alle anderen Komponenten, die ein komplettes DE mit sich bringt, selber zusammenpuzzeln zu müssen. Für User, die ein entweder sehr minimalistisches oder extrem angepasstes System wünschen eine tolle Sache des Customizings.

Die Shell – Interaktion mit dem System für Poweruser, Sysadmins und die es noch werden wollen

Poweruser und Administratoren nutzen oft oder ausschließlich die Interaktion über eine Shell, was bei den meisten Linux-Systhemen die Bash-Shell ist. Eine Shell ist eine Form der textbasierte Interaktion mit dem System. Vereinfacht gibt der User Befehle in eine Kommandozeile ein und erhält vom System Informationen zurück (Input-Output-Prinzip). Da die Interaktion mit Programmen, die für die Kommandozeile konzipiert sind textbasiert sind, ist es nicht weiter verwunderlich, dass viele User der Shell einen Keyboard getriebenen Workflow, dem des Klickens mit der Maus in einem Desktop-Environment vorziehen.

Die Nutzung der Shell kann durch einen Terminalemulator im Desktop-Environment, das swichten in eine virtuelle Text-Konsole aus dem DE mit Tastenkombos wie Strg+Alt+F1-F6 (auch tty genannt), durch das einloggen in einem System ohne DE (man landet direkt in einer tty), oder per Fernlogin via SSH erfolgen(man hängt sich die eigene Shell in eine Shell eines anderen Computers).

Interaktion über eine API

Eine weitere Methode ist die Interaktion über ein Application Programming Interface (API). Hier kommuniziert man mit dem Sytem nicht klassisch durch einen SSH-Login aus der Ferne sondern über eine verschlüsselte Schnittstelle und kann das System darüber, konfigurieren, updaten, monitoren. Die Distribution Talos Linux, welche auf die Nutzung von Kubernetes (Orchestrierungslösung für Container) spezialisiert ist, macht es einem möglich die API auch mit Hilfe von Programmiersprachen wie Python, Java oder Go anzusprechen, wodurch ein hoher Automatisierungsgrad beim Ausliefern von Software und der benötigen Infrastruktur möglich ist.

Login auf Linux-Systemen

Auf Linux‑Systemen gibt es neben dem klassischen Login mit Username und Passwort sowie SSH‑Keys eine Vielzahl weiterer Möglichkeiten: Dazu zählen lokale Anmeldungen über PAM, SSH‑basierte Methoden wie SSH‑Agent, SSH‑Zertifikate oder Authentifizierung per LDAP und Kerberos für zentrale Verzeichnisdienste. Hinzu kommen moderne Formen wie Mehrfaktor‑Auth mit TOTP‑Apps oder YubiKeys, Smartcards und PKI‑Zertifikate, die über PAM‑Module oder SSH‑Erweiterungen in den Login‑Vorgang integriert werden können. In größeren Umgebungen kommen außerdem SSO‑Mechanismen wie SSSD, FreeIPA oder Proxy‑basierte SAML/OIDC‑Authentifizierung hinzu, die lokal meist über PAM‑Stacks abgebildet werden.

Betreiben von Software

Eine Linux-Distribution besteht selbst aus Software und hat in der Regel den Zweck Software zu betreiben. Je nach dem welchen Zweck das Linux-System im Einsatz dienen soll, wird die darauf laufenden Software unterschiedlich betrieben.

Klassische Paketformate: .deb & .rpm

Die klassische Form Software auf einen Linux-System zu installieren ist es den Paketmanger des Systems zu nutzen und ein passendes Paket aus den Repositories der Distribution zu installieren. So würde man z.B. Debian & Co. das Tool apt, bei RHEL & Co. dnf und bei SUSE & Co. zypper nutzen um von der Kommandozeile oder einen für das Tool gebauten Frontend, das einen App-Store-Charakter hat, die eigene Software zu installieren. Die zu installierenden Pakete habe eigene Formate. Debian & Co. nutzen .deb-Pakete, RHEL/SUSE & Co. nutzen .rpm-Pakete. Sowohl im privaten als auch im Unternhemenskontext kommt diese Form der Softwareknstalmation immer noch oft zum Einsatz.

Neben den klassischen Paketen haben sich auch immer mehr alternative Paketsysteme wie Flatpak, Snaps und AppIamges etabliert. Diese paketieren, alle Abhängigkeiten in ein Paket und haben dadurch weniger Risiken für Abhängigkeitenkonflikte. Die Konflikte entstehen, wenn eine Applikation z.B. eine ältere und eine andere Applikation eine jüngere Software-Bibliothek benötigt und sauber laufen zu können.

Mobile Nutzung

In der mobilen Nutzung, in der Android neben IOS die Marktmacht hat werden .apk-Pakete genutzt.

Auf der eher neuen Sparte der Linux-Phones laufen aber auch alle anderen Pakete die auf Linux sonst auch laufen würden. Die Distribution gibt hier jedoch in der Regel den Ton an. Als Virtualisierungslösungen könne sogar über Waydroid .apk-Pakete auf Linux-Phones laufen.

Business-Nutzung

Software die im Unternehmenskontext betrieben wird zwar auch heute für die jeweiligen Distributionen paketiert, jedoch beschränkt sich dieses vorgehen immer mehr auf die betriebssystemrelevante Software und nicht die Applikationen die für den Endnutzer gedacht sind. In diesem Bereich haben sich Applikationscontainer etabliert.

Container nutzen eine abgespeckte Form eines Betriebssystems, mit allen für die Applikation notwendigen Dateien. Der Kernel wird vom System bereitgestellt auf dem die Container-Runtime läuft. Die für die Containernutzung am meisten verbreiteten Systeme sind Docker und Podman.

Skallierbare Applikationen werden heutzutage immer mehr in Micro-Services-Architekturen gebaut und sind fähig nach Nutzungsbedarf hoch oder runter zu skalieren. Gerade im Zeitalter der Cloud in der Rechenleistung, Speicher und Netzwerkdienstleitungen flexibel verfügbar sind können Systeme flexibel an die Last, die von der Nutzerseite kommt ( z.B. vermehrte Nutzung der Server von Amazon zu Weinachtzeit), angepasst werden.

Mit der Orcherstrierungssoftware Kubernetes können das Verteilen der Last auf verschiedenen Container automatisiert werden. Neue Container werden bei Bedarf automatisch kreiert oder zerstört, hängengebliebene Container neugestartet.

Auch wenn es gerade in Europa wieder Tendenzen gibt die eigene Infrastruktur (Serverhardware, Speicher und Netzwerke) vor Ort oder Hybrid (Cloud & vor Ort) zu halten, werden jedoch Tools wie Terraform oder OpenTofu (Fork von Terraform) genutzt um Infrstructure as Code (Iac) entweder auf den eigenen Systemen oder in der Cloud in einer verschriftlichten bzw. deklarativen Form zu definieren um sie bei gut warten, mit Git versionieren und ausrollen zu können.