利用可能なアップデートをリストしますが、インストールしないでください


209

パッケージの更新がある場合に、cron実行レポートスクリプトから通知されるようにします。ようにする方法であるapt-get私に利用可能なアップデートのリストを与えるが、より多くの何もしないのですか?

回答:


231

適切な

最新バージョンのapt場合、このための特定のスイッチがあります。

apt list --upgradable

apt-get

古いapt-getコマンドの場合、-uスイッチはアップグレードに使用できるパッケージのリストを表示します。

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

apt-getmanページから:

-u
--show-upgradedアップグレードさ
 れたパッケージを表示します。アップグレードするすべてのパッケージのリストを印刷します。構成アイテム:APT :: Get :: Show-Upgraded。
--assume-no  すべてのプロンプトに対する自動「no」。<==インストールを開始しないようにするには

2
ルートなしでこれができることを望んでいた
-ThorSummoner

19
「Y」と入力してEnterキーを押すと、このコマンド更新インストールします。「-s」を追加することをお勧めします。そうしないと、この答えは誤解を招きます。
Murmel

5
これは非常に間違った答えので、ユーザが間違った入力を入力した場合、入力のために待機して、パッケージがインストールされているコマンド、(追加オプションなし)システム変更 OPが(ちょうど私のシステムに起こった)何を望んではありません
ダニエルアルダー

そして、ところで:-uデフォルトのオプションですapt-get
ダニエル・アルダー

1
@ThorSummoner「-s」は、あなたがやりたい&ルートなしで動作します
nevelis

67
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

うまくいけば、それは他の誰かを助ける、


1
ただ笑うために:apt-get -s upgrade | awk -F '[] [()] +' '/ ^ Inst / {printf "Prog:%s \ tcur:%s \ tavail:%s \ n"、$ 2、$ 3、$ 4}'
tink

8
使用している場合はそれはまた、はるかに見ていいかもしれない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

1
@AntonioK素晴らしく見える!
ニック

1
このPerlコードが私のマシンをハッキングするのではないかと心配しています...;)
クリス

33

enzotibに触発された別のオプション:

aptitude search '~U' | wc -l

このコマンドは、aptitudeを使用して新しいパッケージを出力し、wcを使用して行をカウントします。

副次的に、私は〜Uを囲む単一引用符なしのenzotibのソリューションが私にとってうまくいかないことを発見しました。(Wheezy、ZSH、aptitude 0.6.8.2)

更新:

新しいaptを使用すると、次のことができます。

apt list --upgradable

このおかげで、apt listコマンドはまさに私が望んでいたものでした。
ドヴォルザーク

このソリューションの利点は、sudo / rootが必要ないことです。
グンニ

25

最も簡単なのは:

apt list --upgradable

ミントでは動作しません。
ychaouche

1
アップグレードが利用可能かどうかによって異なる終了コードを返さないのは残念です。これをスクリプトで使用できれば良かったでしょう。
デール・アンダーソン

18

走れます

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

1
このaptitudeコマンドは私にとってはうまく機能し、ルートは必要ありませんでした
-JamesCW

apt-getの-sのdist-upgradeはそのawkerを通してあなたは、パイプ、それは時にあまりにも良い作品と同じ出力を持っている
ychaouche

ありがとうございました!これはかなりの依存関係の地獄から抜け出しました。はdist-upgrade使用する必要があったので、いくつかのパッケージを失おうとしていましたaptitudeaptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')トリックをしました!
ジェイエン

11

パッケージ「apticron」をご覧ください。

apticron-保留中のパッケージの更新についてメールするシンプルなツール

Apticronは、dselectとaptitudeの両方で保留中のパッケージを適切に処理し、セキュリティアップデートなどの保留中のパッケージアップデートについて毎日メールを送信する単純なスクリプトです。

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


リンクが壊れています...
アレクシスウィルケ

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

実際にインストールせずに利用可能な更新を一覧表示します。

最初のコマンドは、シミュレート(つまり-s)アップグレードが実行される前にパッケージインデックスファイルを更新します。「-s」は、インストールされるが実際には何もインストールしないパケットを示すシミュレートされたアップグレードを実行します。

反対に、「-s」の代わりに「-u」が確認後に実際にインストールされます。


2
シミュレーションオプション-s, --simulate, --just-print, --dry-run, --recon, --no-actは、私の個人的なお気に入りである、偵察および予行演習のいずれかでトリガーできます。
ThorSummoner

9

可能なアップグレードに関する完全なバージョン情報が必要だったため、jasonwryanの答えを修正したものを使用しました。

apt-get -V -u upgrade

シンプルで、IMOの合理的にフォーマットされた出力です。


3

の出力をフィルタリングするだけです

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

ログに優先情報のみが含まれるようにします。

ほとんどの場合、ラインの後に美しい部分が必要になります

...

次のパッケージがアップグレードされます。

...

最初はスペースがほとんどありません。


こんにちは、サイトへようこそ。現状では、答えは基本的に既存のものの再ハッシュであり、新しいものは追加しません。あなたは、各種スイッチ等何をするかの説明を追加し、出力をフィルタリングする方法を説明するなどして、それを改善することができ
terdon

2

この答えに触発された別のオンラインライナーをジェット:

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)

1つのライナーは素晴らしいですが、いくつかのパッケージの説明を出力しません。
ychaouche

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

cronメールでは最も簡単です。ユーザーの反復はなく、更新がない場合は出力されません。


1

@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

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

0

バリエーションとして、以下を使用します。

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、特権アクセスで呼び出す必要があります。


出力はパッケージ名(最初の列)のみを示し、2番目の列は常に「=」を出力し、3番目の列は常に空です。私はミントです。
ychaouche

0

apt-show-versionsツールがあります。利用可能なアップデートを表示するには、次を実行します。

apt-show-versions -u

0

私はこれを使用したい:

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

利用可能なアップデートがある場合は、ない場合はどれもありません。これにより、監視ソリューションと簡単に組み合わせることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.