尋找 RPM 套件管理器未安裝的文件

尋找 RPM 套件管理器未安裝的文件

有什麼辦法可以查到嗎全部給定係統上的文件不是透過 RPM 安裝?我知道我可以自己使用類似於rpmquery -f循環遍歷文件系統中所有文件的腳本來強制執行此操作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列印檔案對應的包,幸運的是,如果找到 1,則傳回值 0,否則傳回 1。

如果你很勇敢,你可以將輸出綁定到| xargs rm -f,但就我個人而言,我不會那麼勇敢。事實證明,裡面有很多東西/usr並不真正屬於任何東西。

答案2

https://superuser.com/questions/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

答案3

據我所知,使用某種專用命令是不可能的,只能透過一些腳本來實現。TL;DR - 請參閱底部的連結。對於基於 rpm 的系統或其他基於二進位的套件管理器來說,這沒有多大意義。這類套件管理器通常是基於狀態的機器,旨在追蹤它們自己安裝的內容,而不是了解使用者在套件管理器「背後」潛入系統的所有內容。

對於不屬於 rpm 文件的文件,您會在哪裡劃定界線?暫存檔案(想想 /tmp 和 /var/tmp )或快取(想想 /var/cache )或使用者建立的檔案( /home 或 /srv 或其他使用者定義的安裝點)怎麼樣。

對於基於原始碼的發行版,如果用例限制它們,那麼提供該功能可能是有意義的FHS「系統」套件使用的目錄,如 /usr、/bin、/lib 等,而非用於第三方軟體的 /usr/local 或 /opt。


請參閱以下類似的問題,以了解 scriptlet 來執行您所要求的操作:

相關內容