내 패키지에 대한 업데이트가있는 경우 크론 실행보고 스크립트가 알려주기를 원합니다. apt-get
사용 가능한 업데이트 목록을 제공하지만 더 이상 수행하지 않는 방법이 있습니까?
답변
apt
apt
의 최신 버전에는이를위한 특정 스위치가 있습니다.
apt list --upgradable
apt-get
이전 apt-get
명령의 경우 -u
스위치는 업그레이드 할 수있는 패키지 목록을 표시합니다.
# apt-get -u upgrade --assume-no
-u
–show- 업그레이드 됨 업그레이드 된 패키지 표시; 업그레이드 할 모든 패키지 목록을 인쇄합니다. 구성 항목 : APT :: Get :: Show-Upgraded.
-assume-no 모든 프롬프트에 자동 “아니요”. & lt == 설치 시작 방지
댓글
답변
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
-u
는apt-get
li의 기본 옵션입니다. >