Einführung
Ubuntu-Software wird normalerweise als Paket bereitgestellt. Repositorys veröffentlichen Paketdateien und Metadaten mit Angaben zu Namen, Versionen, Abhängigkeiten und Download-Speicherorten. apt arbeitet mit Repositorys und löst Abhängigkeiten auf. dpkg verwaltet auf einer niedrigeren 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 und installieren ein reproduzierbares lokales .deb-Paket. Jede Änderung verwendet ein entbehrliches Übungspaket und lässt sich anhand des Paketstatus statt anhand des Verlaufs im Terminal überprüfen.
Paketstatus und Paketquellen lesen
In diesem Schritt unterscheiden Sie zwischen der Konfiguration der Repositorys, verfügbaren Metadaten und dem Status installierter Pakete.
Überprüfen Sie die aktivierten Paketquellen. Moderne Ubuntu-Images können Dateien mit der Endung .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, weil 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 installierter Pakete. Im Gegensatz dazu vergleicht apt-cache policy die installierte Version mit den Versionen, die aus den konfigurierten Repositorys bekannt sind:
apt-cache policy bash
Speichern Sie eine stabile Beobachtung 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
Repository-Metadaten aktualisieren
In diesem Schritt aktualisieren Sie den Paketindex und lernen, welche Änderungen apt update vornimmt.
Führen Sie den folgenden Befehl aus:
sudo apt update
Dabei werden aktuelle Repository-Metadaten heruntergeladen. Es werden nicht automatisch neuere Versionen aller Pakete installiert. Das Aktualisieren installierter Pakete ist ein separater Vorgang mit apt upgrade.
Ü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
Ermitteln Sie, wie viele reguläre Metadatendateien vorhanden sind:
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 Repository-Paket 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 Verzeichnisbäumen:
apt search '^tree$'
Lesen Sie die Paketmetadaten:
apt show tree
Installieren Sie das Paket und lassen Sie dabei Abhängigkeiten verwalten. sudo stellt die erforderlichen Administrationsrechte bereit. -y beantwortet diese zuvor geprüfte Installationsanfrage automatisch mit „Ja“:
sudo apt install -y tree
Überprüfen Sie anschließend sowohl den Paketstatus als auch die Auflösung des Befehls und führen Sie ihn 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 dem Repository und unterscheiden zwischen verwandten 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 zum Paket gehörende Konfiguration. autoremove entfernt Abhängigkeiten, die automatisch installiert wurden und nicht mehr benötigt werden. Überprüfen Sie den Vorschlag, bevor Sie diesen Befehl auf einem echten Host bestätigen.
Zeigen Sie an, was eine Bereinigung der Abhängigkeiten bewirken würde, ohne das System zu ä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 jemals ohne --dry-run ausführen, insbesondere auf einem gemeinsam genutzten oder produktiven Host.
Die aktuelle Bash-Sitzung kann sich noch an den alten Pfad eines Befehls erinnern. Leeren Sie diesen Befehls-Cache. Überprüfen Sie anschließend, dass der Befehl nicht mehr vorhanden 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
Legen Sie unabhängig davon, ob dpkg einen Restdatensatz beibehält, eine stabile Statusmarkierung an:
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 überprüfen Sie ein vorbereitetes .deb-Paket, installieren es mit apt, führen den enthaltenen Befehl aus und entfernen das Paket anschließend vollständig.
Wechseln Sie in den Arbeitsbereich und überprüfen Sie die Paketmetadaten sowie den 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 ./ teilt apt mit, dass es sich um eine lokale Datei und nicht um den Namen eines Repository-Pakets handelt:
sudo apt install -y ./labex-greeter_1.0_all.deb
Fragen Sie das Paket ab und führen Sie den enthaltenen Befehl 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 Repository-Metadaten vom Status installierter Pakete unterschieden, die apt-Indizes aktualisiert, ein Paket vor der Installation untersucht, bereitgestellte Dateien und die Befehlsauflösung überprüft, ein Repository-Paket entfernt und den vollständigen Lebenszyklus eines untersuchten lokalen .deb-Pakets durchlaufen.



