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
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 moestaptitude
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
-u
is een standaardoptie vanapt-get