Làm cách nào tôi có thể xóa Gói mồ côi ở Fedora?


42

Tôi vừa chuyển từ Ubuntu sang Fedora14. Trong Ubuntu, chúng tôi đã có apt-get autoremoveđiều cần loại bỏ các gói mồ côi / không sử dụng. Đối tác trong Fedora là gì?

Câu trả lời:


36

package-cleanup --quiet --leavestừ gói yum-utils sẽ liệt kê các gói thư viện không dựa vào các gói khác. Thật không may, nó có xu hướng hơi quá. Trên hệ thống của tôi, ví dụ, nó đề nghị loại bỏ libvirt. Thêm --exclude-binđối số giúp. Nếu bạn hài lòng với đề xuất của mình, thì để dọn dẹp các gói, hãy làm:

# package-cleanup --quiet --leaves --exclude-bin | xargs yum remove -y

1
Đã kiểm tra nó sau khi cài đặt và gỡ bỏ netbeans-platformvà dọn dẹp gói liệt kê một số nội dung nhưng thực tế không có netbeans-platformphụ thuộc nào được cài đặt trước đó (sử dụng Fedora 17).
maxschlepzig

2
Không hoạt động, như được chỉ ra bởi @maxschlepzig
c0da

30

DNF, sự thay thế yum kể từ Fedora 22, cũng cung cấp một autoremovetiểu ban được mô hình hóa sau autoremove apt-get / yum.

Ví dụ:

# dnf autoremove

trong đó cố gắng loại bỏ tất cả các gói phụ thuộc được cài đặt tự động và các gói phụ thuộc không được sử dụng - sẽ tương đương với apt-get autoremove.

# dnf autoremove examplepackage

trong đó loại bỏ gói phần mềm và tất cả các phụ thuộc được cài đặt tự động (và nếu không sử dụng).

Yum

Yum có lệnh autoremove kể từ Fedora 19, và nó được ghi nhận từ Fedora 20 / RHEL 7.

Việc sử dụng tương tự như việc thực hiện dnf, ví dụ:

# yum autoremove

hoặc là

# yum autoremove examplepackage

Thay đổi hành vi của yum loại bỏ

Yum hỗ trợ tùy chọn cấu hình để thay đổi hành vi mặc định của removetiểu ban (ví dụ: qua /etc/yum.conf):

clean_requirements_on_remove=yes

yum.conf (5)

Khi điều này được đặt, tiếp theo yum removecũng cố gắng loại bỏ các phụ thuộc được cài đặt tự động nếu các gói khác không cần thiết.

Bạn cũng có thể tạm thời kiểm tra tùy chọn này thông qua một cái gì đó như:

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage

Giải pháp cho phiên bản Fedora cũ

(Đối với các phiên bản Fedora nơi tiểu ban yoremove không có sẵn và / hoặc clean_requirements_on_removekhông hoạt động.)

Mặc dù trong quá trình cài đặt các gói phụ thuộc được cài đặt được đánh dấu như vậy (dường như là tính năng tương đối mới của vòng / phút).

Bạn có thể tìm thấy các phụ thuộc không cần thiết thông qua:

$ package-cleanup --leaves -q --all \
    | xargs repoquery --installed --qf '%{nvra} - %{yumdb_info.reason}' \
    | grep -- '- dep' \
    | cut -d' ' -f1 > tmp

Dòng lệnh này được lấy cảm hứng từ kịch bản của fenris02 .

Sau khi kiểm tra tmp(và có lẽ giám tuyển), bạn có thể xóa chúng thông qua một cái gì đó như thế này:

# xargs yum remove < tmp

Nó đã báo lỗi "lý do yumdb không hợp lệ 'lý do' cho pkg đã cài đặt: adobe-release-x86_64-1.0-1.noarch". Bây giờ là gì
c0da

@ c0da, tôi đoán rằng tính năng mà yum ghi lại trong cơ sở dữ liệu của nó là 'lý do' cài đặt (ví dụ: 'hoặc' người dùng ') cho mỗi gói là tương đối mới. Có lẽ ví dụ Fedora của bạn có trước khi giới thiệu tính năng đó sao cho bạn vẫn còn (một vài) gói cũ được cài đặt mà không có thẻ đó được đặt.
maxschlepzig

Tôi đã cài đặt Fedora 18 một vài ngày trước. Vì vậy, tôi nghĩ rằng thẻ yêu cầu nên có ở đó.
c0da

1
@ c0da, có lẽ 'lý do' không được ghi lại vì bạn đã cài đặt gói adobe-releasequayum localinstall
maxschlepzig

16

bạn cần cài đặt plugin yum "remove-with-leaf":

# yum install yum-plugin-remove-with-leaves.noarch

Một lần được cài đặt:

# yum remove --remove-leaves package

chúc may mắn!


3
và làm thế nào để chạy nó cho tất cả các ứng dụng đã cài đặt?
cnd

Có vẻ như cũng không đáng tin lắm: skvidal.wordpress.com/2010/11/09/orphaned-dep-cleanup-in-yum
maxschlepzig

1
RHEL / CentOS / Oracle Linux 6 cần yum-plugin-remove-with-leaves.noarchgói được cài đặt để sử dụngpackage-cleanup
Terry Wang

8
# package-cleanup --orphans >/tmp/junk

chỉnh sửa /tmp/junktập tin và xóa dòng đầu tiên là thông tin từ dòng lệnh nhập như sau:

for file in `cat /tmp/junk`
do
  yum remove $file
done

1
gói dọn dẹp (1) nói: '- Định dạng liệt kê các gói đã cài đặt không có sẵn từ kho lưu trữ được cấu hình hiện tại.' Điều này không tương đương với những gì apt-get autoremovekhông. apt-get (8) nói: 'autoremove được sử dụng để loại bỏ các gói được cài đặt tự động để đáp ứng sự phụ thuộc cho một số gói và không còn cần thiết nữa.'
maxschlepzig

1
Không hoạt động! Tôi đã bị nhầm lẫn trước đây. Cảm ơn @maxschlepzig
c0da

Cái này dùng để làm việc cho tôi nhưng trong CentOS 6.6 nó thực sự liệt kê tất cả các gói đã cài đặt, không chỉ là trẻ mồ côi.
Gaia

4

LƯU Ý: Câu trả lời này là đúng nhưng chỉ áp dụng cho RHEL 7+ và Fedora 20+ (trong đó chế độ tự động đã được thêm dưới dạng một tính năng mới).

# yum autoremove

Chỉ cần xác nhận để loại bỏ các gói đã chọn.


0

Dựa trên câu trả lời của Larry Mohr :

package-cleanup --orphans | sed '1d' | sed '/^ * /d' | sed '/Loading mirror speeds from cached hostfile/d' | xargs sudo yum remove

(Bao gồm bỏ qua cho gương nhanh nhất, nếu bạn tự hỏi.)


0

Trong Fedora, gói mồ côi có nghĩa là không có bản cập nhật ứng cử viên nào để cập nhật!

  1. Nếu các gói mồ côi được tạo ra bởi bạn vô hiệu hóa yum.repos.d / some.conf.

    yum distro-sync
    
  2. Các gói mồ côi khác, lệnh có thể nguy hiểm.

    yum remove $(package-cleanup --orphans)
    

    hoặc, chỉ cần sử dụng lệnh an toàn.

    yum remove name-of-page
    

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.