วิธีการตรวจสอบอย่างถูกต้องว่ามีการติดตั้งแพคเกจในยัม?


56

ฉันได้รับคำตอบเช่นนี้ต่อไป:

yum list installed | grep bind

หรือ

rpm -qa | grep bind

แต่นั่นไม่ถูกต้องเนื่องจากฉันได้รับรายชื่อแพ็คเกจผูกอื่น ๆ สองสามอย่างเช่น:

bind-utils-9.8.2-0.17.rc1.el6_4.5.x86_64
rpcbind-0.2.0-11.el6.x86_64
bind-libs-9.8.2-0.17.rc1.el6_4.5.x86_64
samba-winbind-3.6.9-151.el6.x86_64
samba-winbind-clients-3.6.9-151.el6.x86_64
ypbind-1.20.4-30.el6.x86_64

นั่นไม่ใช่ฉันต้องการ แต่ฉันต้องการตรวจสอบอย่างถูกต้องว่ามีการติดตั้งแพ็คเกจหลักหรือไม่ เช่น.bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

ฉันหวังว่าจะชอบ:

yum check installed bind

แต่หวังว่าใครบางคนสามารถหลั่งน้ำตาแสง

คำตอบ:


61

คุณเคยลองสิ่งนี้หรือไม่?

$ yum list installed bind

ฉันได้รับError: No matching Packages to listและ$?ส่งกลับที่ 1 และเมื่อฉันพยายามyum list installed bind-libs, $?กลับ 0 ซึ่งควรจะเป็นที่ถูกต้องเพื่อให้ห่างไกล ฉันสามารถสรุปได้อย่างปลอดภัยว่าคำสั่งของคุณถูกต้องว่ามีการติดตั้งแพคเกจหรือไม่ ฉันrpm -q bindเพิ่งทราบตอนนี้ มันเทียบเท่ากับคำสั่งของคุณด้วยหรือไม่
เช็คซัม

นั่นคือ AFAIK ที่ถูกต้องรหัสออก 0 เท่านั้นหากมีการติดตั้งแพ็คเกจ
plasmid87

ฉันคิดว่ามันใช้งานได้ และฉันชอบโซลูชันบรรทัดเดียว
D

ฉันคิดว่าคำสั่งที่ถูกต้องอยู่ใน wildcard: yum list installed bind*
Alejandro Angelico

2
@NahahSussman คุณสามารถพยายามyum -C list installed bindหลีกเลี่ยงเครือข่าย สิ่งนี้จะช่วยให้ปลั๊กอินทั้งหมดเปิดใช้งาน (ในกรณีที่คุณมีสิ่งแปลกใหม่ที่มีผลต่อการค้นหาใน yumdb) และยังบอกให้คุณทราบว่าแพคเกจที่ติดตั้งจาก repo ได้รับการติดตั้งแล้ว
plasmid87

13

มีวิธีที่ง่ายมากในการออกแบบสอบถามนี้เป็น: หรือrpm -qa | grep bind rpm -q bindอดีตคือดีที่สุดหากคุณไม่แน่ใจชื่อแพคเกจอย่างสมบูรณ์


4
+1 สำหรับrpm -q $packageฉันเชื่อว่านี่เป็นวิธีที่เร็วที่สุดและวิธีแก้ปัญหาเนื่องจากการทำสิ่งใดก็ตามyumอาจบังคับให้มีการอัปเดตแคช (มักจะช้า)
Alex S

โซลูชันนี้ (ใช้rpm) ควรเป็นคำตอบที่ยอมรับได้เนื่องจากจะส่งคืนสถานะการออกใหม่ทั้งหมดและไม่จำเป็นต้องโทรออกไปยัง URL ระยะไกลจำนวนมากเนื่องจากyumโซลูชันทำ
Noah Sussman

1
@NoahSussman รหัสทางออกสำหรับyumและrpmติดตามการทำงานที่เหมือนกันในตัวอย่างทั้งหมดที่ฉันคิดได้ (0 = ติดตั้ง, 1 = ไม่ได้ติดตั้ง / ผิดพลาด) ดังนั้นมันจะมีประโยชน์ที่จะรู้ว่าถ้าคุณเห็นรหัสทางออกที่แตกต่างกัน โปรดดูคำตอบของฉันด้านบนเกี่ยวกับการใช้แคชเพื่อหลีกเลี่ยงการเข้าถึงเครือข่าย
ลาสมิด 87

@ plasmid87 ฉันไม่ทราบว่าฉันสามารถใช้yum -Cเพื่อป้องกัน yum จากการใช้เวลาทั้งหมดที่ติดต่อโฮสต์เครือข่าย ขอบคุณตอนนี้ฉันเห็นว่า yum และ rpm สามารถใช้แทนกันได้ที่นี่ !!
โนอาห์ซัสแมน

9

การแยกผลลัพธ์ของคำสั่งนี้เป็นคำตอบที่สมบูรณ์ที่สุด คุณจะต้องรู้ชื่อแพ็คเกจที่แน่นอน

yum info bind

Loaded plugins: refresh-packagekit, rhnplugin
This system is receiving updates from RHN Classic or RHN Satellite.
Installed Packages
Name        : bind
Arch        : x86_64
Epoch       : 32
Version     : 9.8.2
Release     : 0.17.rc1.el6_4.6
Size        : 7.3 M
Repo        : installed
From repo   : rhel-x86_64-workstation-6
Summary     : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
URL         : http://www.isc.org/products/BIND/
License     : ISC
Description : BIND (Berkeley Internet Name Domain) is an implementation of the DNS
        : (Domain Name System) protocols. BIND includes a DNS server (named),
        : which resolves host names to IP addresses; a resolver library
        : (routines for applications to use when interfacing with DNS); and
        : tools for verifying that the DNS server is operating properly.

2
อืมการบอกฉันbindไม่พร้อมใช้งาน / แพ็คเกจ yum ที่ถูกต้องแทนที่จะบอกฉันว่ามีการติดตั้งหรือไม่
เช็คซัม

2
ไม่ชัดเจน แต่ถ้าติดตั้งอยู่ในรายการภายใต้แท็ก Repo ก็จะติดตั้ง มิฉะนั้นจะแสดงรายการซื้อคืนที่มีให้
Fred the Magic Wonder Dog

ผลลัพธ์นี้เชื่อมต่อกับ repos yum ระยะไกลเมื่อทั้งหมดที่ฉันต้องการคือการเห็นสิ่งที่เกิดขึ้นในเครื่องท้องถิ่นของฉัน
Noah Sussman

1

ซับที่ดีที่สุดอย่างหนึ่งที่ฉันใช้ในการทำสิ่งนี้ (ซึ่งยอดเยี่ยมสำหรับการใช้อย่างรวดเร็วในสคริปต์) คือ:

yum info <package_name> | grep Repo | awk '{ print $3 }'

ตัวอย่างเช่น: ถ้าฉันgitติดตั้งอยู่ในปัจจุบัน:

yum info git | grep Repo | awk '{ print $3 }'

สิ่งนี้จะกลับมา installed

หากปัจจุบันฉันยังไม่ได้gitติดตั้งคำสั่งก่อนหน้าเดียวกันนั้นจะกลับมา: base/7/x86_64ซึ่งเป็นการติดตั้งปัจจุบันที่ใช้ได้สำหรับgit


ผลลัพธ์นี้เชื่อมต่อกับ repos yum ระยะไกลเมื่อทั้งหมดที่ฉันต้องการคือการเห็นสิ่งที่เกิดขึ้นในเครื่องท้องถิ่นของฉัน
Noah Sussman

1
@NoahSussman เพื่อแสดงรายการแพ็กเกจทั้งหมดที่ติดตั้งในเครื่องท้องถิ่นของคุณที่คุณสามารถyum list installedใช้ได้ จากตรงนั้นคุณสามารถใช้grepคำสั่งเพื่อรับคำตอบที่แม่นยำยิ่งขึ้นสำหรับสิ่งที่คุณกำลังมองหา นอกจากนี้หากคุณต้องการที่จะตรวจสอบเฉพาะแพคเกจที่คุณสามารถเพิ่มที่คำสั่งของคุณ - php70wEx: yum list installed php70wจะแสดงรายการข้อมูลบนแพ็คเกจที่ติดตั้งหรือส่งคืนNo matching Packages to list
domdambrogia

-1

ใช้รหัส Python เพื่อตรวจสอบว่ามีการติดตั้งแพ็คเกจใน python โดยใช้ yum หรือไม่:

def is_installed(package_name):
    return "not installed" in commands.getstatusoutput("rpm -q " + package_name)[1]

ไม่ควรเป็นเช่นนี้not in?
Inbar Rose

-2
yum list installed bind >/dev/null ; echo $?

หากผลลัพธ์เป็น 0 (ศูนย์) แพ็คเกจจะถูกติดตั้ง


นี่ช้ามากเมื่อเปรียบเทียบกับrpm -q bindวิธีแก้ปัญหาที่แสดงในคำตอบของ John
Noah Sussman

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