Loại bỏ các gói không sử dụng


62

Tôi đã cài đặt một số gói vòng / phút trên Fedora 17. Một số gói có rất nhiều phụ thuộc. Tôi đã gỡ bỏ một số gói nhưng tôi quên loại bỏ các phụ thuộc không sử dụng với yum remove.

Làm thế nào tôi có thể làm điều đó bây giờ?


Bạn đã xem yummanpage: linux.die.net/man/8/yum chưa?
Linuxios

Câu trả lời:


39

Nó không dễ. Làm thế nào để bạn phân biệt giữa "một tệp được yêu cầu bởi một thứ tôi đã xóa" khỏi "một tệp không được yêu cầu bởi bất cứ thứ gì khác mà tôi thực sự muốn"?

Bạn có thể sử dụng package-cleanuplệnh từ yum-utilsgói để liệt kê "nút lá" trong biểu đồ phụ thuộc gói của bạn. Đây là các gói có thể được gỡ bỏ mà không ảnh hưởng đến bất cứ điều gì khác:

$ package-cleanup --leaves

Điều này sẽ tạo ra một danh sách "thư viện" mà không có gì khác phụ thuộc vào. Trong hầu hết các trường hợp, bạn có thể loại bỏ các gói này một cách an toàn. Nếu bạn thêm --allvào dòng lệnh:

$ package-cleanup --leaves --all

Bạn cũng sẽ nhận được các gói không được coi là thư viện, nhưng danh sách này sẽ còn dài đến mức có thể sẽ không hữu ích.


9
APT (tương đương với Debian của Yum) có một khái niệm về gói tự động cài đặt trên mạng. Nếu một gói không được yêu cầu rõ ràng mà chỉ được kéo vào như một phụ thuộc, nó sẽ tự động bị xóa (với lời nhắc xác nhận) nếu các gói phụ thuộc vào nó bị xóa. Nếu không có chỉ dẫn của loại này, nó thực sự không dễ dàng.
Gilles 'SO- ngừng trở nên xấu xa'

101

Nếu bạn cài đặt một gói với yum install, giả sử pdftk, nó sẽ kéo theo rất nhiều phụ thuộc:

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 sẽ chỉ loại bỏ gói đó và không phải tất cả các phụ thuộc.

Nhưng bạn có thể xem tất cả các 'giao dịch' (cài đặt, xóa, v.v.):

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

Và sau đó bạn có thể hoàn tác giao dịch đó:

$ 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!

14
+1 Giải pháp tuyệt vời và rất dễ thực hiện. Tôi chưa bao giờ nghe nói về yum history. Cảm ơn!
Stefan Lasiewski

8
Và nếu 89 phụ thuộc vào java_cup hoặc libgcj thì sao?
WernerCD

2
Đây không phải là một câu trả lời được chấp nhận?
Celdor

61

Bắt đầu từ Fedora 18, bạn chỉ cần sử dụng lệnh này

yum autoremove

hoặc là

yum remove --setopt=clean_requirements_on_remove=1

Bạn cũng có thể áp dụng lệnh autoremove với gói cụ thể

yum autoremove <package>

Mà sẽ loại bỏ các phụ thuộc không cần thiết từ gói cài đặt đó. autoremoverất nhiều bí danh remove --setopt=clean_requirements_on_remove=1nhưng vì một số lý do, vẫn không có giấy tờ.


5
lệnh yum remove --setopt=clean_requirements_on_remove=1hoạt động với tôi trong centOS
BMW

Đối với tôi, package-cleanup --leaves && yum autoremovelibvorbis đã bị xóa và do đó làm cho ứng dụng "Ices" phát trực tuyến qua internet bị chết - có lẽ vì nó không có trong repos và tôi phải biên dịch nó.
Nakilon

Lệnh cũng yum autoremovehoạt động trên CentOS 7.6.
Scrutari

yum autoremove không thể xóa 4 nhân cũ trên CentOS 7
user1133275

5

Tôi trả lời larsks một bước xa hơn.

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

Điều này lấy tất cả các phụ thuộc có thể được loại bỏ mà không ảnh hưởng đến bất cứ điều gì khác và sau đó loại bỏ chúng. Tốt hơn là đi qua từng cái một.

"-q" hữu ích trên một số hệ thống có in "Thiết lập yum" nếu không, khiến lệnh này sẽ loại bỏ yum. Và đó không phải là điều bạn muốn.


2
package-cleanupxuất ra "Thiết lập yum" trên máy của tôi, dẫn đến việc Yum tự xóa. Bây giờ tôi đang cố gắng tìm ra cách sắp xếp thứ này.
Paul Lammertsma

@PaulLammertsma chỉ cần thêm -qtùy chọn để dọn dẹp gói. Điều này cũng xảy ra với tôi: D
Ealhad

1
package-cleanup -q --leaves | xargs -r -l1 yum -y removesẽ âm thầm bỏ qua xargs nếu đầu ra dọn dẹp gói trống, hữu ích cho các tập lệnh tự động như ansible, đầu bếp, con rối, mơ hồ
Ilya Sheershoff

đây là câu trả lời.
xCigsus

1

Trong Fedoras mới hơn với dnf, bạn có thể sử dụng dnf repoquery --unneededthay thế cho package-cleanup --leaves.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.