パッケージの更新がある場合に、cron実行レポートスクリプトから通知を受け取りたいです。 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 すべてのプロンプトに対して自動的に「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、適性0.6.8.2)
更新:
新しいaptを使用すると、次のことができます。
apt list --upgradeable
コメント
- このおかげで、aptlistコマンドはまさに私が望んでいたものでした。
- このソリューションの優れた点は、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 }"
コメント
- このaptitudeコマンドは、私にとって非常に効果的でした。ルートは必要ありません
- apt-get -s dist-upgradeもうまく機能し、そのawkerにパイプしたときに同じ出力が得られます
- ありがとうございます。これはかなりの依存関係地獄から抜け出しました。
dist-upgrade
を試みましたが、一部のパッケージが失われなかったため、aptitude
を使用する必要がありました。aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
がトリックを行いました!
回答
パッケージ「apticron」を見てください:
apticron-シンプル保留中のパッケージ更新についてメールで送信するツール
Apticronは、セキュリティ更新などの保留中のパッケージ更新に関するメールを毎日送信し、保留中のパッケージを適切に処理するシンプルなスクリプトです。 dselectとaptitudeによって。
https://packages.debian.org/buster/apticron
コメント
- リンクが壊れています…
回答
apt-get update && apt-get -s upgrade
実際にインストールせずに利用可能な更新を一覧表示します。
最初のコマンドは、シミュレートされた(つまり、-s)アップグレードの前にパッケージインデックスファイルを更新します。完了しました。 「-s」は、インストールされるが実際には何もインストールされないパケットを示すシミュレートされたアップグレードを実行します。
逆に、「-s」の代わりに「-u」は確認後に実際にインストールされます。
コメント
- シミュレーションオプションは、
-s, --simulate, --just-print, --dry-run, --recon, --no-act
のいずれかでトリガーでき、偵察とドライランは私の個人的なお気に入り。
回答
可能なアップグレードに関する完全なバージョン情報が必要だったので、jasonwryanの変更を使用しました「回答:
apt-get -V -u upgrade
シンプルでIMOの合理的な形式の出力です。
回答
apt-get update && apt-get -s -V -u upgrade
の出力をフィルタリングするだけで、ログに優先情報のみが含まれます。
ほとんどの場合、「行の後に美しい部分が必要になります
…
次のパッケージがアップグレードされます。
…
スペースが少ない初めに。
コメント
- こんにちは、サイトへようこそ。現状では、あなたの答えは基本的に既存のものの再ハッシュであり、したがって新しいものは何も追加されません。たとえば、出力をフィルタリングする方法を説明したり、さまざまなスイッチの機能の説明を追加したりすることで、改善できます。
回答
apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "
はcronメールにとって最も単純です。ユーザーの反復はなく、更新がない場合は出力がありません。
回答
別のオンラインライナーを追加し、 この回答に触発されました:
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つのライナーは素晴らしいですが、’一部のパッケージの説明が出力されない点が異なります。
回答
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
残念ながら、これは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 -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])
利用可能な更新がある場合、および存在しない場合はなし。この方法で、監視ソリューションと簡単に組み合わせることができます。
回答
としてバリエーション私は以下を使用します:
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-get update
を呼び出す必要があります。
コメント
- 出力にはパッケージ名(最初の列)のみが表示され、2番目の列には常に = “そして3番目の列は常に空です。私は’ミントにいます。
回答
あります ” ■ apt-show-versions
ツール。利用可能な更新を表示するには、次のコマンドを実行します。
apt-show-versions -u
-u
はapt-get
liのデフォルトオプションです>