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

내 패키지에 대한 업데이트가있는 경우 크론 실행보고 스크립트가 알려주기를 원합니다. apt-get 사용 가능한 업데이트 목록을 제공하지만 더 이상 수행하지 않는 방법이 있습니까?

답변

apt

apt의 최신 버전에는이를위한 특정 스위치가 있습니다.

apt list --upgradable

apt-get

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

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

apt-get 매뉴얼 페이지 :

-u
–show- 업그레이드 됨
  업그레이드 된 패키지 표시; 업그레이드 할 모든 패키지 목록을 인쇄합니다. 구성 항목 : APT :: Get :: Show-Upgraded.
-assume-no   모든 프롬프트에 자동 “아니요”. & lt == 설치 시작 방지

댓글

  • 루트없이 할 수 있기를 바랐습니다.
  • ” Y “를 입력하고 Enter 키를 누르면이 명령이 업데이트를 설치합니다 . ” -s “를 추가하는 것이 좋습니다. 그렇지 않으면이 답변이 오해의 소지가 있습니다.
  • 매우 잘못된 대답은 (추가 옵션없이) 명령이 입력을 기다리고 사용자가 잘못된 입력을 입력하면 패키지가 설치되어 OP가 아닌 시스템을 수정 하기 때문입니다. 원하는 항목 (내 시스템에서 발생)
  • 그리고 btw : -uapt-get li의 기본 옵션입니다. >
  • @ThorSummoner ‘ -s ‘가 원하는 작업을 수행합니다. &가 작동합니다. 루트없이

답변

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 

다른 사람에게 도움이되기를 바랍니다.

댓글

  • j 웃음을 위해 : apt-get -s upgrade | awk -F ‘ [] [()] + ‘ ‘ / ^ Inst / {printf ” 프로그램 : % s \ tcur : % s \ tavail : % s \ n “, $ 2, $ 3, $ 4} ‘
  • 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
  • @AntonioK 멋지네요!
  • ‘이 Perl 코드가 제 컴퓨터를 해킹 할까봐 걱정됩니다 .. .;)
  • @AntonioK 프로그램 이름을 알파벳순으로 정렬하는 방법은 무엇입니까?

답변

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

aptitude search "~U" | wc -l

이 명령은 aptitude를 사용하여 새 패키지를 출력 한 다음 wc를 사용합니다. 줄을 세는 것뿐입니다.

사이드 노트에서 ~U 주위에 작은 따옴표가없는 enzotib의 솔루션이 저에게 적합하지 않다는 것을 발견했습니다. (Wheezy, ZSH, aptitude 0.6.8.2)

업데이트 :

새 아파트로 할 수있는 작업 :

apt list --upgradeable

댓글

  • 감사합니다. apt list 명령은 정확히 제가 원했던 것입니다.
  • 이 솔루션의 장점은 sudo / root가 필요 없다는 것입니다.

답변

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

apt list --upgradeable

댓글

  • 민트에서는 작동하지 않습니다.
  • ‘ 이는 작동하지 않습니다. ‘ 사용 가능한 업그레이드가 있는지 여부에 따라 다른 종료 코드를 반환하지 않습니다. 스크립트에서 이것을 사용할 수 있으면 좋았을 것입니다.

답변

실행할 수 있습니다

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

댓글

  • 이 적성 명령은 저에게 효과적이며 루트가 필요하지 않음
  • apt-get -s dist-upgrade도 잘 작동하며 해당 awker를 통해 파이프 할 때 동일한 출력을 제공합니다.
  • 감사합니다! 이것은 상당한 의존성 지옥에서 나왔습니다. dist-upgrade를 시도했지만 일부 패키지를 잃지 않았으므로 aptitude를 사용해야합니다. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')가 트릭을했습니다!

답변

패키지 “apticron”살펴보기 :

apticron-단순 보류중인 패키지 업데이트에 대한 메일 도구

Apticron은 보안 업데이트와 같은 보류중인 패키지 업데이트에 대한 이메일을 매일 보내는 간단한 스크립트입니다. dselect와 적성에 의해.

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

댓글

  • 링크가 깨졌습니다 …

답변

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

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

첫 번째 명령은 시뮬레이션 된 (따라서 -s) 업그레이드 전에 패키지 색인 파일을 업데이트합니다. 끝난. “-s”는 설치 될 패킷을 보여주는 시뮬레이션 업그레이드를 수행하지만 실제로는 아무것도 설치하지 않습니다.

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

p>

댓글

  • 시뮬레이션 옵션은 -s, --simulate, --just-print, --dry-run, --recon, --no-act 중 하나로 트리거 될 수 있으며, 정찰 및 드라 이런은 내 개인 즐겨 찾기.

답변

가능한 업그레이드에 대한 전체 버전 정보가 필요했기 때문에 jasonwryan의 수정을 사용했습니다. “s answer :

apt-get -V -u upgrade 

간단하고 IMO에 합리적으로 형식화 된 출력입니다.

Answer

출력을 필터링하기 만하면

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

로그에 원하는 정보 만 표시됩니다.

대부분의 경우 라인 뒤에 아름다운 부분이 필요합니다.

다음 패키지가 업그레이드됩니다.

공백이 거의 없음

댓글

  • 안녕하세요. 사이트에 오신 것을 환영합니다. 그대로, 귀하의 답변은 기본적으로 기존 답변의 재해시이므로 새로운 것을 추가하지 않습니다. 예를 들어 출력을 필터링하는 방법을 설명하고 다양한 스위치가 수행하는 작업에 대한 설명을 추가하여 개선 할 수 있습니다.

Answer

apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst " 

는 크론 이메일에 가장 간단합니다. 사용자 반복이없고 업데이트가없는 경우 출력이 없습니다.

답변

또 다른 온 라이너, 이 답변 에서 영감을 얻었습니다.

 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) 

댓글

  • 일부 패키지에 대한 설명을 출력하지 않는다는 점을 제외하면 ‘ 하나의 라이너는 환상적입니다.

li>

Answer

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 

답변

@jasonwryan “의 답변에 대한 경고를 작성한 후 자체 솔루션을 제공하고 싶습니다.

apt-get dist-upgrade --assume-no 

안타깝게도 이것은 데비안 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 -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]) 

사용 가능한 업데이트가있는 경우 ,없는 경우 아무 것도 표시되지 않습니다. 이렇게하면 간단히 모니터링 솔루션과 연결할 수 있습니다.

답변

A 변형 다음을 사용합니다.

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

코멘트

  • 출력은 패키지 이름 (첫 번째 열) 만 표시하고 두 번째 열은 항상 = ” 세 번째 열은 항상 비어 있습니다. 저는 ‘ Mint에 있습니다.

Answer

There ” apt-show-versions 도구입니다. 사용 가능한 업데이트를 표시하려면 다음을 실행하세요.

apt-show-versions -u 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다