Hapus paket yang tidak digunakan

63

Saya telah menginstal beberapa paket rpm pada Fedora 17. Beberapa paket memiliki banyak ketergantungan. Saya telah menghapus beberapa paket tetapi saya lupa menghapus dependensi yang tidak digunakan dengan yum remove.

Bagaimana saya bisa melakukannya sekarang?

Raphael Ahrens
sumber
Sudahkah Anda melihat halaman yummanual: linux.die.net/man/8/yum ?
Linuxios
1
duplikat dari: unix.stackexchange.com/questions/23330/…
maxschlepzig

Jawaban:

39

Ini tidak mudah. Bagaimana Anda membedakan antara "file yang diperlukan oleh sesuatu yang telah saya hapus" dari "file yang tidak diperlukan oleh hal lain yang benar-benar saya inginkan"?

Anda dapat menggunakan package-cleanupperintah dari yum-utilspaket untuk mendaftar "leaf node" di grafik ketergantungan paket Anda. Ini adalah paket yang dapat dihapus tanpa mempengaruhi hal lain:

$ package-cleanup --leaves

Ini akan menghasilkan daftar "perpustakaan" di mana tidak ada yang lain bergantung. Dalam kebanyakan kasus, Anda dapat dengan aman menghapus paket-paket ini. Jika Anda menambahkan --allke baris perintah:

$ package-cleanup --leaves --all

Anda juga akan mendapatkan paket yang tidak dianggap pustaka, tetapi daftar ini akan sangat lama sehingga mungkin tidak akan berguna.

larsks
sumber
9
APT (setara Debian Yum) memiliki gagasan "paket yang diinstal secara otomatis". Jika sebuah paket tidak diminta secara eksplisit tetapi hanya ditarik sebagai dependensi, itu akan dihapus secara otomatis (dengan konfirmasi konfirmasi) jika paket-paket yang bergantung padanya semuanya dihapus. Tanpa indikasi jenis ini, memang tidak mudah.
Gilles 'SANGAT berhenti menjadi jahat'
101

Jika Anda menginstal paket dengan yum install, katakanlah pdftk, itu akan menarik banyak dependensi:

Installed:
  pdftk.x86_64 0:1.44-10.fc18

Dependency Installed:
  bouncycastle.noarch 0:1.46-6.fc18     
  itext-core.noarch 0:2.1.7-14.fc18     
  libgcj.x86_64 0:4.7.2-8.fc18          
  bouncycastle-mail.noarch 0:1.46-6.fc18
  java-1.5.0-gcj.x86_64 0:1.5.0.0-40.fc18
  sinjdoc.x86_64 0:0.5-13.fc18
  bouncycastle-tsp.noarch 0:1.46-5.fc18
  java_cup.noarch 1:0.11a-10.fc18
  itext.x86_64 0:2.1.7-14.fc18   
  javamail.noarch 0:1.4.3-12.fc18

Complete!

yum remove pdftk hanya akan menghapus paket itu dan tidak semua dependensi.

Tetapi Anda dapat melihat semua 'transaksi' (instal, hapus dll.):

$ sudo yum history list pdftk
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------  
    88 | install pdftk            | 2012-12-14 13:35 | Install        |   11   

Dan kemudian Anda dapat membatalkan transaksi itu:

$ sudo yum history undo 88
Undoing transaction 88, from Fri Dec 14 13:35:34 2012
    Dep-Install bouncycastle-1.46-6.fc18.noarch       @fedora
    Dep-Install bouncycastle-mail-1.46-6.fc18.noarch  @fedora
    Dep-Install bouncycastle-tsp-1.46-5.fc18.noarch   @fedora
    Dep-Install itext-2.1.7-14.fc18.x86_64            @fedora
    Dep-Install itext-core-2.1.7-14.fc18.noarch       @fedora
    Dep-Install java-1.5.0-gcj-1.5.0.0-40.fc18.x86_64 @fedora
    Dep-Install java_cup-1:0.11a-10.fc18.noarch       @fedora
    Dep-Install javamail-1.4.3-12.fc18.noarch         @fedora
    Dep-Install libgcj-4.7.2-8.fc18.x86_64            @fedora
    Install     pdftk-1.44-10.fc18.x86_64             @fedora
    Dep-Install sinjdoc-0.5-13.fc18.x86_64            @fedora
    ...
    Complete!
Ibumu
sumber
14
+1 Solusi luar biasa dan sangat mudah dilakukan. Saya belum pernah mendengarnya yum history. Terima kasih!
Stefan Lasiewski
8
Dan bagaimana jika 89 tergantung pada java_cup atau libgcj?
WernerCD
2
Bukankah ini jawaban yang diterima?
Celdor
62

Mulai dari Fedora 18, Anda cukup menggunakan perintah ini

yum autoremove

atau

yum remove --setopt=clean_requirements_on_remove=1

Anda juga dapat menerapkan perintah autoremove dengan paket tertentu

yum autoremove <package>

Yang akan menghapus dependensi yang tidak dibutuhkan dari paket yang diinstal. autoremovesangat banyak alias remove --setopt=clean_requirements_on_remove=1tetapi karena beberapa alasan, masih tidak berdokumen.

Finalzone
sumber
5
perintah yum remove --setopt=clean_requirements_on_remove=1bekerja untuk saya di centOS
BMW
Bagi saya package-cleanup --leaves && yum autoremovelibvorbis yang dihapus sehingga aplikasi internet-radio-streaming "Ices" mati - mungkin karena tidak ada dalam repo dan saya harus mengompilasinya.
Nakilon
Perintah juga yum autoremoveberfungsi pada CentOS 7.6.
scrutari
yum autoremove gagal menghapus 4 kernel lama di CentOS 7
user1133275
6

Saya mengambil jawaban larsk satu langkah lebih jauh.

$ package-cleanup -q --leaves | xargs -l1 yum -y remove 

Ini mengambil semua dependensi yang dapat dihapus tanpa mempengaruhi hal lain dan kemudian menghapusnya. Lebih baik melalui satu per satu.

"-q" berguna pada beberapa sistem yang mencetak "Menyiapkan yum" jika tidak, menyebabkan perintah ini untuk menghapus yum. Dan bukan itu yang Anda inginkan.

jtoscarson
sumber
2
package-cleanupoutput "Menyiapkan yum" pada mesin saya, yang mengakibatkan Yum menghapus sendiri. Saya sekarang mencoba mencari cara untuk mengatasinya.
Paul Lammertsma
@PaulLammertsma cukup tambahkan -qopsi untuk pembersihan paket. Ini juga terjadi pada saya: D
Ealhad
1
package-cleanup -q --leaves | xargs -r -l1 yum -y removeakan secara diam-diam melewatkan xargs jika output paket-cleanup kosong, berguna untuk skrip otomatis seperti ansible, chef, bonekanya, gelandangan
Ilya Sheershoff
ini adalah jawabannya.
xCovelus
1

Di Fedoras dengan yang lebih baru dnf, Anda dapat menggunakan dnf repoquery --unneededsebagai pengganti package-cleanup --leaves.

Thomas Ahle
sumber