Liệt kê tất cả các gói RPM được cài đặt từ repo


44

Làm cách nào tôi có thể nhận được danh sách tất cả các gói RPM đã được cài đặt trên hệ thống của tôi từ một repo cụ thể (ví dụ: "epel")?

Câu trả lời:


45

CentOS / RHEL / Fedora 22 hoặc sớm hơn

yum list installed | grep @epel

Fedora 23 trở lên

dnf list installed | grep @epel

8
Điều này sẽ không hoạt động. Yum sẽ xuất các đường dẫn đến đường ống sẽ bị hỏng nếu chúng quá dài. Vì vậy, đầu vào của grep chủ yếu là một dòng trên mỗi gói, nhưng nó có thể là hai dòng. Yum có thể vượt qua "whizbanger.x86_64 ___ 3.8.4-2.el6 _____________ @epel". (Hãy tưởng tượng các dấu gạch dưới là khoảng trắng.) "@Epel" nằm trên dòng tiếp theo của grep đầu vào nhìn thấy. Vì vậy, grep sẽ xuất ra dòng đó không có gì ngoài "@epel" nhưng không phải là dòng trước với tên gói.
Todd Walton

Bạn có thể cần chạy các lệnh đó với quyền root cho đến khi bugzilla.redhat.com/show_orms.cgi?id=1525645 được sửa.
proski

lệnh yum dường như không hoạt động nếu một repos có vấn đề. tôi cần danh sách này để xem nếu tôi muốn vô hiệu hóa repo với các vấn đề.
Jayen

@Todd Watson Tôi biết, đó là một bản hack, nhưng còn "xuất khẩu COLUMNS = 999 yum ..."
Massimo

Nó có hoạt động không, @Massimo? Đó sẽ là một cách giải quyết tốt đẹp. Tôi cũng tìm thấy câu hỏi Unix StackExchange này: unix.stackexchange.com/questions/308731/ mẹo
Todd Walton

17

Kể từ RHEL6, như được đề xuất trong câu trả lời stackoverflow này , có một phương pháp kỹ lưỡng hơn để làm điều này với yumdb:

yumdb search from_repo REPOID*

Các repoid mất thẻ hoang dã.

In đẹp

Nếu chúng ta sẽ gian lận và dẫn đầu ra, thì chúng ta cũng có thể đạt được hiệu ứng in đẹp. Đây là một trong những sử dụngawk

yumdb search from_repo REPOID* |awk -F"\n" '{ RS=""; print $1 }'

Sử dụng egrephoặcgrep -e

yumdb search from_repo REPOID* |egrep -v '(from_repo|^$)'

list_ALL_AVAILABLE_from numpo

Để liệt kê tất cả các gói có sẵn trong một kho lưu trữ được chỉ định, hãy làm:

repoquery -a --repoid=REPONAME

Chỉ là một lưu ý phụ: Để liệt kê tất cả các gói từ một repo được chỉ định, hãy làmrepoquery -qa --repoid=REPONAME
ILMostro_7

2
Đây cũng là một câu trả lời tuyệt vời. Đầu ra dài hơn câu trả lời được chấp nhận, nhưng nó được định dạng theo cách đẹp hơn.
Routhinator

Có thể được đơn giản hóa repoquery -a --repoid=REPONAMEvì theo -qtùy chọn trang man là để tương thích với vòng / phút, không làm gì cả.
Rockallite

@Rockallite là đúng; Đối với dnf, -qathực sự thất bại. Tôi không thể đưa ra nhận xét do đã xóa upvote trước đó :( Tôi đang cập nhật câu trả lời để phản ánh điều đó.
ILMostro_7

11
dnf repo-pkgs <repoid> list installed

Ghi chú

Lệnh trên sử dụng DNF để liệt kê các gói được cài đặt từ <repoid>. Lưu ý repo-pkgschỉ là một bí danh của repository-packages.

Từ các mantrang:

man dnf | grep "repository-packages.*list.*installed" -A 1

Đọc thêm:

man dnf

3

Cắt đầu ra của yum là cách rõ ràng nhất:

yum list installed | grep @epel

Tuy nhiên, bạn không thể hiển thị các thuộc tính gói bổ sung và thật khó để phân tích cú pháp. Công cụ repoquerytừ gói yum-utilslà công cụ, nhưng nó không được cài đặt theo mặc định.

repoquery -a --installed --qf "%{ui_from_repo} %{name}" | grep '^@epel'

và một ví dụ phức tạp hơn:

repoquery -a --installed --qf "%-20{ui_from_repo} %-30{name} %-7{arch} %{epoch}:%-12{version} %-4{release}" | grep '^@epel'

2

Máy chủ RHEL 7.5 (Maipo)

yum repo-pkgs <repoid> list installedcó thể được sử dụng để truy xuất thông tin giống như yumdb search from_repo <repoid>, nhưng ở một định dạng khác.

# yum help repo-pkgs
repo-pkgs <repoid> <list|info|install|remove|upgrade|reinstall*|remove-or-*> [pkg(s)]

Treat a repo. as a group of packages, so we can install/remove all of them

aliases: repo-packages, repository-pkgs, repository-packages

epelĐầu ra mẫu :

# yumdb search from_repo epel
htop-2.2.0-1.el7.x86_64
    from_repo = epel

supervisor-3.1.4-1.el7.noarch
    from_repo = epel


# yum repo-pkgs epel list installed
Installed Packages
htop.x86_64            2.2.0-1.el7          @epel
supervisor.noarch      3.1.4-1.el7          @epel

1

Bạn có thể kiểm tra Vendortiêu đề của rpms đã cài đặt.

Ví dụ này liệt kê tất cả các gói từ kho lưu trữ Videolan :

 rpm -q -a --qf "%{Name}:%{Vendor}\n" \
     | grep -F ":VideoLAN Project (http://www.videolan.org)"

Rõ ràng, bạn cần xác định xem Vendortiêu đề của kho lưu trữ của bạn là duy nhất trong số các kho lưu trữ khác nhau.


3
Không có ánh xạ một-một giữa Nhà cung cấp và repos và trong một số trường hợp, chuỗi Nhà cung cấp trống.
Lorin Hochstein

1

Đối với những người chỉ muốn tìm kho lưu trữ bị thiếu:

yum list installed | awk '{print $3}' | sort | uniq

Điều này sẽ trả về tất cả các kho lưu trữ nơi bạn có các gói được cài đặt từ đó.

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.