Verfügbare Updates auflisten, aber nicht installieren

Ich möchte, dass mein Cron-Run-Berichtsskript mich benachrichtigt, falls Updates für meine Pakete vorhanden sind. Kann ich mit apt-get die Liste der verfügbaren Updates anzeigen, aber nichts weiter tun?

Antwort

apt

Für moderne Versionen von apt gibt es hierfür einen speziellen Schalter:

apt list --upgradable

apt-get

Für den alten Befehl apt-get wird der Befehl zeigt eine Liste der Pakete an, die für ein Upgrade verfügbar sind:

# apt-get -u upgrade --assume-no

Vom apt-get Manpage :

-u
–show- aktualisiert
  Aktualisierte Pakete anzeigen; Eine Liste aller zu aktualisierenden Pakete ausdrucken. Konfigurationselement: APT :: Get :: Show-Upgraded.
–assume-no   Automatisches „no“ für alle Eingabeaufforderungen. & lt == Um zu verhindern, dass die Installation von

Kommentare

  • Ich hatte gehofft, dass dies ohne root
  • möglich ist. Wenn Sie “ Y “ eingeben und die Eingabetaste drücken, wird dieser Befehl ausgeführt installiert Updates. Ich würde definitiv empfehlen, “ -s “ hinzuzufügen, andernfalls ist diese Antwort irreführend
  • Dies ist ein sehr falsche Antwort, da der Befehl (ohne zusätzliche Optionen) auf die Eingabe wartet und wenn der Benutzer die falsche Eingabe eingibt, wird das Paket installiert, das das System ändert , was nicht das OP ist will (ist gerade auf meinem System passiert)
  • Und übrigens: -u ist eine Standardoption von apt-get
  • @ThorSummoner ‚ -s ‚ macht, was Sie wollen & funktioniert ohne root

Antwort

apt-get --just-print upgrade 

Ist nicht so einfach zu lesen Im Folgenden finden Sie einen Perl-One-Liner zum Parsen der Ausgabe von apt-get:

apt-get --just-print upgrade 2>&1 | perl -ne "if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}" 

Dies sollte ungefähr Folgendes ausgeben:

PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9 

Hoffentlich hilft es jemand anderem,

Kommentare

  • j Nur zum Lachen: apt-get -s upgrade | awk -F ‚ [] [()] + ‚ ‚ / ^ Inst / {printf “ Prog:% s \ tcur:% s \ tavail:% s \ n „, $ 2, $ 3, $ 4} ‚
  • Es könnte auch viel schöner aussehen, wenn Sie column wie folgt verwenden: apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}' | column -s " " -t
  • @AntonioK Sieht gut aus!
  • Ich ‚ befürchte, dieser Perl-Code wird meine Maschine hacken. .;)
  • @AntonioK Wie sortieren Sie die Namen der Programme alphabetisch?

Antwort

Eine weitere Option, die von enzotib inspiriert wurde:

aptitude search "~U" | wc -l

Dieser Befehl verwendet aptitude, um die neuen Pakete und dann wc auszugeben um nur die Zeilen zu zählen.

Bei einer Nebenbemerkung stellte ich fest, dass die Lösung von enzotib ohne einfache Anführungszeichen um ~U bei mir nicht funktioniert hat. (Wheezy, ZSH, Eignung 0.6.8.2)

Update:

Mit der neuen Wohnung können Sie Folgendes tun:

apt list --upgradeable

Kommentare

  • Vielen Dank dafür, der Befehl apt list war genau das, was ich wollte.
  • Schön an dieser Lösung ist, dass Sie kein sudo / root benötigen.

Antwort

Am einfachsten ist:

apt list --upgradeable

Kommentare

  • funktioniert nicht mit Minze.
  • Es ‚ schade, dass dies nicht ‚ Gibt keine unterschiedlichen Exit-Codes zurück, je nachdem, ob Upgrades verfügbar sind oder nicht. Es wäre schön gewesen, dies in einem Skript verwenden zu können.

Antwort

Sie können p ausführen >

aptitude -F%p --disable-columns search ~U 

oder das undokumentierte

/usr/lib/update-notifier/apt-check -p; echo 

Eine andere Methode, die eine apt-get Simulation:

apt-get -s dist-upgrade | awk "/^Inst/ { print $2 }" 

Kommentare

  • Dieser Eignungsbefehl hat bei mir hervorragend funktioniert und funktioniert Kein Root erforderlich
  • apt-get -s dist-upgrade funktioniert auch gut und hat die gleiche Ausgabe, wenn Sie es durch diesen awker leiten
  • danke! Dies kam aus einer ziemlichen Abhängigkeitshölle heraus. Ich habe versucht, dist-upgrade zu verwenden, aber einige Pakete nicht verloren, die für die Verwendung von aptitude erforderlich sind. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') hat es geschafft!

Antwort

Sehen Sie sich das Paket „apticron“ an:

apticron – Einfach Tool zum Versenden von ausstehenden Paketaktualisierungen

Apticron ist ein einfaches Skript, das täglich E-Mails über ausstehende Paketaktualisierungen wie Sicherheitsupdates sendet und Pakete in der Warteschleife ordnungsgemäß behandelt durch Auswahl und Eignung.

https://packages.debian.org/buster/apticron

Kommentare

  • Ihr Link ist unterbrochen …

Antwort

apt-get update && apt-get -s upgrade 

listet verfügbare Updates auf, ohne sie tatsächlich zu installieren.

Der erste Befehl aktualisiert Paketindexdateien, bevor ein simuliertes (also -s) Upgrade durchgeführt wird getan. „-s“ führt ein simuliertes Upgrade durch und zeigt Pakete an, die installiert werden, aber tatsächlich nichts installieren.

Im Gegenteil, „-u“ anstelle von „-s“ wird nach Bestätigung tatsächlich installiert.

Kommentare

  • Die Simulationsoption kann mit -s, --simulate, --just-print, --dry-run, --recon, --no-act ausgelöst werden. Aufklärung und Trockenlauf sind meine Persönliche Favoriten.

Antwort

Ich benötigte Vollversionsinformationen zu möglichen Upgrades, daher habe ich eine Modifikation von jasonwryan verwendet Antwort:

apt-get -V -u upgrade 

Es ist eine einfache und IMO-vernünftig formatierte Ausgabe.

Antwort

Filtern Sie einfach die Ausgabe von

apt-get update && apt-get -s -V -u upgrade 

, um nur die bevorzugten Informationen in Ihrem Protokoll zu haben.

Höchstwahrscheinlich benötigen Sie den schönen Teil nach der Zeile

Die folgenden Pakete werden aktualisiert:

mit wenigen Leerzeichen am Anfang.

Kommentare

  • Hallo und willkommen auf der Website. So wie es aussieht, ist Ihre Antwort im Grunde eine Wiederholung bestehender Antworten und fügt daher nichts Neues hinzu. Sie können es verbessern, indem Sie beispielsweise erklären, wie die Ausgabe gefiltert wird, eine Erläuterung der Funktionsweise der verschiedenen Schalter hinzufügen usw.

Antwort

apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst " 

ist am einfachsten für Cron-E-Mails. Es gibt keine Benutzeriteration, und wenn keine Aktualisierungen vorhanden sind, erfolgt keine Ausgabe.

Antwort

Jet einen anderen On-Liner, inspiriert von dieser Antwort :

 function a { read input;dpkg -l ${input} | grep " ${input} " | awk "{$1=$2=$3=$4="";print $0}" | sed "s/^ *//";unset input;};{ apt-get --just-print upgrade 2>&1 | perl -ne "if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}";} | while read -r line; do echo -en "$line $(echo $line | awk "{print $1}" | a )\n"; done;  

Die Ausgabe sieht folgendermaßen aus (farbig):

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8) Embedded GNU C Library: National Language (locale) data [support] linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Header files for Linux 3.2.0-4-amd64 linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Common header files for Linux 3.2.0-4 sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2) Provide limited super user privileges to specific users 

Wenn Sie die Kurzbeschreibung nicht möchten, verwenden Sie diese:

 { apt-get --just-print upgrade 2>&1 | perl -ne "if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}";} | while read -r line; do echo -en "$line\n"; done;  

Ausgabe:

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8) linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2) 

Kommentare

  • Der eine Liner ist fantastisch, außer dass ‚ die Beschreibung einiger Pakete nicht ausgibt.

Antwort

apt-check ist wahrscheinlich die effizienteste Skriptmethode.

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ";" -f 1 

Eine sehr kleine Änderung zeigt nur die Sicherheitsupdates an.

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ";" -f 2 

Antwort

Nachdem ich eine Warnung an die Antwort von @jasonwryan geschrieben habe, möchte ich meine eigene Lösung bereitstellen:

apt-get dist-upgrade --assume-no 

Leider funktioniert dieser nicht mit Debian Wheezy und ich musste einige lxc-Container überprüfen, die noch nicht aktualisiert wurden. Dieses Formular funktioniert immer:

apt-get dist-upgrade </dev/null 

Schließlich wollte ich auch die Ausgabe neu formatieren. Ich habe mich entschieden, den Anruf erneut zu ändern (mit --dry-run, aber alle zusätzlichen Ausgaben zu ignorieren), weil er sich sicherer anfühlt:

apt-get --dry-run dist-upgrade | awk " BEGIN{p=0} /^The/{p=1;t=$0} /no longer required/{p=0} #optional: /been kept back/{p=0} p && t{print t;t=""} /^ / && p{print $0} " 

Rückgabe:

The following packages have been kept back: iproute The following packages will be upgraded: unzip 

Antwort

Ich verwende dies gerne:

apt-get -qq update && apt-get -qq -s upgrade 

Sie erhalten eine Ausgabe wie diese:

Inst linux-base [3.5] (4.5~deb8u1 Debian-Security:8/oldstable [all]) Conf linux-base (4.5~deb8u1 Debian-Security:8/oldstable [all]) 

, wenn Updates verfügbar sind und keine, wenn es nicht „t“ gibt. Auf diese Weise können Sie es einfach mit einer Überwachungslösung koppeln.

Antwort

Als Variation Ich verwende Folgendes:

apt-get -V -s dist-upgrade \ |grep -E "^ .*=>.*" \ |awk "BEGIN { ul=sprintf("%*s",40,""); gsub(/ /,"-",ul); printf "%-30s %-30s %-30s\n", "Package", "Installed", "Available"; printf "%-30.30s %-30.30s %-30.30s\n", ul, ul, ul; } { printf "%-30s %-30s %-30s\n", $1, substr($2,2), substr($4,1,length($4)-1) }" 

Stecke es in ein Skript mit dem Namen apt-updates und du kannst dann apt-updates, um eine Liste aller Updates unabhängig vom Benutzer zu erhalten.

Sie müssen immer noch apt-get update mit privilegiertem Zugriff aufrufen.

Kommentare

  • Die Ausgabe zeigt nur den Paketnamen (erste Spalte), die zweite Spalte gibt immer = “ und die dritte Spalte ist immer leer. Ich ‚ bin auf Mint.

Antwort

Dort “ s das apt-show-versions Tool. Um verfügbare Updates anzuzeigen, führen Sie Folgendes aus:

apt-show-versions -u 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.