답변:
최신 버전의 apt
경우이를위한 특정 스위치가 있습니다.
apt list --upgradable
이전 apt-get
명령의 경우 -u
스위치는 업그레이드 할 수있는 패키지 목록을 표시합니다.
# apt-get -u upgrade --assume-no
로부터 apt-get
man 페이지 :
-u
--show-upgraded 업그레이드 된 패키지를 보여줍니다. 업그레이드 할 모든 패키지 목록을 인쇄하십시오. 구성 항목 : APT :: Get :: Show-Upgraded.
--assume-no 모든 프롬프트에 자동 "아니오". <== 설치를 시작하지 못하게하려면
-u
는 기본 옵션입니다apt-get
apt-get --just-print upgrade
쉽게 읽을 수는 없지만 apt-get의 출력을 구문 분석하는 perl one liner는 다음과 같습니다.
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"}'
이것은 다음과 같이 출력되어야합니다 :
PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9
잘하면 그것은 다른 누군가를 도울 것입니다.
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에서 영감을 얻은 또 다른 옵션 :
aptitude search '~U' | wc -l
이 명령은 aptitude를 사용하여 새 패키지를 출력 한 다음 wc를 사용하여 행을 계산합니다.
참고로, ~ U 주위에 작은 따옴표가없는 enzotib의 솔루션이 저에게 효과적이지 않다는 것을 알았습니다. (Wheezy, ZSH, 적성 0.6.8.2)
업데이트 :
새로운 아파트로 지금 할 수 있습니다 :
apt list --upgradable
당신은 실행할 수 있습니다
aptitude -F%p --disable-columns search ~U
또는 서류 미 비자
/usr/lib/update-notifier/apt-check -p; echo
apt-get
시뮬레이션을 사용하는 다른 방법 :
apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }'
dist-upgrade
일부 패키지를 잃어 버리지 않으려 고 했기 때문에 사용해야했습니다 aptitude
. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
트릭을 했어!
"apticron"패키지를 살펴보십시오 :
apticron-보류중인 패키지 업데이트에 대한 메일을 보내는 간단한 도구
Apticron은 dselect와 aptitude로 보류중인 패키지를 올바르게 처리하여 보안 업데이트와 같은 보류중인 패키지 업데이트에 대한 전자 메일을 매일 보내는 간단한 스크립트입니다.
apt-get update && apt-get -s upgrade
실제로 설치하지 않고 사용 가능한 업데이트를 나열합니다.
첫 번째 명령은 시뮬레이션 된 (따라서 -s) 업그레이드가 수행되기 전에 패키지 색인 파일을 업데이트합니다. "-s"는 설치되었지만 실제로는 설치하지 않는 패킷을 보여주는 시뮬레이션 업그레이드를 수행합니다.
반대로 "-s"대신 "-u"는 실제로 확인 후 설치됩니다.
-s, --simulate, --just-print, --dry-run, --recon, --no-act
, 정찰 및 드라이 런 중 하나를 사용하여 실행할 수 있습니다.
그냥 출력을 필터링
apt-get update && apt-get -s -V -u upgrade
로그에 기본 정보 만 포함합니다.
아마도, 당신은 줄 뒤에 아름다운 부분이 필요할 것입니다
...
다음과 같은 패키지가 업그레이드됩니다 :
...
처음에는 공백이 거의 없습니다.
이 답변 에서 영감을 얻은 또 다른 라이너를 분사하십시오 .
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;
출력은 다음과 같습니다 (컬러).
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
간단한 설명을 원하지 않으면 다음을 사용하십시오.
{ 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;
산출:
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)
@jasonwryan의 답변에 경고를 작성한 후 내 솔루션을 제공하고 싶습니다.
apt-get dist-upgrade --assume-no
불행히도, 이것은 debian wheezy에서 작동하지 않으며 여전히 업그레이드되지 않은 lxc 컨테이너를 확인해야했습니다. 이 양식은 항상 작동합니다.
apt-get dist-upgrade </dev/null
마지막으로 출력을 다시 포맷하고 싶었습니다. --dry-run
더 안전하다고 느끼기 때문에 호출을 다시 변경하기로 결정했습니다 ( 모든 추가 출력을 사용 하지만 무시 함).
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}
'
보고:
The following packages have been kept back:
iproute
The following packages will be upgraded:
unzip
변형으로 다음을 사용합니다.
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)
}'
이름이 지정된 스크립트에 첨부 apt-updates
하면 apt-updates
사용자와 관계없이 모든 업데이트 목록을 얻기 위해 전화 를 걸 수 있습니다 .
여전히 apt-get update
권한있는 액세스 권한 으로 전화해야합니다 .
있다 apt-show-versions
도구. 사용 가능한 업데이트를 표시하려면 다음을 실행하십시오.
apt-show-versions -u
나는 이것을 사용하고 싶다 :
apt-get -qq update && apt-get -qq -s upgrade
다음과 같은 출력을 얻습니다.
Inst linux-base [3.5] (4.5~deb8u1 Debian-Security:8/oldstable [all])
Conf linux-base (4.5~deb8u1 Debian-Security:8/oldstable [all])
사용 가능한 업데이트가 있고없는 경우 없습니다. 이 방법으로 간단히 모니터링 솔루션과 결합 할 수 있습니다.