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


9

RPM経由でインストールされなかった、特定のシステム上のすべてのファイルを見つける方法はありますか?私は、ファイルシステムのすべてのファイルをループするスクリプトのようなものを使用して、これを自分でブルートフォースできることを理解していますが、RPMベースのシステム(特にFedoraでこれを使用するための標準的な方法)家)。これはFedoraの場合なので、使用するか、これを理解することは問題ありません。rpmquery -fyumdnf

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

PS これに似た別の質問がありますが、それはGentooとPortageに関するものなので、完全に関連しているわけではありません。


好奇心から、実際のユースケースは何でしょうか?
doktor5000 2016

1
@ doktor5000自宅のデスクトップで、過去数年間にかなりの量のサードパーティソフトウェアを追加しました。rpmの外にインストールしたすべてのファイルを手動で追跡する代わりに、それらのファイルのリストを取得して、手動でコピーするものを知っているか、システムを更新するときに再インストールするか、単に無視するのがいいでしょう。Fedoraの場合、インプレースアップグレードを試してみると運が悪いので、再インストールはまったく新しいものになりがちです。
エストラーダ

さて、おそらく、最初に、基本リポジトリに付属していないrpmパッケージに制限する方が簡単でしょう。また、他のソフトウェアは通常、デフォルトで/ usr / localまたは/ optにインストールされますが、通常のディストリビューションパッケージでは使用されないため、簡単に確認できます。/ usr / bin、/ usr / share、/ usr / libなどの標準パスの場合、おそらく私の回答にリンクされているスクリプトレットメソッドの1つに頼る必要があります。
doktor5000 2016

回答:


5

パーティーには少し遅れますが、うまくいけば誰かがこれを役に立つと思います:

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

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

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


3

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

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

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


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


3

/superuser/555918/how-do-i-list-all-the-files-not-owned-by-any-package-in-a-rpm-based-systemごとに、次のコマンド必要なものの確固たるベースラインです。

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

カスタマイズは、さらに関心のディレクトリにfindコマンドをフィルタリングすることで(どちらかのディレクトリのリストを指定する代わりに、/(例えば/{usr,bin})などのフォルダを除く/proc/dev/home、と/tmp


より徹底的に:comm -13 <(rpm -qla | sort | uniq) <(find / -xdev \( -type f -o -type d -o -type l \) | sort) これは-l、インストールされたすべてのパッケージ(rpm -qa)内のファイルを一覧表示()し、それらをソートしてから重複を削除します(一部のディレクトリは複数のパッケージによって提供されるため)。また、ルートパーティション上のすべてのファイルを検索し(他のファイルシステムに移動せずに- -xdev)、すべてのファイル、ディレクトリ、シンボリックリンクを返します(\( -type f -o -type d -o -type l \))。次にcomm、rpmリスト内のエントリ(-1)と両方のエントリ()を無視して、比較に使用します-3
IBBoard

sudorootだけがアクセスできるファイル(特に/ etcの下)を見つけることができるように、検索で使用する必要がある場合があることにも注意してください。
IBBoard
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.