แสดงรายการแพ็กเกจ RPM ทั้งหมดที่ติดตั้งจาก repo“ X”


44

ฉันจะรับรายการแพ็คเกจ RPM ทั้งหมดที่ติดตั้งบนระบบของฉันจาก repo เฉพาะ (เช่น "epel") ได้อย่างไร

คำตอบ:


45

CentOS / RHEL / Fedora 22 ขึ้นไป

yum list installed | grep @epel

Fedora 23 หรือใหม่กว่า

dnf list installed | grep @epel

8
สิ่งนี้จะไม่ทำงาน ยำจะเอาท์พุทสายไปยังท่อที่จะแตกถ้าพวกเขาได้รับนานเกินไป ดังนั้นอินพุตของ grep จึงเป็นส่วนใหญ่หนึ่งบรรทัดต่อแพ็คเกจ แต่อาจเป็นสองบรรทัด ยำอาจผ่าน "whizbanger.x86_64 ___ 3.8.4-2.el6 _______________ @epel" (ลองจินตนาการว่าขีดเส้นใต้เป็นช่องว่าง) "@epel" อยู่ในบรรทัดถัดไปของ grep อินพุตที่เห็น ดังนั้น grep จะส่งเอาต์พุตบรรทัดนั้นโดยไม่มีอะไรเลยนอกจาก "@epel" แต่ไม่ใช่บรรทัดก่อนหน้าที่มีชื่อแพ็คเกจ
ทอดด์วอลตัน

คุณอาจต้องเรียกใช้คำสั่งเหล่านั้นในฐานะรูทจนกว่าbugzilla.redhat.com/show_bug.cgi?id=1525645จะได้รับการแก้ไข
proski

ดูเหมือนว่าคำสั่ง yum จะไม่ทำงานหาก repos หนึ่งมีปัญหา ฉันต้องการรายการนี้เพื่อดูว่าฉันต้องการที่จะปิดการใช้งาน repo กับปัญหา
Jayen

@Todd Watson ฉันรู้ว่ามันเป็นแฮ็ค แต่สิ่งที่เกี่ยวกับ "ส่งออก COLUMNS = 999 yum ... "
Massimo

@Massimo ใช้งานได้ไหม นั่นจะเป็นการแก้ปัญหาที่ดี ฉันยังพบคำถาม Unix StackExchange นี้: unix.stackexchange.com/questions/308731/…
Todd Walton

17

จาก RHEL6 ดังที่แนะนำไว้ในคำตอบของ stackoverflow นี้มีวิธีการที่ละเอียดยิ่งขึ้นในการทำสิ่งนี้ด้วยyumdb:

yumdb search from_repo REPOID*

repoid นั้นใช้ไวลด์การ์ด

พริตตี้พิมพ์

หากเรากำลังจะโกงและส่งออกท่อเราก็สามารถสร้างเอฟเฟกต์สวย ๆ ได้เช่นกัน นี่คือหนึ่งในการใช้awk

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

ใช้egrepหรือgrep -e

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

list_ALL_AVAILABLE_from_repo

หากต้องการแสดงรายการแพ็กเกจที่มีอยู่ทั้งหมดในที่เก็บข้อมูลที่ระบุให้ทำ:

repoquery -a --repoid=REPONAME

เพียงหมายเหตุด้านข้าง: ในการแสดงรายการแพ็คเกจทั้งหมดจาก repo ที่ระบุให้ทำrepoquery -qa --repoid=REPONAME
ILMostro_7

2
นี่เป็นคำตอบที่ดีเช่นกัน เอาต์พุตยาวกว่าคำตอบที่ยอมรับ แต่จัดรูปแบบในทางที่ดีขึ้น
Routhinator

สามารถลดความซับซ้อนลงได้repoquery -a --repoid=REPONAMEเนื่องจากตาม-qตัวเลือกman page นั้นเป็นไปเพื่อความเข้ากันได้ rpmquery ไม่ได้ทำอะไรเลย
Rockallite

@Rockallite ถูกต้อง; สำหรับ dnf ความ-qaล้มเหลวจริง ฉันไม่สามารถโหวตความคิดเห็นได้เนื่องจากการลบ upvote ก่อนหน้านี้ :( ฉันกำลังอัปเดตคำตอบเพื่อสะท้อนความเห็นนั้น
ILMostro_7

11
dnf repo-pkgs <repoid> list installed

หมายเหตุ

คำสั่งดังกล่าวใช้DNF to list <repoid>แพคเกจติดตั้งจาก หมายเหตุเป็นเพียงนามแฝงของrepo-pkgsrepository-packages

จากmanหน้า:

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

อ่านเพิ่มเติม:

man dnf

3

Grepping yum output เป็นวิธีที่ชัดเจนที่สุด:

yum list installed | grep @epel

อย่างไรก็ตามคุณไม่สามารถแสดงคุณสมบัติของแพ็คเกจเพิ่มเติมและเป็นการยากที่จะแยกวิเคราะห์ด้วยสคริปต์ เครื่องมือrepoqueryจากแพ็คเกจyum-utilsเป็นเครื่องมือ แต่ไม่ได้ติดตั้งตามค่าเริ่มต้น

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

และตัวอย่างที่ซับซ้อนมากขึ้น:

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

2

เซิร์ฟเวอร์ RHEL 7.5 (Maipo)

yum repo-pkgs <repoid> list installedสามารถนำมาใช้เพื่อดึงข้อมูลเดียวกับyumdb search from_repo <repoid>แต่ในรูปแบบที่แตกต่างกัน

# 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ผลลัพธ์:

# 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

คุณสามารถตรวจสอบVendorส่วนหัวของ rpms ที่ติดตั้ง

ตัวอย่างนี้แสดงรายการแพ็กเกจทั้งหมดจากที่เก็บVideoLAN :

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

เห็นได้ชัดว่าคุณต้องตรวจสอบว่าVendorส่วนหัวของพื้นที่เก็บข้อมูลของคุณไม่ซ้ำกันในที่เก็บที่แตกต่างกัน


3
ไม่มีการแมปแบบหนึ่งต่อหนึ่งระหว่างผู้ขายและ repos และในบางกรณีสตริงผู้ขายจะว่างเปล่า
Lorin Hochstein

1

สำหรับผู้ที่ต้องการหาที่เก็บที่ขาดหายไป:

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

สิ่งนี้จะส่งคืนที่เก็บทั้งหมดที่คุณติดตั้งแพ็กเกจ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.