有什麼辦法可以查到嗎全部給定係統上的文件不是透過 RPM 安裝?我知道我可以自己使用類似於rpmquery -f
循環遍歷文件系統中所有文件的腳本來強制執行此操作yum
或dnf
弄清楚這一點是很好的。
如果沒有標準的方法來做到這一點,有人知道一些預先存在的腳本可以做到這一點嗎?如果不需要,我不想重新發明輪子。
聚苯乙烯還有一個與此類似的問題,但它是關於 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 來執行您所要求的操作: