it-swarm-id.com

Daftar pembaruan yang tersedia tetapi jangan menginstalnya

Saya ingin skrip pelaporan yang dijalankan cron memberi tahu saya jika ada pembaruan untuk paket saya. Apakah cara untuk membuat apt-get beri saya daftar pembaruan yang tersedia tetapi jangan lakukan apa-apa lagi?

231
Morris

tepat

Untuk versi modern apt ada saklar khusus untuk ini:

apt list --upgradeable

apt-get

Untuk yang lama apt-get perintah -u switch menunjukkan daftar paket yang tersedia untuk ditingkatkan:

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

Dari apt-get halaman manual :

-u
- pertunjukan-ditingkatkan
 Tampilkan paket yang ditingkatkan; Cetak daftar semua paket yang akan ditingkatkan. Item Konfigurasi: APT :: Get :: Show-Upgrade.
--asumsikan-tidak Otomatis "tidak" untuk semua petunjuk. <== Untuk mencegahnya mulai menginstal
255
jasonwryan
apt-get --just-print upgrade

Tidak dibaca dengan mudah, di bawah ini adalah liner Perl satu untuk mengurai output 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"}'

Ini akan menghasilkan sesuatu seperti:

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

Semoga itu akan membantu orang lain,

67
Tom

Pilihan lain, terinspirasi oleh enzotib:

aptitude search '~U' | wc -l

Perintah ini akan menggunakan aptitude untuk menampilkan paket-paket baru dan kemudian wc untuk hanya menghitung baris.

Pada sidenote, saya menemukan bahwa solusi enzotib tanpa tanda kutip tunggal di sekitar ~U tidak bekerja untuk saya. (Wheezy, ZSH, bakat 0.6.8.2)

Perbarui:

Dengan apt baru yang dapat Anda lakukan:

apt list --upgradeable

34
cete3

Yang termudah adalah:

apt list --upgradeable

27
AJM

Anda bisa lari

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

atau yang tidak berdokumen

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

Metode lain menggunakan apt-get simulasi:

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

Lihatlah paket "apticron":

apticron - Alat sederhana untuk mengirim email tentang pembaruan paket yang tertunda

Apticron adalah skrip sederhana yang mengirim email harian tentang pembaruan paket yang tertunda seperti pembaruan keamanan, menangani paket-paket yang ditahan dengan baik oleh dselect dan aptitude.

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

11
f4m8
apt-get update && apt-get -s upgrade

akan mendaftar pembaruan yang tersedia tanpa benar-benar menginstal.

Perintah pertama memperbarui file indeks paket sebelum simulasi (dengan demikian -s) dilakukan. "-s" akan melakukan peningkatan yang disimulasikan yang memperlihatkan paket yang akan diinstal tetapi sebenarnya tidak akan menginstal apa pun.

Sebaliknya "-u" bukannya "-s" akan benar-benar dipasang setelah konfirmasi.

10
ajaaskel

Saya memerlukan informasi versi lengkap tentang kemungkinan peningkatan, jadi saya menggunakan modifikasi jawaban jasonwryan:

apt-get -V -u upgrade

Ini sederhana dan output IMO diformat secara wajar.

9
Ben Brian

Cukup filter keluaran

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

hanya memiliki informasi yang disukai di log Anda.

Kemungkinan besar, Anda akan membutuhkan bagian yang indah setelah garis

...

Paket-paket berikut akan ditingkatkan:

...

yang memiliki beberapa ruang di awal.

3
freealx

Jet lain on-liner, terinspirasi oleh jawaban ini :

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;

Outputnya terlihat seperti ini (berwarna):

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

Jika Anda tidak ingin deskripsi singkat gunakan yang ini:

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

Keluaran:

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)
2
Compilenix
apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "

adalah yang paling sederhana untuk email cron; tidak ada iterasi pengguna, dan jika tidak ada pembaruan tidak ada output.

2
user1133275

apt-check mungkin metode scripting yang paling efisien.

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

Modifikasi yang sangat kecil hanya menunjukkan kepada Anda pembaruan keamanan.

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

Setelah menulis peringatan untuk jawaban @ jasonwryan, saya ingin memberikan solusi sendiri:

apt-get dist-upgrade --assume-no

Sayangnya, yang ini tidak berfungsi dengan debian wheezy dan saya harus memeriksa beberapa kontainer lxc yang masih belum diupgrade. Formulir ini akan selalu berfungsi:

apt-get dist-upgrade </dev/null

Akhirnya, saya juga ingin memformat ulang output. Saya memilih untuk mengubah panggilan lagi (menggunakan --dry-run tetapi mengabaikan semua output tambahan) karena terasa lebih aman:

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

Pengembalian:

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

Sebagai variasi, saya menggunakan yang berikut ini:

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

Masukkan ke dalam skrip bernama apt-updates dan Anda kemudian dapat memanggil apt-updates untuk mendapatkan daftar semua pembaruan tanpa memandang pengguna.

Anda masih perlu menelepon apt-get update dengan akses istimewa.

0
Brett Ryan

Itu adalah apt-show-versions alat. Untuk menampilkan pembaruan yang tersedia jalankan:

apt-show-versions -u
0
agc

Saya suka menggunakan ini:

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

Anda mendapatkan output seperti ini:

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

jika ada pembaruan yang tersedia, dan tidak ada jika tidak ada pembaruan. Dengan cara ini Anda cukup memasangkannya dengan solusi pemantauan.

0
user3310438