Szeretném, ha a cron futtatott jelentési szkriptem értesítene engem, ha vannak frissítések a csomagjaimhoz. Így lehet apt-get
megadni az elérhető frissítések listáját, de nem teszek többet?
Válasz
apt
A apt
modern verzióihoz erre külön kapcsoló van:
apt list --upgradable
apt-get
A régi apt-get
parancshoz a kapcsoló megmutatja a frissítésre rendelkezésre álló csomagok listáját:
# apt-get -u upgrade --assume-no
-u
– show- frissített Frissített csomagok megjelenítése; Kinyomtatja az összes frissítendő csomag listáját. Konfigurációs elem: APT :: Get :: Show-Upgraded.
–assume-no Automatikus “nem” minden felszólításra. & lt == Annak megakadályozása, hogy telepíteni kezdje
Megjegyzések
Válasz
apt-get --just-print upgrade
Nem olvasható olyan könnyen Az alábbiakban egy perl one vonal található az apt-get “kimenet elemzéséhez:
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"}"
Ennek olyasmit kell kiadnia:
PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9
Remélhetőleg másnak is segít,
megjegyzések
- j kell a nevetésért: apt-get -s upgrade | awk -F ‘ [] [()] + ‘ ‘ / ^ Inst / {printf ” Prog:% s \ tcur:% s \ tavail:% s \ n “, $ 2, $ 3, $ 4} ‘
- Ez is sokkal szebb megjelenésű lehet, ha a következőt használja:
column
: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 remekül néz ki!
- félek ‘ attól, hogy ez a Perl-kód feltöri a gépemet .. .;)
- @AntonioK Hogyan rendezi a programok nevét betűrendben?
Válasz
Egy másik lehetőség, amelyet az enzotib ihletett:
aptitude search "~U" | wc -l
Ez a parancs az aptitude-t használja az új csomagok, majd a wc kiadására hogy csak megszámolja a sorokat.
Egy oldalkódon azt tapasztaltam, hogy az enzotib megoldása a ~U
körüli egyetlen idézőjel nélkül nem működött. (Wheezy, ZSH, 0.6.8.2 alkalmasság)
Frissítés:
Az új apt segítségével a következőket teheti:
apt list --upgradeable
Megjegyzések
- Köszönet érte, az apt list parancs pontosan az volt, amit szerettem volna.
- Ezzel a megoldással jó, hogy nincs szükség sudo / root fájlra.
Válasz
A legegyszerűbb:
apt list --upgradeable
Megjegyzések
- nem működik a mentán.
- ‘ szégyen, hogy ez nem ‘ ne adjon meg különböző kilépési kódokat attól függően, hogy vannak-e frissítések vagy sem. Jó lett volna használni ezt egy szkriptben.
Válasz
Futtathat
aptitude -F%p --disable-columns search ~U
vagy a dokumentáció nélküli
/usr/lib/update-notifier/apt-check -p; echo
Egy másik módszer egy apt-get
szimuláció:
apt-get -s dist-upgrade | awk "/^Inst/ { print $2 }"
megjegyzések
- Ez az aptitude parancs nagyon jól működött nekem és nem igényel root-ot
- az apt-get -s dist-upgrade is jól működik, és ugyanolyan kimenettel rendelkezik, amikor átvezeti az adott awkeren
- köszönöm! ez elég sok függőségi pokolból került ki.
dist-upgrade
próbálta elveszíteni, de nem veszített el néhány olyan csomagot, amelyre aaptitude
használatához szükség volt.aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
megcsalta!
Válasz
Vessen egy pillantást az “apticron” csomagra:
apticron – Egyszerű eszköz a függőben lévő csomagfrissítésekről postai úton dselect és alkalmasság által.
https://packages.debian.org/buster/apticron
Megjegyzések
- A link megszakadt …
Válasz
apt-get update && apt-get -s upgrade
az elérhető frissítéseket tényleges telepítés nélkül sorolja fel.
Az első parancs a szimulált (tehát -s) frissítés előtt frissíti a csomag indexfájljait. Kész. Az “-s” szimulált frissítést hajt végre, amely bemutatja azokat a csomagokat, amelyek telepítve vannak, de valójában nem telepítenek semmit.
Épp ellenkezőleg, az “-u” helyett az “-s” helyett a megerősítés után valóban telepítenék. p>
Megjegyzések
- A szimulációs opció a
-s, --simulate, --just-print, --dry-run, --recon, --no-act
bármelyikével kiváltható, az újrakészítés és a szárazonfuttatás az én személyes kedvencek.
Válasz
Teljes verzió információkra volt szükségem a lehetséges frissítésekről, ezért a jasonwryan módosítását használtam válasz:
apt-get -V -u upgrade
Ez egyszerű és IMO formátumú kimenet.
Válasz
Csak szűrje ki a
apt-get update && apt-get -s -V -u upgrade
kimenetet, hogy csak a preferált információk legyenek a naplójában.
Valószínűleg szükséged lesz a gyönyörű részre a sor után
…
A következő csomagok frissülnek:
…
kevés szóközzel elején.
Hozzászólások
- Sziasztok, üdvözlünk a webhelyen. Jelenlegi válasza alapvetően a meglévők újracsoportja, így nem ad hozzá újat. Javíthatná például azzal, hogy elmagyarázza a kimenet szűrését, és elmagyarázza, hogy mit csinálnak a különféle kapcsolók stb.
Válasz
apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "
a legegyszerűbb a cron e-mailekhez; nincs felhasználói iteráció, és ha nincsenek frissítések, akkor nincs kimenet.
Válasz
Jet egy másik on-line, ihlette ez a válasz :
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;
A kimenet így néz ki (színes):
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
Ha nem szeretné, hogy a rövid leírás használja ezt:
{ 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;
Kimenet:
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)
Megjegyzések
- Az egy vonalú vonal fantasztikus, csak ‘ nem adja ki néhány csomag leírását.
Válasz
apt-check
valószínűleg a leghatékonyabb szkriptelési módszer.
/usr/lib/update-notifier/apt-check 2>&1 | cut -d ";" -f 1
Egy nagyon kis módosítás csak a biztonsági frissítéseket jeleníti meg.
/usr/lib/update-notifier/apt-check 2>&1 | cut -d ";" -f 2
Válasz
Miután figyelmeztetést írtam a @jasonwryan válaszára, meg szeretném adni a saját megoldásomat:
apt-get dist-upgrade --assume-no
Sajnos ez nem működik a debian wheezy-vel, és meg kellett vizsgálnom néhány olyan lxc konténert, amelyek még mindig nincsenek frissítve. Ez az űrlap mindig működik:
apt-get dist-upgrade </dev/null
Végül a kimenetet is át akartam formázni. Úgy döntöttem, hogy újra megváltoztatom a hívást (a --dry-run
használatával, de figyelmen kívül hagyva az összes további kimenetet), mert biztonságosabbnak érzem magam:
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} "
Visszatérés:
The following packages have been kept back: iproute The following packages will be upgraded: unzip
Válasz
Szeretem ezt használni:
apt-get -qq update && apt-get -qq -s upgrade
Ilyen kimenetet kap:
Inst linux-base [3.5] (4.5~deb8u1 Debian-Security:8/oldstable [all]) Conf linux-base (4.5~deb8u1 Debian-Security:8/oldstable [all])
ha rendelkezésre állnak frissítések , és nincs, ha nincs “t”. Így egyszerűen összekapcsolhatja egy felügyeleti megoldással.
Válasz
Mint variáció a következőt használom:
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) }"
Ragaszd be egy apt-updates
nevű szkriptbe, és utána hívhatod a apt-updates
az összes frissítés felsorolásához, a felhasználótól függetlenül.
Ennek ellenére privilegizált hozzáféréssel kell hívnia a apt-get update
-t.
Megjegyzések
- a kimenet csak a csomag nevét mutatja (első oszlop), a második oszlop mindig = ” és a harmadik oszlop mindig üres. Én ‘ m vagyok a pénzverdén.
Válasz
Ott ” s a apt-show-versions
eszköz. Az elérhető frissítések megjelenítéséhez futtassa:
apt-show-versions -u
-u
aapt-get
li alapértelmezett opciója >