Softwareinstallation unter Linux

LinuxBeginner
Jetzt üben

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.