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 vonKommentare
- 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 vonapt-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 vonaptitude
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