![廃止予定のパッケージを特定して削除する方法は? [閉鎖]](https://linux33.com/image/139389/%E5%BB%83%E6%AD%A2%E4%BA%88%E5%AE%9A%E3%81%AE%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E7%89%B9%E5%AE%9A%E3%81%97%E3%81%A6%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
何らかの理由で、Linuxディストリビューション(Fedora / CentOS / Debian / Ubuntu / Arch / ...)に多くのパッケージがインストールされています。そのうちのいくつかは使い捨てです。ただし、パッケージマネージャを使用してシステム全体のアップグレードを実行するたびに、アップグレードに含まれます。この場合、ワンタイムパケットは実際には不要になるため、時間と帯域幅の浪費に過ぎません。だからそれが何かを見つけて削除したいです。
一部のパッケージマネージャは、パッケージを依存関係としてインストールし、ダウンストリームパッケージが削除されたときに自動的に削除できるようにすることを知っています。ただし、時々パッケージのインストール中にこのオプションを追加することを忘れてしまい、その一部はパッケージで使用されません。依存関係オプション。だから現在の状況は、どのパッケージが使用されなくなったのかわからないということです。
これらのパッケージを識別する1つの方法は、パッケージファイルの最後のアクセス時間を追跡することです。しかし、広く使用されているパッケージマネージャ(dnf/yum/apt/pacman/...)を使用してこれを行う方法がわかりません。それらの中に使い捨てパッケージを識別して削除することができるこのような機能はありますか?これを行う煩わしい方法は、すべてのパッケージの完全なファイルのリストを取得し、アクセス時間に基づいてソートすることです。しかしその前に、私は車輪を再発明しないことを確認したいと思います(つまり、パッケージマネージャがすでに持っているものを作ること)。
答え1
Debian/Ubuntu は、特定のパッケージ内のすべてのファイルへの最新のアクセス時間を提供します。
function package_access { dpkg-query -L $1 | xargs stat -c '%F %n' | grep '^regular file ' | sed 's/^regular file //' | xargs stat -c '%x' | sort -r | head -1 ; }
(名前にスペース/括弧がない場合)
したがって、次のようにパッケージと最後のアクセス時間を一覧表示できます。
( for p in $(dpkg-query -f '${Package}\n' --show); do echo "$(package_access "$p") $p" ; done ) | sort -r
(しばらく実行され、多くのゴミが出力されます。上記の警告を参照してください)
奇妙なことに、2017年5月にUbuntu 16.04をインストールしたとき、2007年にさかのぼるパッケージへのアクセスが見つかりました(tk
実際のファイルだったため/usr/share/doc/tk/copyright
)。ただし、これらのパッケージのファイルにアクセスすると、package_access出力は現在の状態に戻ります。