RPM パッケージ マネージャーによってインストールされていないファイルを検索する

RPM パッケージ マネージャーによってインストールされていないファイルを検索する

調べる方法はあるでしょうか全て特定のシステム上のファイルなかったRPM 経由でインストールしますか? ファイル システム内のすべてのファイルをループするスクリプトなどを使用してrpmquery -f、自分でこれを強制的に実行できることは理解していますが、RPM ベースのシステム (具体的には、自宅で使用している Fedora) でこれを行う標準的な方法があるかどうか疑問に思っています。これは Fedora 用なので、使用したりyumdnf理解したりしても問題ありません。

標準的な方法がない場合、これを行うための既存のスクリプトを知っている人はいますか? 必要がない限り、車輪の再発明はしたくありません。

追伸これに似た質問が他にもありますただし、これは Gentoo と Portage に関するものなので、完全に関連性があるわけではありません。

答え1

少し遅くなりましたが、誰かにとってこれが役に立つことを願っています:

find /usr/ -exec /bin/sh -c 'rpm -qf -- "$1" >/dev/null 2>&1 || echo "$1"' find_sh {} \;

このコマンドはファイル システムをクロールし、rpm -qfその上で実行されます。rpm -qfファイルに対応するパッケージを出力し、見つかった場合は 0 が返され、見つからない場合は 1 が返されます。

勇気があれば、出力を に結び付けることもできます| xargs rm -fが、個人的にはそこまで勇気は要りません。 には、/usr実際には何も所有していないものがたくさんあることが判明しました。

答え2

パーhttps://superuser.com/questions/555918/rpm ベースのシステムで、どのパッケージにも所有されていないすべてのファイルをリストする方法次のコマンドは、必要なものを確実に満たすベースラインです。

comm -13 <(rpm -qla | sort) <(find / -type f | sort)

find コマンドを目的のディレクトリにフィルタリングしてさらにカスタマイズします ( の代わりにディレクトリのリストを指定するか/(例) 、、、/{usr,bin}などのフォルダを除外します)。/proc/dev/home/tmp

答え3

私の知る限り、これは何らかの専用コマンドでは不可能であり、少しのスクリプトでのみ可能です。TL;DR - 下部のリンクを参照してください。また、rpm ベースのシステムや他のバイナリベースのパッケージ マネージャーの場合、これはあまり意味がありません。このようなパッケージ マネージャーは通常、状態ベースのマシンであり、インストールしたものを追跡することを目的としたものであって、ユーザーがパッケージ マネージャーの「背後で」システムにこっそりと入れたものすべてを把握することを目的としたものではありません。

rpm ファイルが所有していないファイルについては、どこに線引きしますか? 一時ファイル (/tmp や /var/tmp など)、キャッシュ (/var/cache など)、またはユーザーが作成したファイル (/home や /srv などのユーザー定義のマウントポイント) についてはどうでしょうか。

ソースベースのディストリビューションでは、ユースケースが以下の用途に限定されている場合、その機能を提供することは理にかなっているかもしれない。FHS/usr、/bin、/lib などの「システム」パッケージによって使用されるディレクトリ。サードパーティ ソフトウェアの /usr/local や /opt などとは異なります。


要求した内容を実行するスクリプトレットについては、次の同様の質問を参照してください。

関連情報