回答:
最新バージョンのapt
場合、このための特定のスイッチがあります。
apt list --upgradable
古いapt-get
コマンドの場合、-u
スイッチはアップグレードに使用できるパッケージのリストを表示します。
# apt-get -u upgrade --assume-no
-u
--show-upgradedアップグレードさ れたパッケージを表示します。アップグレードするすべてのパッケージのリストを印刷します。構成アイテム:APT :: Get :: Show-Upgraded。
--assume-no すべてのプロンプトに対する自動「no」。<==インストールを開始しないようにするには
-u
デフォルトのオプションですapt-get
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
うまくいけば、それは他の誰かを助ける、
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
enzotibに触発された別のオプション:
aptitude search '~U' | wc -l
このコマンドは、aptitudeを使用して新しいパッケージを出力し、wcを使用して行をカウントします。
副次的に、私は〜Uを囲む単一引用符なしのenzotibのソリューションが私にとってうまくいかないことを発見しました。(Wheezy、ZSH、aptitude 0.6.8.2)
更新:
新しいaptを使用すると、次のことができます。
apt list --upgradable
最も簡単なのは:
apt list --upgradable
走れます
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 }'
dist-upgrade
使用する必要があったので、いくつかのパッケージを失おうとしていましたaptitude
。 aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
トリックをしました!
パッケージ「apticron」をご覧ください。
apticron-保留中のパッケージの更新についてメールするシンプルなツール
Apticronは、dselectとaptitudeの両方で保留中のパッケージを適切に処理し、セキュリティアップデートなどの保留中のパッケージアップデートについて毎日メールを送信する単純なスクリプトです。
apt-get update && apt-get -s upgrade
実際にインストールせずに利用可能な更新を一覧表示します。
最初のコマンドは、シミュレート(つまり-s)アップグレードが実行される前にパッケージインデックスファイルを更新します。「-s」は、インストールされるが実際には何もインストールしないパケットを示すシミュレートされたアップグレードを実行します。
反対に、「-s」の代わりに「-u」が確認後に実際にインストールされます。
-s, --simulate, --just-print, --dry-run, --recon, --no-act
は、私の個人的なお気に入りである、偵察および予行演習のいずれかでトリガーできます。
この答えに触発された別のオンラインライナーをジェット:
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)
apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "
cronメールでは最も簡単です。ユーザーの反復はなく、更新がない場合は出力されません。
@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
バリエーションとして、以下を使用します。
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
、特権アクセスで呼び出す必要があります。
apt-show-versions
ツールがあります。利用可能なアップデートを表示するには、次を実行します。
apt-show-versions -u
私はこれを使用したい:
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])
利用可能なアップデートがある場合は、ない場合はどれもありません。これにより、監視ソリューションと簡単に組み合わせることができます。