Odpowiedzi:
W nowoczesnych wersjach apt
dostępny jest specjalny przełącznik:
apt list --upgradable
W przypadku starego apt-get
polecenia -u
przełącznik wyświetla listę pakietów dostępnych do aktualizacji:
# apt-get -u upgrade --assume-no
Od apt-get
strony man :
-u
--show-upgrade Pokaż zaktualizowane pakiety; Wydrukuj listę wszystkich pakietów, które mają zostać zaktualizowane. Element konfiguracji: APT :: Get :: Show-Upgraded.
--assume-no Automatyczne „nie” dla wszystkich podpowiedzi. <== Aby zapobiec rozpoczęciu instalacji
-u
jest domyślną opcjąapt-get
apt-get --just-print upgrade
Nie czyta się tak łatwo, poniżej znajduje się jeden linijka perla do analizy danych wyjściowych 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"}'
Powinno to wygenerować coś takiego:
PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9
Mam nadzieję, że pomoże to komuś innemu,
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
Inna opcja, zainspirowana przez enzotib:
aptitude search '~U' | wc -l
To polecenie użyje aptitude do wypisania nowych pakietów, a następnie wc do zliczenia linii.
Z jednej strony stwierdziłem, że rozwiązanie enzotibu bez pojedynczych cudzysłowów wokół ~ U nie działa dla mnie. (Wheezy, ZSH, aptitude 0.6.8.2)
Aktualizacja :
Dzięki nowemu apt możesz teraz:
apt list --upgradable
Najłatwiej jest:
apt list --upgradable
Możesz biegać
aptitude -F%p --disable-columns search ~U
lub nieudokumentowane
/usr/lib/update-notifier/apt-check -p; echo
Inna metoda wykorzystująca apt-get
symulację:
apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }'
dist-upgrade
zgubić niektóre pakiety, które były tak potrzebne aptitude
. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
wykonał lewę!
Spójrz na pakiet „apticron”:
apticron - Proste narzędzie do wysyłania wiadomości e-mail o oczekujących aktualizacjach pakietów
Apticron to prosty skrypt, który wysyła codzienne wiadomości e-mail na temat oczekujących aktualizacji pakietów, takich jak aktualizacje zabezpieczeń, poprawnie obsługując pakiety wstrzymane zarówno przez dselect, jak i aptitude.
apt-get update && apt-get -s upgrade
wyświetli listę dostępnych aktualizacji bez faktycznej instalacji.
Pierwsze polecenie aktualizuje pliki indeksu pakietu przed przeprowadzeniem symulowanej (a więc -s) aktualizacji. „-s” wykona symulowaną aktualizację pokazującą pakiety, które zostaną zainstalowane, ale w rzeczywistości niczego nie zainstalują.
Wręcz przeciwnie, „-u” zamiast „-s” faktycznie instaluje się po potwierdzeniu.
-s, --simulate, --just-print, --dry-run, --recon, --no-act
, rekonfiguracja i uruchomienie na sucho są moimi osobistymi ulubionymi.
Po prostu odfiltruj dane wyjściowe
apt-get update && apt-get -s -V -u upgrade
mieć w rejestrze tylko preferowane informacje.
Najprawdopodobniej będziesz potrzebować pięknej części po linii
...
Następujące pakiety zostaną zaktualizowane:
...
ma na początku niewiele spacji.
Odrzutowiec on-line zainspirowany tą odpowiedzią :
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;
Dane wyjściowe wyglądają następująco (w kolorze):
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
Jeśli nie chcesz tego krótkiego opisu, użyj tego:
{ 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;
Wynik:
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 "
jest najprostszy dla wiadomości e-mail Cron; nie ma iteracji użytkownika, a jeśli nie ma aktualizacji, nie ma danych wyjściowych.
Po napisaniu ostrzeżenia do odpowiedzi @ jasonwryan chcę podać własne rozwiązanie:
apt-get dist-upgrade --assume-no
Niestety, ten nie działa z serwerem Debian Wheezy i musiałem sprawdzić kilka kontenerów LXC, które wciąż nie są uaktualnione. Ten formularz zawsze będzie działał:
apt-get dist-upgrade </dev/null
Wreszcie chciałem również sformatować dane wyjściowe. Zdecydowałem się zmienić połączenie ponownie (używając, --dry-run
ale ignorując wszystkie dodatkowe dane wyjściowe), ponieważ wydaje się to bezpieczniejsze:
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}
'
Zwroty:
The following packages have been kept back:
iproute
The following packages will be upgraded:
unzip
apt-check
jest prawdopodobnie najbardziej wydajną metodą skryptową.
/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 1
Bardzo mała modyfikacja pokazuje tylko aktualizacje zabezpieczeń.
/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 2
Jako wariant używam następujących:
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)
}'
Wstaw go do skryptu o nazwie, apt-updates
a następnie możesz zadzwonić, apt-updates
aby uzyskać listę wszystkich aktualizacji bez względu na użytkownika.
Nadal musisz dzwonić apt-get update
z uprzywilejowanym dostępem.
Jest apt-show-versions
narzędzie. Aby wyświetlić dostępne aktualizacje, uruchom:
apt-show-versions -u
Lubię to używać:
apt-get -qq update && apt-get -qq -s upgrade
Otrzymasz wyjście takie jak to:
Inst linux-base [3.5] (4.5~deb8u1 Debian-Security:8/oldstable [all])
Conf linux-base (4.5~deb8u1 Debian-Security:8/oldstable [all])
jeśli są dostępne aktualizacje, a żadna, jeśli nie ma. W ten sposób możesz po prostu połączyć go z rozwiązaniem monitorującym.