Bagaimana cara memeriksa secara akurat apakah paket diinstal dalam yum?

56

Saya terus mendapat jawaban seperti:

yum list installed | grep bind

atau

rpm -qa | grep bind

Tapi itu tidak akurat karena saya mendapatkan daftar beberapa paket bind lainnya seperti ini:

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

Bukan itu yang saya inginkan. Sebagai gantinya saya ingin memeriksa secara akurat apakah paket bind core telah diinstal. Misalnya.bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

Saya berharap untuk sesuatu seperti:

yum check installed bind

Tapi semoga seseorang bisa menjelaskan.

checksum
sumber

Jawaban:

61

Sudahkah Anda mencoba ini?

$ yum list installed bind
plasmid87
sumber
Saya mendapatkan Error: No matching Packages to listdan $?mengembalikan 1, dan ketika saya mencoba yum list installed bind-libs, $?mengembalikan 0. Yang seharusnya sejauh ini benar. Bisakah saya menyimpulkan dengan aman perintah Anda secara akurat menentukan paket diinstal? Saya memang mencari tahu rpm -q bindsekarang. Apakah itu sesuai dengan perintah Anda juga?
checksum
Itu benar AFAIK, keluar kode 0 hanya jika paket diinstal.
plasmid87
Saya pikir ini berhasil. Dan saya suka solusi garis tunggal .
D
Saya pikir perintah yang benar adalah dengan wildcard: yum list installed bind*
Alejandro Angelico
2
@NoahSussman Anda dapat mencoba yum -C list installed bindmenghindari jaringan. Ini membuat semua plugin tetap aktif (untuk berjaga-jaga jika Anda memiliki sesuatu yang eksotis yang memengaruhi pencarian di yumdb) dan juga memberi tahu Anda repo tempat paket itu diinstal
plasmid87
13

Ada cara yang lebih mudah untuk mengeluarkan kueri ini: rpm -qa | grep bindatau rpm -q bind. Yang pertama adalah yang terbaik jika Anda tidak sepenuhnya yakin dengan nama paket.

John
sumber
4
+1 untuk rpm -q $packageSaya percaya ini adalah yang tercepat dan solusi, karena melakukan apa pun dengan yummungkin memaksa pembaruan cache (biasanya lambat).
Alex S
Solusi ini (menggunakan rpm) harus menjadi jawaban yang diterima karena mengembalikan status keluar yang bersih dan tidak perlu memanggil ke sekelompok URL jauh seperti yumsolusi.
Noah Sussman
1
@NoahSussman Kode keluar untuk yumdan rpmmengikuti perilaku yang sama dalam semua contoh yang dapat saya pikirkan (0 = diinstal, 1 = tidak diinstal / kesalahan) sehingga akan berguna untuk mengetahui apakah Anda melihat kode keluar yang berbeda. Silakan lihat respons saya di atas mengenai penggunaan cache untuk menghindari akses jaringan
plasmid87
@ plasmid87 Saya tidak tahu saya bisa menggunakan yum -Cuntuk mencegah yum menghabiskan semua waktu ekstra menghubungi host jaringan. Terima kasih, saya sekarang melihat bagaimana yum dan rpm dapat digunakan secara bergantian di sini !!
Noah Sussman
9

Parsing hasil dari perintah ini adalah jawaban yang paling lengkap. Anda harus mengetahui nama paket yang tepat.

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.
Fred Anjing Ajaib Ajaib
sumber
2
Hmm, bukankah memberi tahu saya binditu tersedia / paket yum yang valid alih-alih memberi tahu saya jika sudah diinstal?
checksum
2
Itu tidak jelas, tetapi jika diinstal terdaftar di bawah tag Repo, itu diinstal. Kalau tidak, itu akan daftar repo yang tersedia dari.
Fred the Magic Wonder Dog
Ini menghasilkan koneksi ke repositori yum jarak jauh ketika yang saya inginkan adalah melihat apa yang terjadi pada mesin lokal saya .
Noah Sussman
1

Liner terbaik yang saya buat untuk melakukan ini (yang bagus untuk digunakan dengan cepat dalam skrip) adalah:

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

Misalnya: jika saat ini saya telah gitmenginstal:

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

Ini akan kembali installed

Jika saya saat ini tidak telah gitdiinstal bahwa perintah sebelumnya yang sama akan kembali: base/7/x86_64yang merupakan instalasi saat ini tersedia untukgit

domdambrogia
sumber
Ini menghasilkan koneksi ke repositori yum jarak jauh ketika yang saya inginkan adalah melihat apa yang terjadi pada mesin lokal saya .
Noah Sussman
1
@NoahSussman untuk mendaftar semua paket yang diinstal saat ini pada mesin lokal Anda yang dapat Anda gunakan yum list installed. Dari sana Anda dapat menggunakan grepperintah untuk mendapatkan jawaban yang lebih tepat untuk apa yang Anda cari. Juga jika Anda ingin memeriksa paket tertentu Anda dapat menambahkan bahwa untuk perintah Anda - Ex: php70w. yum list installed php70wakan mencantumkan info pada paket yang diinstal atau kembaliNo matching Packages to list
domdambrogia
-1

Gunakan kode Python untuk memeriksa apakah suatu paket diinstal dalam python menggunakan yum:

def is_installed(package_name):
    return "not installed" in commands.getstatusoutput("rpm -q " + package_name)[1]
Eric Leschinski
sumber
bukankah ini seharusnya not in?
Inbar Rose
-2
yum list installed bind >/dev/null ; echo $?

Jika hasilnya 0 (nol) paket diinstal

Tom Emerson
sumber
Ini sangat lambat dibandingkan dengan rpm -q bindsolusi yang ditunjukkan dalam jawaban John.
Noah Sussman
Meskipun mungkin menggunakan yum -C ...akan lebih cepat.
Noah Sussman