回答:
aptitude search '~o'
Aptitudeには、非常に強力な検索機能がいくつかあります。残念ながら、構文は少し扱いにくいため、マニュアルを見つけるためにマンページを掘り下げる必要がありますが、その価値はあります。
apt-show-versionsも役立ちます:
apt-show-versions | grep 'No available version'
apt-show-versions | grep "newer than version in archive"
登録済みリポジトリまたは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-bin、apt-cache policy skype-binCanonicalパートナーリポジトリを明確に示します。何が起こっているのか分かりません。マルチアーチの問題?まだ+1 apt-show-versions!
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
各行の最初の文字は、パッケージの現在の状態を示します。最も一般的な状態は次のとおりです。
2番目の文字は、パッケージで実行される保存されたアクション(存在する場合)を示し、そうでない場合は空白が表示されます。最も一般的なアクションは次のとおりです。
3番目の文字がAの場合、パッケージは自動的にインストールされました。
可能な状態フラグとアクションフラグの完全なリストについては、aptitudeリファレンスガイドの「パッケージ情報へのアクセス」セクションを参照してください。
aptitude search ?obsoletebashで動作する可能性がありますが、使用する必要がありますaptitude search '?obsolete'
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
[ダウンロード不可:]セクションのパッケージ名を読みます。
調査するための詳細情報。
ubuntu-support-status echo "「手動インストール」としてマークされた$(sudo apt-mark showmanual | wc -l)パッケージ。」
... ubuntu-support-statusおよびapt-markのインストールが必要な場合があります。
sudoする必要はありませんapt-mark showmanual。
ubuntu-support-status廃止されたパッケージの数をリストしますが、パッケージ名はリストしません。
ubuntu-support-status --help
よりクリーンな方法があるかもしれませんが、私の頭の上であなたができる
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ファイルの最初の数行をクリーンアップします。ヘッダーがあります。
誰かが私の構文の強調表示を修正できる場合のボーナス...
dpkg -lインストール済みパッケージのリストを取得する場合、dpkgはインストールされていない(おそらく削除されているがパージされていない)パッケージもリストするため、結果を2番目の列に「i」がある行に制限する必要があります。例として、最初のコマンドを変更するとdpkg -l | grep '^.[^i]' | cut -f 3 -d ' ' 、インストールされていないパッケージのリストが返されます。(しかしかつて)
apt-cache search someinstalledpackageパッケージがレポから利用できない場合でも何かを返すので、これがまったく機能しないと思います。
dpkg -l | grep '^.[^i]' | cut -f 3 -d ' 'は、いくつかのヘッダー行も出力します。
apt-cache search、パッケージごとに個別に実行されるため、非常に遅くなります。
前述のとおり、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'
man dpkg-query、を参照してください。
apt-cache showパッケージが使用可能かどうかを確認するのには適していません。それぞれのリポジトリを無効にし、他の有効なリポジトリにリポジトリがない場合でも、パッケージが表示されます。