it-swarm-tr.com

Kullanılabilir güncellemeleri listeleyin ancak yüklemeyin

Paketlerim için güncellemeler olması durumunda cron-run raporlama betiğimin bana bildirmesini istiyorum. apt-get Bana kullanılabilir güncellemelerin listesini vermenin bir yolu var mı, ancak başka bir şey yapmıyor musunuz?

231
Morris

uygun

apt modern sürümleri için bunun için özel bir anahtar vardır:

apt list --upgradeable

apt-get

Eski apt-get Komutu için -u Anahtarı yükseltme için mevcut paketlerin bir listesini gösterir:

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

apt-get Kılavuz sayfasından :

-u
- göster-yükseltilmiş
 Yükseltilmiş paketleri göster; Yükseltilecek tüm paketlerin bir listesini yazdırın. Yapılandırma Öğesi: APT :: Get :: Gösteri Yükseltildi.
--assume-hayır Tüm istemlere otomatik "hayır". <== Yüklemeye başlamasını önlemek için
255
jasonwryan
apt-get --just-print upgrade

Kolayca okunmaz, aşağıda apt-get çıktısını ayrıştırmak için bir Perl bir astar vardır:

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

Bu, şöyle bir çıktı vermelidir:

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

Umarım başka birine yardımcı olur,

67
Tom

Enzotibden esinlenen başka bir seçenek:

aptitude search '~U' | wc -l

Bu komut, yeni paketleri çıktılamak için yetenek kullanır ve daha sonra sadece satırları saymak için wc kullanır.

Bir sidenote üzerinde, enzotibin çözümünü ~U benim için çalışmadı. (Wheezy, ZSH, yetenek 0.6.8.2)

Güncelleme:

Yeni apt ile şunları yapabilirsiniz:

apt list --upgradeable

34
cete3

En kolayı:

apt list --upgradeable

27
AJM

Koşabilirsin

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

veya belgesiz

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

apt-get Simülasyonu kullanan başka bir yöntem:

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

"Apticron" paketine bir göz atın:

apticron - Bekleyen paket güncellemeleri hakkında posta göndermek için basit bir araç

Apticron, güvenlik güncellemeleri gibi bekleyen paket güncellemeleri hakkında günlük e-postalar gönderen, hem dselect hem de yetenek ile bekletilen paketleri düzgün bir şekilde işleyen basit bir komut dosyasıdır.

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

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

mevcut güncellemeleri gerçekten yüklemeden listeler.

İlk komut, benzetim (böylece -s) yükseltmesi yapılmadan önce paket dizin dosyalarını güncelleştirir. "-s", kurulacak ancak hiçbir şey yüklemeyecek paketleri gösteren simüle edilmiş bir yükseltme gerçekleştirir.

Aksine "-s" yerine "-u" aslında onaylandıktan sonra yüklenir.

10
ajaaskel

Olası yükseltmeler hakkında tam sürüm bilgisine ihtiyacım vardı, bu yüzden jasonwryan'ın cevabında bir değişiklik kullandım:

apt-get -V -u upgrade

Basit ve IMO makul şekilde biçimlendirilmiş çıktı.

9
Ben Brian

Sadece çıktısını filtreleyin

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

günlüğünüzde yalnızca tercih edilen bilgilere sahip olmak için.

Büyük olasılıkla, çizgiden sonra güzel kısma ihtiyacınız olacak

...

Aşağıdaki paketler yükseltilecek:

...

başlangıçta az yer var.

3
freealx

bu cevap esinlenerek başka bir astar püskürtün.

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;

Çıktı şöyle görünür (renkli):

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

Kısa açıklamayı istemiyorsanız bunu kullanın:

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

Çıktı:

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 "

cron e-postaları için en basit olanıdır; kullanıcı yinelemesi yoktur ve güncelleme yoksa çıktı yoktur.

2
user1133275

apt-check muhtemelen en etkili komut dosyası yazma yöntemidir.

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

Çok küçük bir değişiklik size yalnızca güvenlik güncelleştirmelerini gösterir.

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

@ Jasonwryan'ın cevabına uyarı yazdıktan sonra, kendi çözümümü sunmak istiyorum:

apt-get dist-upgrade --assume-no

Ne yazık ki, bu debian wheezy ile çalışmaz ve hala yükseltilmemiş bazı lxc kapları kontrol etmek zorunda kaldı. Bu form her zaman işe yarar:

apt-get dist-upgrade </dev/null

Sonunda çıktıyı yeniden biçimlendirmek istedim. Aramayı tekrar değiştirmeyi seçtim (--dry-run ancak tüm ek çıktıları yok sayılıyor) çünkü daha güvenli hissediyor:

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

İadeler:

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

Bir varyasyon olarak aşağıdakileri kullanıyorum:

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

Bunu apt-updates ve daha sonra apt-updates kullanıcıdan bağımsız olarak tüm güncellemelerin bir listesini almak için.

Hala apt-get update ayrıcalıklı erişime sahip.

0
Brett Ryan

İşte apt-show-versions aracı. Mevcut güncellemeleri göstermek için:

apt-show-versions -u
0
agc

Bunu kullanmayı seviyorum:

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

Bunun gibi bir çıktı alırsınız:

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

kullanılabilir güncellemeler varsa ve hiçbiri yoksa. Bu şekilde, bunu bir izleme çözümü ile birleştirebilirsiniz.

0
user3310438