廃止されたパッケージのリストを取得するにはどうすればよいですか?


19

私が有効にしたリポジトリで使用できなくなったパッケージのリストを取得する方法を見つけようとしています。このワークステーションは、かなりの数のUbuntuバージョンを使用しており、多くのサードパーティのリポジトリが追加および削除されています。これらの削除されたリポジトリから持っているソフトウェアのリストを取得したいので、クリーンアップするか、適切なリポジトリを追加し直します。

回答:


23
aptitude search '~o'

Aptitudeには、非常に強力な検索機能がいくつかあります。残念ながら、構文は少し扱いに​​くいため、マニュアルを見つけるためにマンページを掘り下げる必要がありますが、その価値はあります。

apt-show-versionsも役立ちます:

apt-show-versions | grep 'No available version'

1
ここでは時代遅れのパッケージについての素晴らしい記事を参照してください。raphaelhertzog.com/2011/02/07/...
リュイス

別の有用なリストが生成されますapt-show-versions | grep "newer than version in archive"
ショーン

apt-show-versionsは、aptitude行が非常に直感に反して覚えているという理由だけで最高だと思います。必要になるたびに、グーグルで検索/検索/保存/スクリプトの作成などを行う必要があります。
j riv

6

登録済みリポジトリまたはPPAにないアプリのリストを取得するには、次を実行します。

sudo apt-get install apt-show-versions
apt-show-versions | grep 'No available version'

次のようなテキストが出力されます。

app1 1.0.0.14 installed: No available version in archive
app23 0.3.6 installed: No available version in archive
app332 7.0.9377 installed: No available version in archive

私にとってこれは機能し、DEBパッケージを使用してインストールした3つのアプリを示しましたが、レポまたはPPAでは利用できませんでした。

ただし、すべてのプログラムをチェックすることは不可能であり、通過したプログラムのみをチェックすることはできませんdpkg。たとえば、一部のアプリは正しいフォルダーに展開するだけでインストールされますが、他のアプリはスタンドアロンのインストーラーbinまたはスクリプトを使用します。そのため、APT以外の方法でインストールしたアプリのリストを自分で保持するのが最善の方法です。


ローカルにdpkgインストールされたすべてのパッケージで動作します。1つの例外。をリストしますがskype-binapt-cache policy skype-binCanonicalパートナーリポジトリを明確に示します。何が起こっているのか分かりません。マルチアーチの問題?まだ+1 apt-show-versions
gertvdijk

aptitudeはこれらの「廃止された」パッケージを呼び出します。上記のchronitisコメントを参照してください。
ヘンクポーリー

5

aptitudeをインストールして使用している場合、

aptitude search '?obsolete'

またはその短い形式

aptitude search '~o'

ここにサンプル出力があります

i A gcc-4.7-base - GCC, the GNU Compiler Collection (base package)
id  libdb4.7     - Berkeley v4.7 Database Libraries [runtime]
i   libudev0     - libudev shared library

各行の最初の文字は、パッケージの現在の状態を示します。最も一般的な状態は次のとおりです。

  • p、システム上にパッケージのトレースが存在しないことを意味し、
  • c、パッケージは削除されたが、構成ファイルがシステムに残っていることを意味します。
  • i、パッケージがインストールされていること、および
  • v、パッケージが仮想であることを意味します。

2番目の文字は、パッケージで実行される保存されたアクション(存在する場合)を示し、そうでない場合は空白が表示されます。最も一般的なアクションは次のとおりです。

  • i、パッケージがインストールされることを意味し、
  • d、パッケージが削除されることを意味する
  • p。パッケージとその構成ファイルが削除されることを意味します。

3番目の文字がAの場合、パッケージは自動的にインストールされました。

可能な状態フラグとアクションフラグの完全なリストについては、aptitudeリファレンスガイドの「パッケージ情報へのアクセス」セクションを参照してください。


1
aptitude search ?obsoletebashで動作する可能性がありますが、使用する必要がありますaptitude search '?obsolete'
AB

出力の解析に関する詳細を追加できますか?
オタク長老

「?obsolete」は「〜o」とは異なりますか?
ショーン

@Seanいいえ、違いはありません。〜oは、本当に時代遅れの短縮形です。
デミスパルマツ

引用符はシェルによって解析されます。ABが意味するのは、シェルが何をするのかわからないので、コマンドラインでエスケープせずに変な文字を渡さないことだと思います。
ショーン

2

Ubuntu 19.10以降では、実行することも可能です

apt list ?obsolete

廃止されたパッケージのリストを取得します。

どのリリースでも、次のBashワンライナーを使用できます。

comm -23 <(dpkg-query -W -f '${db:Status-Abbrev}\t${Package}\n' | grep '^.[^nc]' | cut -f2 | sort) <(apt-cache dumpavail | sed -rn 's/^Package: (.*)/\1/p' | sort -u)

このために追加のパッケージをインストールする必要はありません。さらに、これは比較的高速です。これにより、部分的にインストールされたパッケージも検出されます(ただし、構成ファイルのみが残っているパッケージは検出されませんが、簡単に変更できます)。注:これは、パッケージがどのアーキテクチャーであるかを気にしません。

リポジトリから入手可能なものとは異なるバージョンがインストールされているパッケージを含める場合は、次のいずれかを実行できます。

最新のaptを使用:

 apt list --installed | awk -F/ '/\[installed,local\]/{print $1}'

さらに別のオプションは、実行することです

ubuntu-support-status --show-unsupported

[ダウンロード不可:]セクションのパッケージ名を読みます。


'apt list --manual-installed | grep -v cosmic 'は偽陽性を示します。この答えははるかに優れています!
TamusJRoyce

1
@TamusJRoyce、はい、編集後にそうなったと思います。
ヤルノ

1

調査するための詳細情報。

ubuntu-support-status 
echo "「手動インストール」としてマークされた$(sudo apt-mark showmanual | wc -l)パッケージ。」

... ubuntu-support-statusおよびapt-markのインストールが必要な場合があります。


で使用sudoする必要はありませんapt-mark showmanual
ヤルノ

ubuntu-support-status廃止されたパッケージの数をリストしますが、パッケージ名はリストしません。
ヤルノ

1
出力読むubuntu-support-status --help
ハンヌ

ああ、ヒントをありがとう。
ジャルノ

0

よりクリーンな方法があるかもしれませんが、私の頭の上であなたができる

dpkg -l | cut -f 3 -d ' ' > installed
xargs -n 1 --replace=X apt-cache search ^X$ < installed | cut -f 1 -d ' ' > available
diff installed available

installedファイルの最初の数行をクリーンアップします。ヘッダーがあります。

誰かが私の構文の強調表示を修正できる場合のボーナス...


2
の出力を使用してdpkg -lインストール済みパッケージのリストを取得する場合、dpkgはインストールされていない(おそらく削除されているがパージされていない)パッケージもリストするため、結果を2番目の列に「i」がある行に制限する必要があります。例として、最初のコマンドを変更するとdpkg -l | grep '^.[^i]' | cut -f 3 -d ' ' 、インストールされていないパッケージのリストが返されます。(しかしかつて)
シチュー

1
また、apt-cache search someinstalledpackageパッケージがレポから利用できない場合でも何かを返すので、これがまったく機能しないと思います。
シチュー

1
@stew誰かが結論に達するかどうかを確認するためにここに残しておきますが、あなたの答えは間違いなくはるかに優れています。あなたに+1。
ジェフファーランド

@stew dpkg -l | grep '^.[^i]' | cut -f 3 -d ' 'は、いくつかのヘッダー行も出力します。
ジャーノ

この回答が機能したとしてもapt-cache search、パッケージごとに個別に実行されるため、非常に遅くなります。
ヤルノ

0

前述のとおり、apt-get検索は、パッケージがまだ利用可能かどうかを確認するのに適した方法ではありません。追加すべてを1行に追加しました:

for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done

そして、なぜgrep '^i'
AB

@ABの良い点; パッケージがインストールされているかどうかはわかりませんが、パッケージの目的のアクションがインストールされることはわかりません。詳細についてはman dpkg-query、を参照してください。
ヤルノ

これは非常に遅いです
ヤルノ

apt-cache showパッケージが使用可能かどうかを確認するのには適していません。それぞれのリポジトリを無効にし、他の有効なリポジトリにリポジトリがない場合でも、パッケージが表示されます。
ジャーノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.