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.