web-dev-qa-db-ja.com

利用可能なアップデートを一覧表示しますが、インストールしません

パッケージの更新があった場合に、cron実行レポートスクリプトで通知してほしい。を作る方法ですapt-get利用可能なアップデートのリストを教えてください。それ以上何もしませんか?

231
Morris

ふさわしい

aptの最新バージョンには、これに固有のスイッチがあります。

apt list --upgradeable

apt-get

古いapt-getコマンド-uスイッチは、アップグレード可能なパッケージのリストを表示します。

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

から - apt-get manページ

-u
-ショーアップグレード
 アップグレードされたパッケージを表示します。アップグレードするすべてのパッケージのリストを印刷します。構成項目:APT :: Get :: Show-Upgraded。
-仮定しない すべてのプロンプトに対して自動「いいえ」。 <==インストールを開始しないようにするには
255
jasonwryan
apt-get --just-print upgrade

簡単には読めませんが、以下はapt-getの出力を解析するためのPerlの1行です:

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、aptitude 0.6.8.2)

更新:

新しいaptでできること:

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