Maak een lijst van beschikbare updates, maar installeer ze niet

Ik wil dat mijn cron-run rapportagescript me op de hoogte stelt als er updates zijn voor mijn pakketten. Is het een manier om apt-get mij de lijst met beschikbare updates te laten geven, maar niets meer te doen?

Antwoord

apt

Voor moderne versies van apt is er een specifieke schakelaar hiervoor:

apt list --upgradable

apt-get

Voor het oude apt-get commando het -u switch toont een lijst met pakketten die beschikbaar zijn voor upgrade:

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

Van de apt-get man-pagina :

-u
–show- geüpgraded
  Toon geüpgradede pakketten; Druk een lijst af van alle pakketten die moeten worden geüpgraded. Configuratie-item: APT :: Get :: Show-Upgraded.
–assume-no   Automatisch “nee” voor alle prompts. & lt == Om te voorkomen dat de installatie begint

Reacties

  • Ik hoopte dat dit gedaan kon worden zonder root
  • Als je ” Y ” typt en op Enter drukt, geeft dit commando zal updates installeren. Ik zou zeker aanraden om ” -s ” toe te voegen, anders is dit antwoord misleidend
  • Dit is een zeer verkeerd antwoord omdat (zonder aanvullende opties) het commando wacht op invoer en als de gebruiker de verkeerde invoer invoert, wordt het pakket geïnstalleerd, wat het systeem wijzigt wat niet is wat het OP wil (is net gebeurd op mijn systeem)
  • En trouwens: -u is een standaardoptie van apt-get
  • @ThorSummoner ‘ -s ‘ zal doen wat je wilt & werkt zonder root

Answer

apt-get --just-print upgrade 

Wordt niet zo gemakkelijk gelezen , hieronder is een perl one liner om de uitvoer van apt-get “te ontleden:

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"}" 

Dit zou iets moeten opleveren als:

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

Hopelijk helpt het iemand anders,

Reacties

  • j voor de lach: apt-get -s upgrade | awk -F ‘ [] [()] + ‘ ‘ / ^ Inst / {printf ” Prog:% s \ tcur:% s \ tavail:% s \ n “, $ 2, $ 3, $ 4} ‘
  • Het zou er ook veel leuker uit kunnen zien als je column als volgt gebruikt: 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 Ziet er goed uit!
  • Ik ‘ ben bang dat deze Perl-code mijn machine zal hacken .. .;)
  • @AntonioK Hoe sorteer je de namen van de programmas alfabetisch?

Antwoord

Een andere optie, geïnspireerd door enzotib:

aptitude search "~U" | wc -l

Dit commando gebruikt aptitude om de nieuwe pakketten uit te voeren en vervolgens wc om maar de regels te tellen.

Even terzijde, ik ontdekte dat de oplossing van enzotib zonder de enkele aanhalingstekens rond de ~U niet voor mij werkte. (Wheezy, ZSH, aptitude 0.6.8.2)

Update:

Met het nieuwe apt kunt u doen:

apt list --upgradeable

Opmerkingen

  • Bedankt hiervoor, het apt list-commando was precies wat ik wilde.
  • Leuk met deze oplossing is dat je sudo / root niet nodig hebt.

Antwoord

De gemakkelijkste is:

apt list --upgradeable

Reacties

  • werkt niet op mint.
  • Het ‘ is jammer dat dit niet ‘ retourneert geen verschillende exitcodes, afhankelijk van of er upgrades beschikbaar zijn of niet. Zou leuk geweest zijn om dit in een script te kunnen gebruiken.

Answer

Je kunt

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

of de ongedocumenteerden

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

Een andere methode die een apt-get simulatie:

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

Reacties

  • Dit aptitude-commando werkte prima voor mij en deed dat ook root niet nodig
  • apt-get -s dist-upgrade werkt ook goed en heeft dezelfde output als je het door die awker leidt
  • dank je! dit kwam uit nogal wat afhankelijkheidshel. probeerde dist-upgrade maar niet een aantal pakketten te verliezen, dus moest aptitude worden gebruikt. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') deed het!

Antwoord

Bekijk pakket “apticron”:

apticron – Eenvoudig tool om te mailen over in afwachting van pakketupdates

Apticron is een eenvoudig script dat dagelijks e-mails verstuurt over in afwachting van pakketupdates zoals beveiligingsupdates, waarbij het op de juiste manier omgaat met pakketten die in de wacht staan. door dselect en aptitude.

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

Reacties

  • Je link is verbroken …

Antwoord

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

geeft een lijst van beschikbare updates zonder daadwerkelijk te installeren.

Eerste commando werkt pakketindexbestanden bij voordat gesimuleerde (dus -s) upgrade is gedaan. “-s” zal een gesimuleerde upgrade uitvoeren en pakketten tonen die zouden worden geïnstalleerd, maar die eigenlijk niets zullen installeren.

Integendeel, “-u” in plaats van “-s” zou daadwerkelijk installeren na bevestiging.

Opmerkingen

  • De simulatie-optie kan worden geactiveerd met elk van -s, --simulate, --just-print, --dry-run, --recon, --no-act, verkenning en droogloop zijn mijn persoonlijke favorieten.

Answer

Ik had volledige versie-informatie nodig over mogelijke upgrades, dus gebruikte ik een aanpassing van jasonwryan “s antwoord:

apt-get -V -u upgrade 

Het is een eenvoudige en IMO redelijk opgemaakte uitvoer.

Antwoord

Filter gewoon de uitvoer van

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

om alleen de gewenste informatie in uw logboek te hebben.

Waarschijnlijk heb je “het mooie gedeelte na de regel nodig

De volgende pakketten zullen worden geüpgraded:

met weinig spaties in het begin.

Reacties

  • Hallo en welkom op de site. Zoals het er nu uitziet, is uw antwoord in feite een herhaling van bestaande antwoorden en voegt het dus niets nieuws toe. Je zou het kunnen verbeteren door bijvoorbeeld uit te leggen hoe je de output filtert, een uitleg toe te voegen over wat de verschillende schakelaars doen etc.

Answer

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

is het eenvoudigst voor cron-e-mails; er is geen gebruikersherhaling, en als er geen updates zijn, is er geen uitvoer.

Answer

Jet nog een on-liner, geïnspireerd door dit antwoord :

 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;  

De uitvoer ziet er als volgt uit (gekleurd):

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 

Als je de korte beschrijving niet wilt, gebruik dan deze:

 { 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;  

Uitvoer:

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) 

Reacties

  • De enige liner is fantastisch, behalve dat hij ‘ de beschrijving van sommige pakketten niet uitvoert.

Answer

apt-check is waarschijnlijk de meest efficiënte scriptmethode.

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

Een zeer kleine wijziging toont u alleen de beveiligingsupdates.

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

Antwoord

Nadat ik een waarschuwing heb geschreven voor het antwoord van @jasonwryan, wil ik mijn eigen oplossing bieden:

apt-get dist-upgrade --assume-no 

Helaas werkt deze niet met Debian Wheezy en moest ik enkele lxc-containers controleren die nog steeds niet geüpgraded zijn. Dit formulier zal altijd werken:

apt-get dist-upgrade </dev/null 

Ten slotte wilde ik ook de uitvoer opnieuw formatteren. Ik heb ervoor gekozen om de aanroep opnieuw te wijzigen (gebruik --dry-run maar negeer alle extra uitvoer) omdat het veiliger aanvoelt:

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} " 

Retourneert:

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

Antwoord

Ik gebruik dit graag:

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

Je krijgt een output als deze:

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

als er updates beschikbaar zijn , en geen als er geen is. Op deze manier kunt u het eenvoudig koppelen aan een monitoringoplossing.

Antwoord

Als een variatie Ik gebruik het volgende:

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) }" 

Plak het in een script met de naam apt-updates en je kunt dan apt-updates om een lijst van alle updates te krijgen, ongeacht de gebruiker.

Je moet nog steeds apt-get update aanroepen met geprivilegieerde toegang.

Opmerkingen

  • uitvoer toont alleen de pakketnaam (eerste kolom), tweede kolom drukt altijd = ” en de derde kolom is altijd leeg. Ik ‘ m op Mint.

Antwoord

Daar ” s de tool apt-show-versions . Voer het volgende uit om beschikbare updates weer te geven:

apt-show-versions -u 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *