apt, apt-get und apt-cache sind drei Werkzeuge, die unter Debian-basierten Systemen denselben Zweck erfuellen — das Verwalten von Paketen. Sie nutzen dieselbe Backend-Bibliothek (libapt-pkg) und sprechen mit denselben Repositories, sind aber für unterschiedliche Zielgruppen gemacht: apt-get und apt-cache sind die alten, stabilen Werkzeuge für Skripte und Automatisierung. apt ist das moderne, freundlichere Frontend für den interaktiven Alltag.
Wer den Unterschied versteht, weiß, welches Werkzeug wann das richtige ist — und warum CI-Pipelines in der Regel apt-get und nicht apt aufrufen.
Was sind apt, apt-get und apt-cache?
Alle drei Befehle gehören zur APT-Familie (Advanced Package Tool). Sie greifen auf dieselbe Paket-Datenbank zu, lesen dieselben Konfigurationsdateien (/etc/apt/sources.list, /etc/apt/sources.list.d/) und verwenden im Hintergrund dpkg, um .deb-Pakete tatsaechlich zu installieren. Der Unterschied liegt nicht in der Funktion, sondern in Schnittstelle und Zielgruppe.
| Werkzeug | Eingeführt | Zielgruppe | Charakter |
|---|---|---|---|
| apt-get | 1998 | Skripte, Automatisierung | Stabile CLI, maschinenlesbarer Output |
| apt-cache | 1998 | Skripte, Inspektion | Such- und Anzeige-Operationen ohne Schreibzugriff |
| apt | 2014 | Menschen, interaktive Sessions | Buntere Ausgabe, Progress-Bars, vereinfachte Befehle |
apt-get und apt-cache sind die über Jahrzehnte gewachsenen Werkzeuge. Sie haben eine sehr explizite Befehls-Syntax und einen Output, der bewusst stabil gehalten wird, damit Skripte sich nicht zwischen Distributions-Versionen umschreiben müssen. apt wurde 2014 mit Debian 8 eingeführt, um den Einstieg zu vereinfachen — die häufigsten Operationen aus apt-get und apt-cache werden in einem einzigen Werkzeug gebündelt, der Output ist freundlicher gestaltet.
apt — das High-Level-Frontend
apt ist im Kern eine Vereinigung der häufigsten Befehle aus apt-get und apt-cache. Statt sich zwei Werkzeuge merken zu müssen, gibt es nur eines. Die Ausgabe ist auf Lesbarkeit optimiert: Progress-Bars beim Download, Farben für wichtige Hinweise, kompaktere Darstellung von Paketlisten.
sudo apt update
sudo apt install nginx
apt search webserver
apt show nginxWer am Terminal sitzt und ein System interaktiv pflegt, sollte apt verwenden. Die Befehle sind kürzer, der Output ist übersichtlicher und es gibt keinen Grund, sich mit der historischen Aufteilung in apt-get und apt-cache herumzuschlagen.
apt-get — die Stabilitäts-Garantie
apt-get ist explizit für den Einsatz in Skripten und Automatisierung konzipiert. Das bedeutet: Die Ausgabe ist zwischen Debian- und Ubuntu-Versionen so stabil wie möglich. Wer einen Output mit grep, awk oder sed weiterverarbeitet, kann sich darauf verlassen, dass das Format auch in zwei Jahren noch passt.
apt macht diese Garantie ausdrücklich nicht. Beim ersten Aufruf von apt in einem Skript erscheint sogar eine Warnung:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.Die Konsequenz für die Praxis: In Skripten, CI-Pipelines, Dockerfiles und Ansible-Playbooks immer apt-get und apt-cache verwenden. Im interaktiven Terminal apt. Diese Faustregel deckt 95 % aller Faelle ab.
apt-cache — Suchen und Inspizieren
Während apt-get schreibt (installiert, entfernt, aktualisiert), ist apt-cache das lesende Pendant. Es durchsucht die lokale Paketliste und zeigt Informationen über Pakete an — ohne sudo, ohne Schreibzugriffe.
| apt-cache-Befehl | Zweck |
|---|---|
apt-cache search BEGRIFF | Durchsucht Paketnamen und -beschreibungen |
apt-cache show PAKET | Zeigt detaillierte Metadaten zu einem Paket |
apt-cache policy PAKET | Zeigt verfügbare Versionen und ihre Quelle |
apt-cache depends PAKET | Listet die Abhängigkeiten eines Pakets |
apt-cache rdepends PAKET | Zeigt umgekehrte Abhängigkeiten (wer braucht das Paket) |
apt hat die wichtigsten dieser Operationen unter eigenem Namen übernommen: apt search, apt show. Für policy, depends und rdepends gibt es bei apt keine direkten Aequivalente — hier bleibt apt-cache auch im interaktiven Alltag das Werkzeug der Wahl.
Funktions-Vergleichstabelle
Die folgende Tabelle zeigt, welcher Befehl unter apt welchem Aequivalent unter apt-get oder apt-cache entspricht. In den meisten Fällen ist die Operation identisch — nur die Schnittstelle ist anders.
| Operation | apt | apt-get / apt-cache | Anmerkung |
|---|---|---|---|
| Paketlisten aktualisieren | apt update | apt-get update | Identische Funktion |
| Paket installieren | apt install PAKET | apt-get install PAKET | Identische Funktion |
| Paket entfernen | apt remove PAKET | apt-get remove PAKET | Konfigurationsdateien bleiben |
| Paket vollständig entfernen | apt purge PAKET | apt-get purge PAKET | Inklusive Konfigurationsdateien |
| Pakete aktualisieren | apt upgrade | apt-get upgrade | Entfernt keine Pakete |
| Vollständiges Upgrade | apt full-upgrade | apt-get dist-upgrade | Kann Pakete entfernen |
| Auto-Cleanup | apt autoremove | apt-get autoremove | Entfernt verwaiste Abhängigkeiten |
| Pakete suchen | apt search BEGRIFF | apt-cache search BEGRIFF | Sucht in Name + Beschreibung |
| Paket-Details anzeigen | apt show PAKET | apt-cache show PAKET | Metadaten aus dem Cache |
| Versions-Policy prüfen | (nicht vorhanden) | apt-cache policy PAKET | Welche Versionen aus welcher Quelle |
| Abhängigkeiten anzeigen | (nicht vorhanden) | apt-cache depends PAKET | Direkte Abhängigkeiten |
| Paket herunterladen | apt download PAKET | apt-get download PAKET | Lokal, keine Installation |
dist-upgrade vs. full-upgrade
Ein historischer Sonderfall: Wo apt-get zwischen upgrade und dist-upgrade unterscheidet, verwendet apt die Begriffe upgrade und full-upgrade. Inhaltlich ist die Aufteilung identisch:
| Befehl | Verhalten |
|---|---|
apt-get upgrade / apt upgrade | Aktualisiert installierte Pakete, entfernt nichts |
apt-get dist-upgrade / apt full-upgrade | Aktualisiert und darf bei Bedarf Pakete entfernen, um Konflikte aufzulösen |
apt full-upgrade und apt-get dist-upgrade sind also dasselbe — der modernere Name full-upgrade ist nur sprechender. Bei größeren Versionsspruengen (z.B. Ubuntu 22.04 auf 24.04) ist diese Variante notwendig, weil sie Abhängigkeitskonflikte aktiv auflösen darf.
Praxis-Patterns
Interaktiv: System aktualisieren
Der typische Alltagsbefehl am Terminal — kurz, lesbar, mit Progress-Bars und Farben.
sudo apt update && sudo apt upgradeapt update aktualisiert die Paketliste, apt upgrade installiert die verfügbaren Updates. Im interaktiven Modus fragt apt vor der Installation um Bestätigung — gewollt, denn so kannst du die Liste der zu aktualisierenden Pakete prüfen.
Skript-tauglich: Update in CI oder Dockerfile
In Skripten und Containern soll nichts mehr nachfragen. Hier wird apt-get mit -y (yes auf alle Rückfragen) verwendet.
sudo apt-get -y update && sudo apt-get -y upgradeDas -y automatisiert die Bestätigung. Der Output ist bewusst maschinenlesbar — keine Progress-Bars, keine Farben, ein Format, das sich zwischen Distributionsversionen nicht ändert. Genau diese Eigenschaft macht apt-get zur richtigen Wahl, sobald die Befehle nicht mehr von Hand getippt werden.
Suche: Welches Paket macht das, was ich brauche?
Beide Werkzeuge suchen in Paketnamen und Beschreibungen. Die Treffer und das Ranking sind identisch — nur die Darstellung unterscheidet sich.
# Interaktiv — übersichtliche Ausgabe
apt search webserver
# Skript-tauglich — stabile Ausgabe
apt-cache search webserverWer in einem Skript Suchergebnisse weiterverarbeitet (z.B. mit grep filtert), sollte apt-cache search verwenden. Im Terminal ist apt search die angenehmere Wahl, weil installierte Pakete farblich markiert werden.
Download ohne Installation
Manchmal braucht man die .deb-Datei selbst — etwa um sie auf einem System ohne Internet-Zugang per dpkg -i einzuspielen.
apt download nginxDie .deb-Datei landet im aktuellen Verzeichnis. Abhängigkeiten werden nicht automatisch mitgeladen — für einen kompletten Offline-Transfer braucht es zusaetzliche Tools wie apt-offline oder ein Skript um apt-cache depends.
Paket-Informationen anzeigen
apt show und apt-cache show liefern dieselben Daten — Version, Maintainer, Abhängigkeiten, Beschreibung, Installationsgröße.
apt show nginx
apt-cache show nginxDer einzige sichtbare Unterschied: apt show filtert ein paar interne Felder (z.B. MD5sum, SHA256) heraus, die für den Alltag uninteressant sind. Wer diese Werte braucht — etwa um eine heruntergeladene .deb-Datei zu verifizieren — greift zu apt-cache show.
Quellen-Liste prüfen
apt-cache policy zeigt, aus welchem Repository ein Paket kommt und welche Versionen verfügbar sind. Es gibt keinen direkten apt-Aequivalent.
apt-cache policy nginxDie Ausgabe zeigt die installierte Version, alle verfügbaren Versionen und die Repository-Prioritäten. Unverzichtbar, wenn ein Paket aus mehreren Quellen verfügbar ist (z.B. Standard-Repository + PPA) und man verstehen will, welche Version warum gewinnt.
Häufige Stolperfallen
apt in Skripten — die instabile CLI ignoriert dich nicht.
Schon beim ersten Aufruf in einem nicht-interaktiven Kontext gibt apt die Warnung “WARNING: apt does not have a stable CLI interface. Use with caution in scripts.” aus. Das ist kein hoeflicher Hinweis — es ist eine konkrete Ansage. Der Output von apt kann sich zwischen Versionen ändern: Spaltennamen, Farben (auch in Pipes), Reihenfolge der Felder. Skripte, die apt mit grep oder awk parsen, können nach einem Distributions-Upgrade ploetzlich falsche Daten liefern. In Dockerfiles, Ansible-Playbooks, CI-Pipelines und systemd-Units immer apt-get und apt-cache verwenden.
apt update aktualisiert keine Pakete — sondern nur die Paketliste.
Eine der häufigsten Anfänger-Fallen: sudo apt update wird ausgeführt — und nichts scheint zu passieren. Tatsaechlich aktualisiert update nur den lokalen Paket-Index (die Liste verfügbarer Pakete und Versionen aus den Repositories), nicht die installierten Pakete selbst. Erst apt upgrade (oder full-upgrade) installiert die neuen Versionen tatsaechlich. Die korrekte Reihenfolge ist immer: zuerst update, dann upgrade. Ohne update arbeitet upgrade mit veralteten Daten und übersieht neu verfügbare Updates.
upgrade vs. dist-upgrade vs. full-upgrade — der Unterschied entscheidet.
apt upgrade aktualisiert nur Pakete, deren Update keine zusaetzlichen Änderungen erfordert. Sobald ein Update neue Abhängigkeiten verlangt oder ein anderes Paket entfernen müsste, wird das Paket zurückgehalten. apt full-upgrade (gleichbedeutend mit apt-get dist-upgrade) löst solche Konflikte aktiv auf und darf dafür Pakete entfernen. Bei normalen Updates ist upgrade die sicherere Wahl. Bei Versionsspruengen (Ubuntu 22.04 -> 24.04, Debian 11 -> 12) ist full-upgrade notwendig — sonst bleibt das System auf halbem Weg stehen.
purge vs. remove — Konfigurationsdateien bleiben heimlich liegen.
apt remove PAKET deinstalliert das Paket, laesst aber die systemweiten Konfigurationsdateien in /etc zurück. Das ist gewollt für den Fall, dass das Paket später mit den alten Einstellungen wieder installiert werden soll. In der Praxis führt das jedoch oft zu Konfigurations-Leichen, die über Jahre liegen bleiben. apt purge PAKET entfernt das Paket inklusive aller Konfigurationen und ist meistens die richtige Wahl. Mit dpkg -l | grep ‘^rc’ findest du Pakete im Status “removed but config files remain” — Kandidaten für ein nachträgliches apt purge.
autoremove läuft nicht von selbst — und entfernt manchmal zu viel.
Wer Pakete installiert und wieder deinstalliert, sammelt mit der Zeit verwaiste Abhängigkeiten an: Bibliotheken, die für ein längst entferntes Paket nachgezogen wurden und niemand mehr braucht. apt autoremove raeumt diese auf — aber es läuft nicht automatisch und sollte regelmäßig manuell ausgeführt werden. Vorsicht: In seltenen Fällen schlaegt autoremove die Entfernung von Paketen vor, die du tatsaechlich noch brauchst (z.B. Kernel-Module). Die Liste vor der Bestätigung immer prüfen.
-y in Skripten ist nicht immer genug — manche Updates fragen interaktiv.
Die Option -y beantwortet die Standard-”Yes/No”-Rückfrage automatisch mit Ja. Manche Pakete oeffnen aber während der Installation interaktive Konfigurations-Dialoge (z.B. für Konfigurations-Konflikte oder lokale Anpassungen). Diese werden durch -y nicht abgefangen — das Skript bleibt dann hängen oder bricht ab. Lösung: DEBIAN_FRONTEND=noninteractive setzen und ggf. mit -o Dpkg::Options::=“—force-confdef” -o Dpkg::Options::=“—force-confold” die Default-Antwort für Konfigurations-Konflikte vorgeben. Erst diese Kombination macht ein Update wirklich unbeaufsichtigt-tauglich.
apt-get -s — simulieren statt installieren.
Bevor du eine größere Aktion ausführst (besonders full-upgrade oder autoremove), kannst du sie mit -s oder —simulate trocken durchspielen. apt-get -s upgrade zeigt, welche Pakete aktualisiert, installiert und entfernt würden — ohne tatsaechlich etwas zu verändern. Unverzichtbar auf Produktiv-Systemen, wo eine überraschende Paket-Entfernung Service-Ausfaelle bedeuten kann. Die Simulation gibt es auch bei apt, ist dort aber dank der oben erwaehnten CLI-Instabilität weniger zuverlaessig für eine Auswertung im Skript.
Weiterführende Ressourcen
Externe Quellen
- apt(8) – Debian Manpage — Offizielle Manpage zum modernen Frontend
- apt-get(8) – Debian Manpage — Manpage des Skript-tauglichen Werkzeugs
- apt-cache(8) – Debian Manpage — Manpage für Such- und Inspektionsbefehle
- Debian Wiki: Apt — Umfassende APT-Dokumentation mit Konfigurationsdetails
- Ubuntu Server Guide: Package Management — Praxis-Guide aus der Ubuntu-Dokumentation
Verwandte Artikel
- apt – Pakete installieren und aktualisieren — Detaillierter Einstieg in das moderne Frontend
- dpkg – Pakete installieren und analysieren — Das Low-Level-Werkzeug hinter APT
- Paketquellen verstehen — sources.list und Repository-Prioritäten
- Snap – das alternative Paketformat — Containerisierte Pakete jenseits von APT
- Shell-Scripting – Skript-Grundlagen — Solide Basis für apt-get in Skripten