Wie erhalte ich eine Liste veralteter Pakete?


19

Ich versuche herauszufinden, wie ich eine Liste der Pakete erhalten kann, die in den von mir aktivierten Repositorys nicht mehr verfügbar sind. Diese Workstation hat einige Versionen von Ubuntu durchlaufen und es wurden viele Repositorys von Drittanbietern hinzugefügt und entfernt. Ich möchte eine Liste der Software erhalten, die ich aus diesen entfernten Repositorys habe, damit ich sie bereinigen oder die entsprechenden Repositorys wieder hinzufügen kann.

Antworten:


23
aptitude search '~o'

Aptitude verfügt über einige sehr leistungsfähige Suchfunktionen. Leider ist die Syntax etwas unhandlich und Sie müssen die Hilfeseite durchgehen, um die Dokumentation zu finden, aber es lohnt sich.

apt-show-versionen können auch hilfreich sein:

apt-show-versions | grep 'No available version'

1
Einen schönen Artikel über veraltete Pakete finden Sie hier: raphaelhertzog.com/2011/02/07/…
Lluís

Eine weitere nützliche Liste wird erstellt vonapt-show-versions | grep "newer than version in archive"
Sean

Ich denke, apt-show-versions ist das Beste, einfach weil die aptitude-Zeile extrem kontraintuitiv zu merken ist. Jedes Mal, wenn ich es brauche, muss ich es googeln / nachschlagen / speichern / ein Skript erstellen / etc.
j riv

6

So rufen Sie eine Liste der Apps ab, die sich nicht in einem registrierten Repository oder PPA befinden:

sudo apt-get install apt-show-versions
apt-show-versions | grep 'No available version'

Das sollte so aussehen:

app1 1.0.0.14 installed: No available version in archive
app23 0.3.6 installed: No available version in archive
app332 7.0.9377 installed: No available version in archive

Bei mir funktionierte dies und zeigte drei Apps, die ich mit DEB-Paketen installiert hatte und die in einem Repo oder PPA nicht verfügbar waren.

Denken Sie jedoch daran, dass es unmöglich ist, nach allen Programmen zu suchen, nur nach denen, die durchlaufen wurden dpkg. Beispielsweise werden einige Apps installiert, indem sie einfach in die richtigen Ordner extrahiert werden, oder andere verwenden einen eigenständigen Installationsordner oder ein eigenständiges Skript. Am besten führen Sie selbst eine Liste der Apps, die Sie mit einer anderen Methode als APT installiert haben.


Funktioniert für alle meine lokal dpkginstallierten Pakete. Eine Ausnahme. Es listet auf skype-bin, wohingegen apt-cache policy skype-bindeutlich das Canonical Partner Repo angezeigt wird. Ich bin nicht sicher, was los ist. Multiarch-Problem? Noch +1 für apt-show-versions!
Gertvdijk

aptitude nennt diese "veralteten" Pakete. Siehe Chronitis-Kommentar oben.
Henk Poley

5

Wenn Sie aptitude installiert haben, verwenden Sie

aptitude search '?obsolete'

oder seine Kurzform

aptitude search '~o'

Hier ist es eine Beispielausgabe

i A gcc-4.7-base - GCC, the GNU Compiler Collection (base package)
id  libdb4.7     - Berkeley v4.7 Database Libraries [runtime]
i   libudev0     - libudev shared library

Das erste Zeichen jeder Zeile gibt den aktuellen Status des Pakets an. Die häufigsten Staaten sind:

  • p, was bedeutet, dass keine Spur des Pakets auf dem System vorhanden ist,
  • c, dh das Paket wurde gelöscht, die Konfigurationsdateien verbleiben jedoch auf dem System.
  • i, was bedeutet, dass das Paket installiert ist, und
  • v, was bedeutet, dass das Paket virtuell ist.

Das zweite Zeichen gibt die gespeicherte Aktion an, die für das Paket ausgeführt werden soll, sofern vorhanden. Andernfalls wird ein Leerzeichen angezeigt. Die häufigsten Aktionen sind:

  • i, was bedeutet, dass das Paket installiert wird,
  • d, was bedeutet, dass das Paket gelöscht wird, und
  • p bedeutet, dass das Paket und seine Konfigurationsdateien entfernt werden.

Wenn das dritte Zeichen A ist, wurde das Paket automatisch installiert.

Eine vollständige Liste der möglichen Status- und Aktionsflags finden Sie im Abschnitt Zugreifen auf Paketinformationen im Aptitude-Referenzhandbuch.


1
aptitude search ?obsoletekann in Bash arbeiten, aber Sie sollten verwendenaptitude search '?obsolete'
AB

Könnten Sie ein paar Details zum Parsen der Ausgabe hinzufügen?
Elder Geek

Ist "? Obsolet" anders als "~ o"?
Sean

@ Sean Nein, sie unterscheiden sich nicht. ~ o ist in der Tat die Kurzform für? obsolet.
Demis Palma ツ

Die Anführungszeichen werden von der Shell analysiert. Ich denke, was AB damit gemeint hat, ist, dass Sie keine seltsamen Zeichen ohne Flucht in die Befehlszeile eingeben sollten, weil Sie nicht wissen, was Ihre Shell mit ihnen machen wird.
Sean

2

Sie können den folgenden Bash-Einzeiler verwenden:

comm -23 <(dpkg-query -W -f '${db:Status-Abbrev}\t${Package}\n' | grep '^.[^nc]' | cut -f2 | sort) <(apt-cache dumpavail | sed -rn 's/^Package: (.*)/\1/p' | sort -u)

Hierfür müssen keine zusätzlichen Pakete installiert werden, und dies ist relativ schnell. Dies findet auch teilweise installierte Pakete (findet jedoch nicht diejenigen, die nur noch Konfigurationsdateien enthalten; diese können jedoch leicht geändert werden). Hinweis: Hierbei ist es egal, um welche Architektur es sich bei den Paketen handelt.

Noch schneller geht es mit modernem apt:

 apt list --installed | awk -F/ '/\[installed,local\]/{print $1}'

Eine weitere Option ist das Ausführen

ubuntu-support-status --show-unsupported

und lesen Sie die veralteten Paketnamen im Abschnitt "Nicht mehr herunterladbar:".


'apt list --manuell installiert | grep -v cosmic 'zeigt falsch positive Ergebnisse. Diese Antwort ist viel besser!
TamusJRoyce

1
@TamusJRoyce, ja, ich nehme ja jetzt nach der Bearbeitung an.
Jarno

Ich habe aptdarum gebeten, dass die Liste hier einfach zu bekommen ist . Sie können markieren, dass der Fehler Sie betrifft.
Jarno

1

Weitere Informationen zu untersuchen.

Ubuntu-Support-Status 
echo "$ (sudo apt-mark showmanual | wc -l) -Pakete, die als 'manuell installiert' markiert sind."

... ubuntu-support-status und apt-mark müssen möglicherweise installiert werden.


Keine Notwendigkeit, sudomit zu verwenden apt-mark showmanual.
jarno

ubuntu-support-statuslistet die Anzahl der veralteten Pakete auf, jedoch nicht die Paketnamen.
Jarno

1
Lesen Sie die Ausgabe vonubuntu-support-status --help
Hannu

Oh, danke für den Hinweis.
Jarno

0

Es mag einen saubereren Weg geben, aber Sie können es von oben tun

dpkg -l | cut -f 3 -d ' ' > installed
xargs -n 1 --replace=X apt-cache search ^X$ < installed | cut -f 1 -d ' ' > available
diff installed available

Bereinigen Sie die ersten Zeilen der installedDatei: Sie enthält Überschriften.

Bonus, wenn jemand meine Syntaxhervorhebung korrigieren kann ...


2
Wenn Sie die Ausgabe von verwenden möchten dpkg -l, um eine Liste der installierten Pakete zu erhalten, sollten Sie die Ergebnisse auf Zeilen mit 'i' in der zweiten Spalte beschränken, da dpkg auch Pakete auflistet, die nicht installiert (möglicherweise entfernt, aber nicht gelöscht) sind. . Wenn Sie beispielsweise Ihren ersten Befehl auf " dpkg -l | grep '^.[^i]' | cut -f 3 -d ' ' it" ändern, wird eine Liste von Paketen zurückgegeben, die NICHT installiert sind. (aber es war einmal)
Eintopf am

1
Außerdem apt-cache search someinstalledpackagewird etwas zurückgegeben, auch wenn das Paket von einem Repo nicht verfügbar ist, also glaube ich nicht, dass dies überhaupt funktionieren wird.
Eintopf am

1
@stew Ich lasse das hier oben, um zu sehen, ob jemand zu Schlussfolgerungen kommt, aber deine Antwort ist definitiv viel besser. +1 an Sie.
Jeff Ferland

@stew dpkg -l | grep '^.[^i]' | cut -f 3 -d ' 'druckt auch einige Kopfzeilen.
Jarno

Selbst wenn diese Antwort funktioniert, ist sie sehr langsam, da sie apt-cache searchfür jedes Paket separat ausgeführt wird.
Jarno

0

Wie bereits erwähnt, ist apt-get search keine gute Methode, um zu überprüfen, ob ein Paket noch verfügbar ist. Zusätzlich habe ich alles nur einer Zeile hinzugefügt:

for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done

Und warumgrep '^i'
AB

@AB guter Punkt; Das sagt nicht, ob das Paket installiert ist, sondern, dass die gewünschte Aktion des Pakets installiert werden soll. Siehe man dpkg-queryfür weitere Informationen.
17.

Dies ist sehr langsam
jarno

apt-cache showdoes ist auch nicht gut, um zu überprüfen, ob das Paket verfügbar ist. Wenn Sie das jeweilige Repository deaktivieren und kein anderes aktiviertes Repository über dieses verfügt, wird das Paket weiterhin angezeigt.
jarno
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.