yum에 패키지가 설치되어 있는지 정확하게 확인하는 방법은 무엇입니까?


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지금 막 알아 냈다 . 그것은 또한 당신의 명령과 동일합니까?
— 체크섬

패키지가 설치된 경우에만 종료 A0이 올바른 AFAIK입니다.
— plasmid87

나는 이것이 효과가 있다고 생각합니다. 그리고 나는 단일 라인 솔루션을 좋아합니다. : D
— checksum

올바른 명령은 와일드 카드를 사용한다고 생각합니다. yum list installed bind*
— Alejandro Angelico

2
@NoahSussman 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)은 깨끗한 종료 상태를 반환하고 yum솔루션이 수행하는 것처럼 원격 URL을 호출 할 필요가 없으므로 허용되는 답변이어야합니다 .
— 노아 서스 먼

1
@NoahSussman 종료 코드는 내가 생각할 수있는 모든 예제 (0 = 설치, 1 = 설치되지 않음 / 오류)에서 동일한 동작을 수행 yum하고 rpm따르므로 다른 종료 코드가 표시되는지 알고 있으면 유용합니다. 네트워크 액세스를 방지하기 위해 캐시를 사용에 대한 위의 내 대답을 살펴 보시기 바랍니다
— plasmid87

@ plasmid87 나는 yum -Cyum이 네트워크 호스트에 연락하는 데 여분의 시간을 소비하는 것을 막기 위해 사용할 수 있다는 것을 몰랐다 . 감사합니다. 이제 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 태그 아래에 installed가 설치되어 있으면 설치됩니다. 그렇지 않으면 사용 가능한 저장소가 나열됩니다.
— Fred the Magic Wonder Dog

결과적으로 로컬 컴퓨터 에서 무슨 일이 일어나고 있는지 확인하기 만하면 원격 yum 리포지토리에 연결할 수 있습니다.
— 노아 서스 먼

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


결과적으로 로컬 컴퓨터 에서 무슨 일이 일어나고 있는지 확인하기 만하면 원격 yum 리포지토리에 연결할 수 있습니다.
— 노아 서스 먼

1
@NoahSussman은 로컬 컴퓨터에 현재 설치된 모든 패키지를 표시합니다 yum list installed. 거기에서 grep명령을 사용하여 찾고있는 것에 대한보다 정확한 답변을 얻을 수 있습니다 . 또한 특정 패키지를 확인하려면 명령에 추가 할 수 있습니다 (예 : Ex) php70w. yum list installed php70w설치된 패키지에 정보를 표시하거나 반환No matching Packages to list
— domdambrogia

-1

Python 코드를 사용하여 yum을 사용하여 패키지가 Python에 설치되어 있는지 확인하십시오.

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

이러면 안되나요 not in?
— 인바 로즈

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

결과가 0이면 패키지가 설치된 것입니다


rpm -q bindJohn의 답변에 표시된 솔루션 과 비교할 때 매우 느립니다 .
— 노아 서스 먼

아마도 사용하는 yum -C ...것이 빠를 것이지만 .
— 노아 서스 먼
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.