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.

WerkzeugEingeführtZielgruppeCharakter
apt-get1998Skripte, AutomatisierungStabile CLI, maschinenlesbarer Output
apt-cache1998Skripte, InspektionSuch- und Anzeige-Operationen ohne Schreibzugriff
apt2014Menschen, interaktive SessionsBuntere 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.

Bash Typischer apt-Aufruf
sudo apt update
sudo apt install nginx
apt search webserver
apt show nginx

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

Bash apt-Warnung in Skripten
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-BefehlZweck
apt-cache search BEGRIFFDurchsucht Paketnamen und -beschreibungen
apt-cache show PAKETZeigt detaillierte Metadaten zu einem Paket
apt-cache policy PAKETZeigt verfügbare Versionen und ihre Quelle
apt-cache depends PAKETListet die Abhängigkeiten eines Pakets
apt-cache rdepends PAKETZeigt 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.

Operationaptapt-get / apt-cacheAnmerkung
Paketlisten aktualisierenapt updateapt-get updateIdentische Funktion
Paket installierenapt install PAKETapt-get install PAKETIdentische Funktion
Paket entfernenapt remove PAKETapt-get remove PAKETKonfigurationsdateien bleiben
Paket vollständig entfernenapt purge PAKETapt-get purge PAKETInklusive Konfigurationsdateien
Pakete aktualisierenapt upgradeapt-get upgradeEntfernt keine Pakete
Vollständiges Upgradeapt full-upgradeapt-get dist-upgradeKann Pakete entfernen
Auto-Cleanupapt autoremoveapt-get autoremoveEntfernt verwaiste Abhängigkeiten
Pakete suchenapt search BEGRIFFapt-cache search BEGRIFFSucht in Name + Beschreibung
Paket-Details anzeigenapt show PAKETapt-cache show PAKETMetadaten aus dem Cache
Versions-Policy prüfen(nicht vorhanden)apt-cache policy PAKETWelche Versionen aus welcher Quelle
Abhängigkeiten anzeigen(nicht vorhanden)apt-cache depends PAKETDirekte Abhängigkeiten
Paket herunterladenapt download PAKETapt-get download PAKETLokal, 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:

BefehlVerhalten
apt-get upgrade / apt upgradeAktualisiert installierte Pakete, entfernt nichts
apt-get dist-upgrade / apt full-upgradeAktualisiert 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.

Bash Interaktives Update
sudo apt update && sudo apt upgrade

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

Bash Update in einem Dockerfile oder Ansible-Task
sudo apt-get -y update && sudo apt-get -y upgrade

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

Bash Paket-Suche
# Interaktiv — übersichtliche Ausgabe
apt search webserver

# Skript-tauglich — stabile Ausgabe
apt-cache search webserver

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

Bash Paket nur herunterladen, nicht installieren
apt download nginx

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

Bash Paket-Details
apt show nginx
apt-cache show nginx

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

Bash Aus welchem Repository kommt das Paket?
apt-cache policy nginx

Die 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

/ Weiter

Zurück zu Pakete

Zur Übersicht