it-swarm-ko.tech

사용 가능한 업데이트를 나열하지만 설치하지는 마십시오.

패키지 업데이트가있는 경우 cron-run보고 스크립트가 알려주기를 원합니다. apt-get 만드는 방법이 있습니까? 사용 가능한 업데이트 목록을 제공하지만 더 이상 아무것도하지 않습니까?

231
Morris

적절한

apt의 최신 버전에는 다음과 같은 특정 스위치가 있습니다.

apt list --upgradeable

apt-get

이전 apt-get 명령의 경우 -u 스위치는 업그레이드 할 수있는 패키지 목록을 표시합니다.

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

apt-get 매뉴얼 페이지 에서 :

-유
-업그레이드
 업그레이드 된 패키지 표시 업그레이드 할 모든 패키지 목록을 인쇄하십시오. 구성 항목 : APT :: Get :: Show-Upgraded.
-가정-아니 모든 프롬프트에 자동 "아니오". <== 설치를 시작하지 못하게하려면
255
jasonwryan
apt-get --just-print upgrade

쉽게 읽을 수는 없지만 apt-get의 출력을 구문 분석하는 Perl one 라이너는 다음과 같습니다.

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

잘하면 그것은 다른 누군가를 도울 것입니다.

67
Tom

Enzotib에서 영감을 얻은 또 다른 옵션 :

aptitude search '~U' | wc -l

이 명령은 aptitude를 사용하여 새 패키지를 출력 한 다음 wc를 사용하여 행을 계산합니다.

참고로, ~U 주위에 작은 따옴표가없는 enzotib의 솔루션이 효과가 없다는 것을 알았습니다. (Wheezy, ZSH, 적성 0.6.8.2)

업데이트 :

새로운 아파트를 통해 다음을 수행 할 수 있습니다.

apt list --upgradeable

34
cete3

가장 쉬운 방법은 다음과 같습니다.

apt list --upgradeable

27
AJM

당신은 실행할 수 있습니다

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

"apticron"패키지를 살펴보십시오 :

apticron-보류중인 패키지 업데이트에 대해 메일을 보내는 간단한 도구

Apticron은 dselect와 aptitude로 보류중인 패키지를 올바르게 처리하여 보안 업데이트와 같은 보류중인 패키지 업데이트에 대한 전자 메일을 매일 보내는 간단한 스크립트입니다.

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

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

실제로 설치하지 않고 사용 가능한 업데이트를 나열합니다.

첫 번째 명령은 시뮬레이션 된 (따라서 -s) 업그레이드가 수행되기 전에 패키지 색인 파일을 업데이트합니다. "-s"는 설치되었지만 실제로는 설치하지 않는 패킷을 보여주는 시뮬레이션 업그레이드를 수행합니다.

반대로 "-s"대신 "-u"는 실제로 확인 후 설치됩니다.

10
ajaaskel

가능한 업그레이드에 대한 정식 버전 정보가 필요했기 때문에 jasonwryan의 답변을 수정했습니다.

apt-get -V -u upgrade

간단하고 IMO는 합리적인 형식의 출력입니다.

9
Ben Brian

그냥 출력을 필터링

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

로그에 기본 정보 만 포함합니다.

아마도, 당신은 줄 뒤에 아름다운 부분이 필요할 것입니다

...

다음과 같은 패키지가 업그레이드됩니다 :

...

처음에는 공백이 거의 없습니다.

3
freealx

이 답변 에서 영감을 얻은 또 다른 라이너를 분사하십시오.

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

cron 이메일에 가장 간단합니다. 사용자 반복이 없으며 업데이트가 없으면 출력이 없습니다.

2
user1133275

apt-check는 아마도 가장 효율적인 스크립팅 방법 일 것입니다.

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

아주 약간만 수정하면 보안 업데이트 만 표시됩니다.

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

@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
1
Daniel Alder

변형으로 다음을 사용합니다.

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을 (를) 호출해야합니다.

0
Brett Ryan

apt-show-versions 도구. 사용 가능한 업데이트를 표시하려면 다음을 실행하십시오.

apt-show-versions -u
0
agc

나는 이것을 사용하고 싶다 :

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])

사용 가능한 업데이트가 있고없는 경우 없습니다. 이 방법으로 간단히 모니터링 솔루션과 결합 할 수 있습니다.

0
user3310438