Paketlerimde güncelleme olması durumunda, cron çalıştırmalı raporlama komut dosyamın beni bilgilendirmesini istiyorum. apt-get
Bana mevcut güncellemelerin bir listesini vermenin bir yolu var mı, başka bir şey yapmıyor musunuz?
Paketlerimde güncelleme olması durumunda, cron çalıştırmalı raporlama komut dosyamın beni bilgilendirmesini istiyorum. apt-get
Bana mevcut güncellemelerin bir listesini vermenin bir yolu var mı, başka bir şey yapmıyor musunuz?
Yanıtlar:
Modern versiyonları apt
için bunun için özel bir anahtar vardır:
apt list --upgradable
Eski apt-get
komut için, -u
anahtar yükseltme için mevcut olan paketlerin bir listesini gösterir:
# apt-get -u upgrade --assume-no
Gönderen apt-get
adam sayfası :
-u
--show-yükseltilmiş Yükseltilmiş paketleri göster; Yükseltilecek tüm paketlerin bir listesini yazdırın. Yapılandırma Öğesi: APT :: Get :: Show-Upgraded.
--assume-hayır tüm sorular Otomatik "hayır". <== Yüklemeye başlamasını önlemek için
-u
varsayılan bir seçenekapt-get
apt-get --just-print upgrade
Kolayca okunmuyor, apt-get çıktısını çözümlemek için aşağıda bir perl bir liner olduğunu:
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 şey çıkmalı:
PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9
Umarım başka birine yardım eder.
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
Enzotib'den ilham alan başka bir seçenek:
aptitude search '~U' | wc -l
Bu komut, yeni paketleri çıktılamak için yetenek kullanır ve ardından sadece satırları saymak için wc kullanır.
Bir sınırda, ~ U'nun etrafındaki tek tırnak olmadan enzotibin çözümünün benim için işe yaramadığını öğrendim. (Wheezy, ZSH, yetenek 0.6.8.2)
Güncelleme :
Yeni apt ile şimdi yapabilirsiniz:
apt list --upgradable
En kolayı şudur:
apt list --upgradable
Koşabilirsin
aptitude -F%p --disable-columns search ~U
veya belgesiz
/usr/lib/update-notifier/apt-check -p; echo
apt-get
Simülasyon kullanan başka bir yöntem :
apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }'
dist-upgrade
ama çok kullanmak için gereken bazı paketler kaybetmez aptitude
. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
hile yaptım!
"Apticron" paketine bakınız:
apticron - Bekleyen paket güncellemeleri hakkında mesaj gönderebileceğiniz basit bir araç
Apticron, güvenlik güncellemeleri gibi bekleyen paket güncellemeleri hakkında günlük e-postalar gönderen, paketleri hem bekletme hem de yetenek olarak düzgün bir şekilde bekleten basit bir komut dosyasıdır.
apt-get update && apt-get -s upgrade
mevcut yüklemeleri gerçekten yüklemeden listeler.
İlk komut, simüle (yani -s) yükseltme yapılmadan önce paket dizin dosyalarını günceller. "-s", kurulacak paketleri gösteren ancak gerçekte hiçbir şey yüklemeyecek benzetilmiş bir yükseltme yapacak.
Aksine, "-s" yerine "-u" aslında onaydan sonra yüklenir.
-s, --simulate, --just-print, --dry-run, --recon, --no-act
, keşif ve kuru çalıştırma benim kişisel favorilerim.
Sadece çıktısını filtrelemek
apt-get update && apt-get -s -V -u upgrade
günlüğünde yalnızca tercih edilen bilgilere sahip olmak için.
Büyük olasılıkla, hattan sonra güzel bölüme ihtiyacınız olacak.
...
Aşağıdaki paketler yükseltilecek:
...
başlangıçta çok az boşluk var.
Esinlenerek on-astar Jet başka, bu cevap :
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 tanımı 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)
apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "
cron e-postaları için en basittir; kullanıcı yinelemesi yoktur ve güncelleme yoksa çıktı da olmaz.
@ 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ışmıyor ve hala yükseltilmemiş bazı LXC kapları kontrol etmek zorunda kaldı. Bu form her zaman çalışacaktır:
apt-get dist-upgrade </dev/null
Sonunda çıktıyı yeniden biçimlendirmek istedim. --dry-run
Daha güvenli hissettirdiği için tekrar aramayı değiştirmeyi seçtim ( tüm ek çıkışları kullanarak ancak yok sayarak):
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}
'
İade:
The following packages have been kept back:
iproute
The following packages will be upgraded:
unzip
apt-check
Muhtemelen en verimli komut dosyası yöntemidir.
/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 1
Çok küçük bir değişiklik sadece güvenlik güncellemelerini gösterir.
/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 2
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)
}'
Adında bir betiğe yapıştırın apt-updates
ve sonra apt-updates
kullanıcı ne olursa olsun tüm güncellemelerin bir listesini almak için arayabilirsiniz .
Yine de apt-get update
ayrıcalıklı erişim ile aramanız gerekir .
İşte apt-show-versions
araç. Kullanılabilir güncellemeleri yayınlamak için:
apt-show-versions -u
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])
Mevcut güncellemeler varsa ve hiçbiri varsa. Bu şekilde bir izleme çözümü ile kolayca birleştirebilirsiniz.