apt vs yum: Linux-Paketverwaltung für Systemadministratoren erklärt
Linux-Paketverwaltung ist der Mechanismus, durch den Software auf einem Linux-System installiert, aktualisiert, konfiguriert und entfernt wird. apt (Advanced Package Tool) verwaltet `.deb`-Pakete auf Debian-basierten Distributionen wie Ubuntu und Linux Mint, während yum (Yellowdog Updater Modified) `.rpm`-Pakete auf Red Hat-basierten Systemen wie CentOS und RHEL verwaltet. Beide Tools abstrahieren die Komplexität der Abhängigkeitsauflösung, der Repository-Interaktion und der Paketintegritätsprüfung – sind jedoch architektonisch unterschiedlich und nicht austauschbar.
Zu wissen, welches Tool Ihr System verwaltet, ist kein optionales Wissen. Es beeinflusst direkt, wie Sie Server bereitstellen, Deployments automatisieren, Konfigurationsmanagement-Skripte (Ansible, Chef, Puppet) schreiben und Sicherheits-Patch-Zyklen in Produktionsumgebungen pflegen.
Was ist ein Linux-Paketmanager
Ein Paketmanager ist eine Sammlung von Software-Tools, die den gesamten Lebenszyklus von Software auf einem Linux-System automatisiert: Pakete aus Remote-Repositories abrufen, kryptografische Signaturen verifizieren, Abhängigkeitsketten auflösen und installieren, Pre/Post-Install-Skripte ausführen und die Installation in einer lokalen Paketdatenbank registrieren.
Die Paketdatenbank ist entscheidend und wird oft übersehen. Auf Debian-basierten Systemen befindet sie sich unter `/var/lib/dpkg/`. Auf RPM-basierten Systemen liegt sie in `/var/lib/rpm/`. Beide Datenbanken führen die maßgebliche Aufzeichnung darüber, was installiert ist, in welcher Version und mit welcher Dateieigentümerschaft – und sind damit das Rückgrat von System-Auditing und Rollback-Operationen.
Paketmanager interagieren mit Repositories – Remote-Servern, die kuratierte Sammlungen kompilierter, signierter Pakete hosten. Die Repository-Metadaten (Paketlisten, Prüfsummen, GPG-Schlüssel) werden lokal synchronisiert, bevor eine Installation stattfindet. Deshalb muss `apt update` oder `yum check-update` in automatisierten Skripten den Installationsbefehlen vorangehen.
apt: Advanced Package Tool für Debian-basierte Systeme
apt ist die High-Level-Befehlszeilenschnittstelle für die Paketverwaltung auf Debian, Ubuntu, Linux Mint, Pop!_OS und allen Derivaten. Es arbeitet auf dem Low-Level-Tool `dpkg`, das die eigentliche `.deb`-Paketinstallation übernimmt. Betrachten Sie `dpkg` als den Motor und `apt` als den intelligenten Fahrer, der weiß, wo er Treibstoff holen und in welcher Reihenfolge er ihn verbrennen soll.
Die apt-Toolchain im Detail
Das apt-Ökosystem umfasst mehrere Binärdateien, die unterschiedlichen Zwecken dienen:
- `apt` — die moderne, empfohlene interaktive CLI (eingeführt in Ubuntu 14.04 / Debian 8)
- `apt-get` — das ältere, skriptfähige Backend; in Shell-Skripten bevorzugt aufgrund seines stabilen Ausgabeformats
- `apt-cache` — fragt den lokalen Paket-Cache nach Metadaten, Beschreibungen und Abhängigkeitsgraphen ab
- `dpkg` — der Low-Level-Paketinstaller; wird direkt verwendet, wenn eine lokale `.deb`-Datei mit `dpkg -i package.deb` installiert wird
- `apt-mark` — markiert Pakete als gehalten, automatisch installiert oder manuell installiert
Grundlegende apt-Befehle mit technischem Kontext
Den lokalen Paketindex aktualisieren:
“`bash
sudo apt update
“`
Dies ruft aktualisierte Metadaten aus allen konfigurierten Repositories in `/etc/apt/sources.list` und `/etc/apt/sources.list.d/` ab. Es installiert oder aktualisiert nichts. Diesen Befehl vor jeder Installationsoperation auszuführen ist obligatorisch – das Überspringen bedeutet, dass Sie möglicherweise veraltete Paketversionen auflösen oder Sicherheits-Patches verpassen.
Installierte Pakete aktualisieren:
“`bash
sudo apt upgrade
“`
Aktualisiert alle Pakete, für die eine neuere Version existiert, entfernt jedoch keine aktuell installierten Pakete und installiert keine neuen Pakete zur Erfüllung einer Abhängigkeit. Für ein aggressiveres Upgrade, das Abhängigkeitsänderungen behandelt:
“`bash
sudo apt full-upgrade
“`
`full-upgrade` (früher `dist-upgrade`) installiert neue Abhängigkeiten und entfernt bei Bedarf konfliktverursachende Pakete. Verwenden Sie es mit Vorsicht auf Produktionssystemen.
Ein Paket installieren:
“`bash
sudo apt install package_name
“`
Um mehrere Pakete in einer einzigen Transaktion zu installieren:
“`bash
sudo apt install nginx curl git
“`
Die Kombination von Installationen in einem Befehl ist effizienter, da apt den vollständigen Abhängigkeitsgraphen einmal statt wiederholt auflöst.
Ein Paket entfernen (Konfigurationsdateien beibehalten):
“`bash
sudo apt remove package_name
“`
Ein Paket vollständig entfernen (Binärdateien und Konfigurationsdateien entfernen):
“`bash
sudo apt purge package_name
“`
Bevorzugen Sie immer `purge` gegenüber `remove` bei der Außerbetriebnahme eines Dienstes. Zurückgelassene Konfigurationsdateien von `remove` können zu unerwartetem Verhalten führen, wenn das Paket später neu installiert wird.
Verwaiste Abhängigkeiten entfernen:
“`bash
sudo apt autoremove
“`
Dies wird häufig vernachlässigt und führt im Laufe der Zeit zu Abhängigkeitsaufblähung. Integrieren Sie es in Ihren regulären Wartungsworkflow.
Nach einem Paket suchen:
“`bash
apt search package_name
“`
Paketdetails vor der Installation prüfen:
“`bash
apt show package_name
“`
Dies zeigt die Paketversion, die installierte Größe, Abhängigkeiten und den Maintainer – nützlich, bevor ein unbekanntes Paket eingebunden wird.
Ein Paket auf seiner aktuellen Version halten (kritisch für Produktionsstabilität):
“`bash
sudo apt-mark hold package_name
“`
Dies verhindert, dass `apt upgrade` das Paket anfasst. Unverzichtbar, wenn Sie eine bestimmte Kernel-Version oder ein gepinntes Anwendungsrelease betreiben.
Realer apt-Anwendungsfall: Bereitstellung eines Webservers auf Ubuntu
“`bash
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
sudo systemctl enable nginx
sudo systemctl start nginx
“`
Das Flag `-y` unterdrückt die Bestätigungsaufforderung, was für nicht-interaktive Bereitstellungsskripte erforderlich ist. Kombinieren Sie dies immer mit `apt update` im selben Skriptblock, um sicherzustellen, dass Sie aus aktuellen Repository-Metadaten installieren.
yum: Yellowdog Updater Modified für RPM-basierte Systeme
yum ist der Paketmanager für Red Hat Enterprise Linux (RHEL), CentOS 7 und ältere Fedora-Releases. Er verwaltet `.rpm`-Pakete und sitzt auf der RPM-Datenbank. Wie apt über dpkg bietet yum Abhängigkeitsauflösung und Repository-Verwaltung auf dem rohen `rpm`-Befehl.
Wichtiger architektonischer Hinweis: Auf CentOS 8+, RHEL 8+ und allen modernen Fedora-Releases wurde yum durch dnf (Dandified YUM) abgelöst. Auf diesen Systemen ist der `yum`-Befehl typischerweise ein symbolischer Link oder Alias zu `dnf`. Wenn Sie ein System mit RHEL/CentOS 8 oder höher verwalten, sollten Sie `dnf`-Befehle schreiben. Die Befehlssyntax ist weitgehend kompatibel, aber dnf bietet deutlich bessere Abhängigkeitsauflösung, eine sauberere API und modulare Repository-Unterstützung.
Grundlegende yum-Befehle mit technischem Kontext
Verfügbare Updates prüfen, ohne sie anzuwenden:
“`bash
sudo yum check-update
“`
Dies ist besonders nützlich in automatisierten Überwachungsskripten, um zu erkennen, ob ein System bei Patches zurückliegt, ohne ein Upgrade auszulösen.
Alle verfügbaren Updates anwenden:
“`bash
sudo yum update
“`
Im Gegensatz zu `apt upgrade` installiert `yum update` bei Bedarf auch neue Abhängigkeitspakete. Es gibt kein separates `full-upgrade`-Äquivalent – yum behandelt dies standardmäßig.
Ein Paket installieren:
“`bash
sudo yum install package_name
“`
Ein Paket entfernen:
“`bash
sudo yum remove package_name
“`
Hinweis: Die Entfernungsoperation von yum kann manchmal kaskadieren und abhängige Pakete entfernen. Überprüfen Sie immer die Transaktionszusammenfassung, bevor Sie bestätigen.
Nach einem Paket suchen:
“`bash
yum search package_name
“`
Paketinformationen prüfen:
“`bash
yum info package_name
“`
Installierte Pakete auflisten:
“`bash
yum list installed
“`
Den lokalen Cache leeren:
“`bash
sudo yum clean all
“`
Löscht zwischengespeicherte Paketdaten und Metadaten. Führen Sie dies aus, wenn Sie vermuten, dass veraltete Repository-Daten Auflösungsfehler verursachen.
Ein Paket auf seiner aktuellen Version halten:
“`bash
sudo yum versionlock add package_name
“`
Erfordert das `yum-plugin-versionlock`-Plugin. Das Äquivalent zu `apt-mark hold` ist unverzichtbar für die Aufrechterhaltung stabiler Produktionsumgebungen, in denen eine bestimmte Paketversion nicht durch automatische Updates verändert werden darf.
Realer yum-Anwendungsfall: Apache auf CentOS 7 bereitstellen
“`bash
sudo yum install -y httpd
sudo systemctl enable httpd
sudo systemctl start httpd
sudo firewall-cmd –permanent –add-service=http
sudo firewall-cmd –reload
“`
Ein häufiger Fehler ist, Apache zu installieren und vergessen, die Firewall zu öffnen. Auf CentOS/RHEL-Systemen ist `firewalld` standardmäßig aktiv und blockiert stillschweigend HTTP-Traffic, auch wenn der Dienst läuft.
apt vs yum: Direkter Vergleich
| Funktion | apt (Debian/Ubuntu) | yum / dnf (RHEL/CentOS/Fedora) |
|---|
| — | — | — |
|---|
| Paketformat | `.deb` | `.rpm` |
|---|
| Zugrunde liegendes Tool | `dpkg` | `rpm` |
|---|
| Primäre Distributionen | Debian, Ubuntu, Mint, Pop!_OS | RHEL, CentOS, Fedora, AlmaLinux, Rocky Linux |
|---|
| Nachfolger / modernes CLI | `apt` (ersetzt `apt-get` für interaktive Nutzung) | `dnf` (ersetzt `yum` auf RHEL 8+) |
|---|
| Abhängigkeitsauflösung | Automatisch, behandelt Konflikte | Automatisch; dnf ist robuster als yum |
|---|
| Repository-Konfiguration | `/etc/apt/sources.list`, `/etc/apt/sources.list.d/` | `/etc/yum.repos.d/*.repo` |
|---|
| Paket-Hold-Mechanismus | `apt-mark hold` | `yum versionlock` (Plugin erforderlich) |
|---|
| Lokale Paketinstallation | `dpkg -i file.deb` | `rpm -i file.rpm` oder `yum localinstall` |
|---|
| Cache-Verwaltung | `apt clean`, `apt autoclean` | `yum clean all` |
|---|
| Entfernung verwaister Pakete | `apt autoremove` | `yum autoremove` (dnf behandelt dies besser) |
|---|
| Transaktionsverlauf | Begrenzt | Vollständiger Transaktionsverlauf mit Rollback über `yum history` |
|---|
| Modul-Streams | Nicht nativ unterstützt | Unterstützt in dnf (Application Streams) |
|---|
| GPG-Signaturverifizierung | Ja | Ja |
|---|
| Skriptfreundliches Flag | `-y` (nicht-interaktiv) | `-y` (nicht-interaktiv) |
|---|
dnf: Der moderne Nachfolger von yum
Wenn Sie ein RHEL 8+-, CentOS Stream-, AlmaLinux-, Rocky Linux- oder Fedora-System verwalten, ist dnf Ihr Paketmanager. Der Übergang von yum zu dnf ist nicht kosmetisch – dnf löst eine Reihe von langjährigen architektonischen Problemen in yum:
- Abhängigkeitsauflösung: dnf verwendet die `libsolv`-Bibliothek, die deutlich schneller und genauer ist als der Resolver von yum
- API-Stabilität: dnf stellt eine stabile Python-API für Scripting und Automatisierung bereit
- Modul-Streams: dnf unterstützt Application Streams, die es ermöglichen, dass mehrere Versionen derselben Software (z. B. PHP 7.4 und PHP 8.1) in Repositories koexistieren
- Transaktions-Rollback: `dnf history undo <id>` ermöglicht es, eine bestimmte Transaktion zurückzurollen – eine Fähigkeit ohne direktes Äquivalent in apt
Wichtige dnf-Befehle, die sich von yum unterscheiden:
“`bash
Install a module stream (e.g., PHP 8.1)
sudo dnf module enable php:8.1
sudo dnf install php
Roll back the last transaction
sudo dnf history undo last
Check which package provides a specific file
sudo dnf provides /usr/bin/python3
“`
Repository-Verwaltung: Eine kritische operative Fähigkeit
Sowohl apt als auch yum/dnf sind nur so nützlich wie die Repositories, für die sie konfiguriert sind. Falsch konfigurierte oder nicht vertrauenswürdige Repositories sind ein erhebliches Sicherheitsrisiko.
Auf Debian/Ubuntu ein Drittanbieter-Repository sicher hinzufügen:
“`bash
Import the GPG key
curl -fsSL https://example.com/gpg.key | sudo gpg –dearmor -o /usr/share/keyrings/example-archive-keyring.gpg
Add the repository with key reference
echo "deb [signed-by=/usr/share/keyrings/example-archive-keyring.gpg] https://repo.example.com/apt stable main" | sudo tee /etc/apt/sources.list.d/example.list
sudo apt update
“`
Auf RHEL/CentOS ein Repository hinzufügen:
“`bash
sudo yum-config-manager –add-repo https://repo.example.com/centos/example.repo
Or manually create /etc/yum.repos.d/example.repo
“`
Sicherheitsprinzip: Fügen Sie niemals ein Repository hinzu, ohne dessen GPG-Schlüssel unabhängig zu verifizieren. Ein kompromittiertes Repository kann bösartige Pakete pushen, die mit Root-Rechten installiert werden.
Den richtigen Paketmanager für Ihre Serverumgebung wählen
Der von Ihnen verwendete Paketmanager wird durch Ihre Linux-Distribution vorgegeben – Sie wählen apt oder yum nicht unabhängig. Was Sie wählen, ist Ihre Distribution, und diese Entscheidung hat nachgelagerte Konsequenzen für die Paketverfügbarkeit, Enterprise-Support-Verträge, den Sicherheits-Patch-Rhythmus und die Tooling-Kompatibilität.
- Ubuntu LTS (apt): Beste Wahl für allgemeine VPS Hosting-Workloads, Webserver und Entwicklerumgebungen. Long-Term-Support-Releases erhalten 5 Jahre Sicherheitsupdates, erweiterbar auf 10 mit Ubuntu Pro.
- RHEL / AlmaLinux / Rocky Linux (dnf): Der Standard für Enterprise-Produktionsumgebungen, insbesondere beim Betrieb auf Dedicated Servers, die zertifizierte Software-Stacks, Compliance-Frameworks (PCI-DSS, HIPAA) oder ISV-unterstützte Anwendungsbereitstellungen erfordern.
- Debian Stable (apt): Äußerst konservative Paketversionen, ideal für Server, bei denen Stabilität über modernster Software priorisiert wird. Häufig für langlebige Datenbank- und Mail-Server verwendet.
- CentOS Stream / Fedora (dnf): Geeignet für Entwicklungs- und Staging-Umgebungen, in denen Sie vorgelagerte RHEL-Änderungen verfolgen möchten, bevor sie in stabilen Releases landen.
Bei der Bereitstellung eines Control Panels wie cPanel ist der zugrunde liegende Paketmanager von erheblicher Bedeutung. cPanel unterstützt offiziell AlmaLinux, Rocky Linux und CloudLinux – alle dnf-basiert. Wenn Sie einen VPS mit cPanel verwenden, arbeiten Sie bei modernen Deployments in einer dnf-Umgebung.
Für Umgebungen, in denen Sie eine grafische oder webbasierte Oberfläche zur Verwaltung von Paketen und Serverkonfiguration benötigen, ohne auf die Befehlszeile wechseln zu müssen, erkunden Sie VPS Control Panels, die die Paketverwaltung in eine Benutzeroberfläche abstrahieren und dabei weiterhin apt oder dnf im Hintergrund nutzen.
Sicherheitshärtung durch Paketverwaltung
Paketmanager sind eine primäre Angriffsfläche für Supply-Chain-Angriffe. Diese Praktiken sind auf jedem internetfähigen Server nicht verhandelbar:
- Automatische Sicherheitsupdates aktivieren — Auf Ubuntu: `unattended-upgrades`-Paket. Auf RHEL/CentOS: `dnf-automatic` mit `apply_updates = yes` in `/etc/dnf/automatic.conf`.
- GPG-Signaturen verifizieren — Deaktivieren Sie niemals die GPG-Prüfung (`–nogpgcheck` in yum/dnf oder `–allow-unauthenticated` in apt) außerhalb isolierter Laborumgebungen.
- Installierte Pakete regelmäßig prüfen — Verwenden Sie `dpkg -l` oder `rpm -qa`, um ein vollständiges Paketmanifest zu erstellen. Vergleichen Sie dies mit einer bekannten guten Baseline.
- Unnötige Pakete entfernen — Jedes installierte Paket ist eine Angriffsfläche. Führen Sie `apt autoremove` oder `dnf autoremove` nach größeren Deployments aus.
- Kritische Pakete pinnen — Verwenden Sie `apt-mark hold` oder `dnf versionlock`, um unbeabsichtigte Upgrades von Paketen wie dem Kernel, OpenSSL oder Datenbank-Engines auf Produktionssystemen zu verhindern.
Wenn Sie einen Mail-Server betreiben oder E-Mail-Infrastruktur hosten, ist es besonders wichtig, Pakete wie Postfix, Dovecot und deren TLS-Abhängigkeiten aktuell zu halten. Kombinieren Sie rigorose Paketverwaltung mit ordnungsgemäß konfigurierten SSL Certificates, um verschlüsselte Transportsicherheit aufrechtzuerhalten. Ebenso profitieren Webhosting-Umgebungen, die über Shared Web Hosting-Plattformen verwaltet werden, davon, dass der Hosting-Anbieter die zugrunde liegende Paketsicherheit pflegt, aber das Verständnis der Paketschicht bleibt für Debugging und benutzerdefinierte Konfiguration wertvoll.
Praktische Entscheidungsmatrix und wichtige Erkenntnisse
Bevor Sie einen Paketverwaltungsbefehl auf einem Produktionssystem ausführen, arbeiten Sie diese Checkliste durch:
Checkliste vor der Operation:
- Bestätigen Sie, welche Distribution und Version Sie ausführen: `cat /etc/os-release`
- Bestätigen Sie den richtigen Paketmanager: `which apt` oder `which dnf` oder `which yum`
- Auf apt-Systemen: führen Sie immer `sudo apt update` vor `apt install` oder `apt upgrade` aus
- Auf yum/dnf-Systemen: `sudo yum check-update` oder `sudo dnf check-update` vor Upgrades
- Überprüfen Sie die Transaktionszusammenfassung, bevor Sie eine Installations- oder Entfernungsoperation bestätigen
- Für Produktionsserver: testen Sie Paket-Upgrades zuerst in einer Staging-Umgebung
- Nach größeren Upgrades: überprüfen Sie den Dienststatus mit `systemctl status <service>`
- Nach dem Entfernen von Paketen: führen Sie `apt autoremove` oder `dnf autoremove` aus, um verwaiste Pakete zu bereinigen
Architektonische Entscheidungen:
- Verwenden Sie `apt full-upgrade` statt `apt upgrade` nur, wenn Sie verstehen und akzeptieren, dass Pakete entfernt werden können
- Verwenden Sie `dnf` statt `yum` auf jedem System mit RHEL 8 / CentOS 8 oder höher
- Verwenden Sie `apt-get` (nicht `apt`) in Shell-Skripten und CI/CD-Pipelines für stabile, parsierbare Ausgabe
- Verwenden Sie `yum versionlock` oder `apt-mark hold` bevor eine automatisierte Update-Pipeline einen Produktionsserver berührt
- Fügen Sie niemals Drittanbieter-Repositories hinzu, ohne deren GPG-Schlüssel zu importieren und zu verifizieren
FAQ
Was ist der Unterschied zwischen apt und apt-get?
`apt` ist der moderne, benutzerorientierte Befehl, der eingeführt wurde, um `apt-get` und `apt-cache` in einem einzigen Tool mit saubererer Ausgabe und einem Fortschrittsbalken zu konsolidieren. `apt-get` bleibt verfügbar und wird in Skripten bevorzugt, da sein Ausgabeformat versionsübergreifend stabil garantiert ist. Für die interaktive Terminal-Nutzung ist `apt` der aktuelle Standard.
Kann ich apt auf einem CentOS- oder RHEL-Server verwenden?
Nein. apt ist ausschließlich für Debian-basierte Systeme und verwaltet `.deb`-Pakete. CentOS und RHEL verwenden das RPM-Paketformat, das von yum oder dnf verwaltet wird. Die Paketformate und Datenbanken sind architektonisch inkompatibel – es gibt keine Konvertierungsschicht.
Was ist das yum-Äquivalent von apt autoremove?
`sudo yum autoremove` oder `sudo dnf autoremove` entfernt Pakete, die als Abhängigkeiten installiert wurden, aber von keinem explizit installierten Paket mehr benötigt werden. Die dnf-Implementierung ist zuverlässiger als die Legacy-yum-Version.
Wie verhindere ich, dass ein bestimmtes Paket von apt oder yum aktualisiert wird?
Auf apt-basierten Systemen: `sudo apt-mark hold package_name`. Auf yum/dnf-Systemen: installieren Sie das `yum-plugin-versionlock`-Plugin und führen Sie `sudo yum versionlock add package_name` aus, oder auf dnf: `sudo dnf versionlock add package_name`. Beide Mechanismen überleben `upgrade`- und `update`-Befehle, bis sie explizit freigegeben werden.
Ist yum im Jahr 2024 noch relevant?
Für CentOS 7- und RHEL 7-Systeme, die noch in Produktion sind, ja – yum bleibt der Paketmanager. Allerdings hat CentOS 7 im Juni 2024 sein End-of-Life erreicht. Jedes System, das noch CentOS 7 betreibt, sollte auf AlmaLinux 8/9 oder Rocky Linux 8/9 migriert werden, die beide dnf verwenden. Das Schreiben neuer Automatisierungsskripte, die ausschließlich auf yum abzielen, ist nicht mehr ratsam.
