Apakah ada cara untuk mengetahui semua file pada sistem yang diberikan yang tidak diinstal melalui RPM? Saya mengerti bahwa saya dapat memaksa ini sendiri menggunakan sesuatu seperti rpmquery -f
dalam skrip yang loop melalui semua file dalam sistem file, namun saya bertanya-tanya apakah ada beberapa cara standar untuk melakukan ini untuk sistem berbasis RPM (khususnya Fedora, yang saya gunakan di rumah). Karena ini untuk Fedora, tidak masalah untuk menggunakan yum
atau dnf
mencari tahu ini.
Jika tidak ada cara standar untuk melakukannya, apakah ada yang tahu beberapa skrip yang sudah ada untuk melakukan ini? Saya tidak ingin menemukan kembali roda jika saya tidak perlu.
PS Ada pertanyaan lain yang mirip dengan ini , tetapi ini tentang Gentoo dan Portage, jadi tidak sepenuhnya relevan.
Jawaban:
sedikit terlambat ke pesta, tapi semoga seseorang akan menemukan ini berguna:
Perintah ini merangkak di atas sistem file, dan berjalan
rpm -qf
di atasnya.rpm -qf
mencetak paket yang sesuai untuk file, dan untungnya memiliki nilai pengembalian 0 jika menemukan satu dan 1 sebaliknya.Jika Anda berani, Anda bisa mengikat hasilnya
| xargs rm -f
, tetapi secara pribadi saya tidak akan begitu berani. Ternyata ada banyak barang di / usr yang tidak benar-benar dimiliki oleh apa pun.sumber
Sejauh yang saya ketahui, ini tidak mungkin dilakukan dengan semacam perintah khusus, hanya melalui sedikit skrip. TL; DR - lihat tautan di bagian bawah. Dan untuk sistem berbasis rpm atau manajer paket berbasis biner ini tidak masuk akal. Manajer paket seperti itu biasanya mesin berbasis negara yang dimaksudkan untuk melacak hal-hal yang mereka instal sendiri, dan tidak mengetahui segala sesuatu yang pengguna menyelinap ke sistem "di belakang" manajer paket.
Di mana Anda menggambar garis untuk file yang tidak dimiliki oleh file rpm? Bagaimana dengan file sementara (think / tmp dan / var / tmp) atau cache (think / var / cache) atau file yang dibuat oleh pengguna (/ home atau / srv atau mountpoint yang ditentukan pengguna lain).
Untuk distro berbasis sumber mungkin masuk akal untuk menawarkan fungsionalitas itu jika use case membatasi mereka ke direktori FHS yang digunakan oleh paket "system" seperti / usr, / bin, / lib dan sejenisnya, yang bertentangan dengan eg / usr / local atau / memilih untuk perangkat lunak pihak ke-3.
Lihat pertanyaan serupa berikut untuk skrip untuk melakukan apa yang Anda minta:
sumber
Per /superuser/555918/how-do-i-list-all-the-files-not- owned-by-any- any- package-in-a- rpm- based- system , perintah berikut ini adalah dasar yang kuat untuk apa yang Anda butuhkan:
comm -13 <(rpm -qla | sort) <(find / -type f | sort)
Customize lanjut dengan menyaring perintah find ke direktori bunga (baik menetapkan daftar direktori bukan
/
(misalnya/{usr,bin}
) atau tidak termasuk folder seperti/proc
,/dev
,/home
, dan/tmp
.sumber
comm -13 <(rpm -qla | sort | uniq) <(find / -xdev \( -type f -o -type d -o -type l \) | sort)
Daftar ini (-l
) file dalam semua paket yang diinstal (rpm -qa
) dan mengurutkannya kemudian menghapus duplikat (karena beberapa direktori disediakan oleh beberapa paket). Ia juga menemukan semua file di partisi root (tanpa masuk ke sistem file lain --xdev
) dan mengembalikan semua file, direktori dan symlink (\( -type f -o -type d -o -type l \)
). Kemudian digunakancomm
untuk membandingkan, mengabaikan entri hanya dalam daftar rpm (-1
) dan entri pada keduanya (-3
).sudo
pada find sehingga Anda dapat menemukan file (terutama di bawah / etc) yang hanya dapat diakses oleh root.