Einführung
Ubuntu-Software wird üblicherweise als Paket bereitgestellt. Paketquellen veröffentlichen Paketdateien und Metadaten mit Informationen zu Namen, Versionen, Abhängigkeiten und Download-Adressen. apt arbeitet mit Paketquellen und löst Abhängigkeiten auf; dpkg verwaltet auf niedrigerer Ebene die lokale Datenbank der installierten .deb-Pakete.
Sie aktualisieren Metadaten, suchen vor der Installation nach einem Paket, überprüfen ein installiertes Paket, entfernen es anschließend und installieren eine deterministische lokale .deb-Datei. Jede Änderung erfolgt mit einem eigens dafür vorgesehenen Übungspaket und lässt sich anhand des Paketstatus überprüfen, statt sich auf die Terminalhistorie zu verlassen.
Paketstatus und Paketquellen auslesen
In diesem Schritt unterscheiden Sie zwischen der Konfiguration der Paketquellen, den verfügbaren Metadaten und dem Status der installierten Pakete.
Überprüfen Sie die aktivierten Paketquellen. Moderne Ubuntu-Images können Dateien mit den Endungen .list oder .sources verwenden. Diese schreibgeschützte Pipeline durchsucht beide Speicherorte: grep -R sucht rekursiv, -h blendet Dateinamen aus, -s unterdrückt Meldungen zu fehlenden Dateien und -E aktiviert das gruppierte Suchmuster. head begrenzt die Ausgabe auf zwölf passende Zeilen:
grep -RhsE '^(deb |Types:|URIs:|Suites:)' /etc/apt/sources.list /etc/apt/sources.list.d 2>/dev/null | head -n 12
Fragen Sie dpkg ab, ob Bash installiert ist. -W wählt Paketdatensätze aus, während -f das Ausgabeformat festlegt. ${Package}, ${Version} und ${db:Status-Status} sind dpkg-Felder und keine Shell-Variablen, da sich das Format innerhalb einfacher Anführungszeichen befindet:
dpkg-query -W -f='package=${Package} version=${Version} status=${db:Status-Status}\n' bash
dpkg-query liest den lokalen Status der installierten Pakete. Im Gegensatz dazu vergleicht apt-cache policy die installierte Version mit den Versionen, die aus den konfigurierten Paketquellen bekannt sind:
apt-cache policy bash
Speichern Sie eine stabile Momentaufnahme des Installationsstatus:
mkdir -p /home/labex/project/package-lab
dpkg-query -W -f='${Package} ${db:Status-Status}\n' bash > /home/labex/project/package-lab/bash-state.txt
cat /home/labex/project/package-lab/bash-state.txt
Paketquellen-Metadaten aktualisieren
In diesem Schritt aktualisieren Sie den Paketindex und erfahren, welche Änderungen apt update vornimmt.
Führen Sie Folgendes aus:
sudo apt update
Dabei werden aktuelle Metadaten der Paketquellen heruntergeladen. Es werden nicht automatisch neue Versionen aller Pakete installiert. Dafür ist der separate Befehl apt upgrade zuständig.
Überprüfen Sie das Verzeichnis mit dem Metadaten-Cache:
ls -ld /var/lib/apt/lists
find /var/lib/apt/lists -maxdepth 1 -type f | head
Erfassen Sie die Anzahl der vorhandenen regulären Metadatendateien:
find /var/lib/apt/lists -maxdepth 1 -type f | wc -l | tr -d ' ' > /home/labex/project/package-lab/index-file-count.txt
cat /home/labex/project/package-lab/index-file-count.txt
Ein Paket aus einer Paketquelle suchen, überprüfen und installieren
In diesem Schritt untersuchen Sie ein Paket, bevor Sie es installieren.
Suchen Sie in Paketnamen und Beschreibungen nach dem Dienstprogramm zum Auflisten von Verzeichnisstrukturen:
apt search '^tree$'
Lesen Sie die Paketmetadaten:
apt show tree
Installieren Sie das Paket einschließlich der Abhängigkeitsverwaltung. sudo stellt die erforderlichen Administratorrechte bereit, und -y bestätigt diese bereits geprüfte Installationsanfrage automatisch mit „Ja“:
sudo apt install -y tree
Überprüfen Sie sowohl den Paketstatus als auch die Befehlsauflösung und führen Sie das Programm anschließend aus:
dpkg-query -W -f='${Package} ${Version} ${db:Status-Status}\n' tree | tee /home/labex/project/package-lab/tree-installed.txt
command -v tree
tree -L 1 /home/labex/project/package-lab
Listen Sie die vom Paket bereitgestellten Pfade auf:
dpkg -L tree | head
Ein Paket entfernen und das Ergebnis überprüfen
In diesem Schritt entfernen Sie das Übungspaket aus der Paketquelle und unterscheiden zwischen den verschiedenen Bereinigungsvorgängen.
Entfernen Sie tree:
sudo apt remove -y tree
remove löscht die vom Paket installierten Programme, kann jedoch die Paketkonfiguration beibehalten. purge entfernt zusätzlich die paketeigene Konfiguration. autoremove entfernt Abhängigkeiten, die automatisch installiert wurden und nicht mehr benötigt werden. Auf einem echten System sollten Sie den vorgeschlagenen Vorgang vor der Bestätigung überprüfen.
Zeigen Sie zunächst in einer Vorschau, was die Abhängigkeitsbereinigung tun würde, ohne das System zu verändern. Die Option --dry-run führt die Berechnung aus, entfernt aber nichts:
sudo apt autoremove --dry-run | tee /home/labex/project/package-lab/autoremove-preview.txt
Lesen Sie die vorgeschlagenen Aktionen, bevor Sie apt autoremove ohne --dry-run ausführen, besonders auf gemeinsam genutzten oder produktiven Hosts.
Die aktuelle Bash-Sitzung kann sich den alten Pfad eines Befehls merken. Leeren Sie diesen Cache, prüfen Sie, ob der Befehl verschwunden ist, und speichern Sie den Status in der Paketdatenbank:
hash -r
command -v tree || echo "tree command is unavailable"
dpkg-query -W -f='${db:Status-Status}\n' tree 2>/dev/null || echo "not-installed" | tee /home/labex/project/package-lab/tree-removed.txt
Stellen Sie unabhängig davon, ob dpkg einen Restdatensatz behält, einen stabilen Marker sicher:
if dpkg-query -W -f='${db:Status-Status}' tree 2>/dev/null | grep -qx installed; then echo "still-installed"; else echo "not-installed"; fi > /home/labex/project/package-lab/tree-removed.txt
cat /home/labex/project/package-lab/tree-removed.txt
Ein lokales Deb-Paket überprüfen und installieren
In diesem Schritt untersuchen Sie eine vorbereitete .deb-Datei, installieren sie mit apt, führen ihren Befehl aus und entfernen sie anschließend vollständig.
Wechseln Sie in den Arbeitsbereich und überprüfen Sie Paketmetadaten sowie Paketinhalt, ohne das Paket zu installieren:
cd /home/labex/project/package-lab
dpkg-deb -I labex-greeter_1.0_all.deb
dpkg-deb -c labex-greeter_1.0_all.deb
Das Präfix ./ weist apt darauf hin, dass es sich um eine lokale Datei und nicht um den Namen eines Pakets aus einer Paketquelle handelt:
sudo apt install -y ./labex-greeter_1.0_all.deb
Fragen Sie das Paket ab und führen Sie es aus:
dpkg-query -W -f='${Package} ${Version} ${db:Status-Status}\n' labex-greeter
labex-greeter | tee local-package-output.txt
Entfernen Sie das Paket nach dem Test und weisen Sie nach, dass der enthaltene Befehl nicht mehr vorhanden ist:
sudo apt remove -y labex-greeter
if command -v labex-greeter >/dev/null; then echo "still-installed"; else echo "local-package-removed"; fi > local-package-state.txt
cat local-package-state.txt
Zusammenfassung
Sie haben Paketquellen-Metadaten vom Status installierter Pakete unterschieden, apt-Indizes aktualisiert, ein Paket vor der Installation untersucht, enthaltene Dateien und die Befehlsauflösung überprüft, ein Paket aus einer Paketquelle entfernt und den vollständigen Lebenszyklus eines untersuchten lokalen .deb-Pakets durchlaufen.



