rpm을 "grep"하는 방법은 무엇입니까?

rpm을 "grep"하는 방법은 무엇입니까?

rpm에서 제공하는 파일을 찾는 것은 쉽습니다.

dnf provides *bin/vim

또는

yum whatprovides *bin/vim

rpm이나 yum이 설치되어 있다면.. 하지만 rpm의 정확한 파일 내용을 알고 싶다고 가정해 보겠습니다. 예를 들어

grep -ril bin/vim v*
vim-9.0.1572-1.2.ppc64.rpm

너무 쉽게

그런데 bin/sh가 포함된 정확한 패키지를 알고 싶은데 어떻게 해야 하나요? bin/sh 종속성도 있는 패키지를 반환하려면 이 명령을 사용합니다. bin/sh를 파일로 제공하는 정확한 패키지를 알고 싶습니다.

grep -ril bin/sh v*
v4l-conf-3.107-2.10.ppc64.rpm
vacation-1.2.7.1-13.3.ppc64.rpm
vim-9.0.1572-1.2.ppc64.rpm
virt-what-1.25-1.2.ppc64.rpm
vpnc-0.5.3r550-3.12.ppc64.rpm
vsftpd-3.0.5-10.1.ppc64.rpm

답변1

rpm -qf어떤 패키지가 파일을 소유하고 있는지 알려줄 것입니다.

예를 들어

% rpm -qf /bin/sh
bash-4.2.46-35.el7_9.x86_64

% rpm -qf /bin/vim
vim-enhanced-7.4.629-8.el7_9.x86_64

패키지가 설치되지 않은 경우 rpm -qlp 다음 명령을 사용하여 내용을 볼 수 있습니다.

% rpm -qlp binutils-2.27-44.base.el7.x86_64.rpm | head
/usr/bin/addr2line
/usr/bin/ar
/usr/bin/as
/usr/bin/c++filt
/usr/bin/dwp
/usr/bin/elfedit
/usr/bin/gprof
/usr/bin/ld
/usr/bin/ld.bfd
/usr/bin/ld.gold

이렇게 하면 디렉터리에 있는 모든 rpm의 내용에 대한 "인덱스" 파일을 생성한 다음 인덱스를 grep하는 것이 간단해집니다.

생각나는 예는 다음과 같습니다.

% for a in *.rpm
do
  rpm -qlp "$a" | sed "s/^/$a:/"
done > index

% grep :/usr/bin/sh index
bash-4.2.46-34.el7.x86_64.rpm:/usr/bin/sh

/bin은 /usr/bin에 대한 심볼릭 링크이므로 /usr/bin/sh를 검색해야 합니다.

답변2

질문의 첫 번째 명령과 그 변형은 *bin/<file>원하는 내용을 정확하게 제공합니다.

yum provides *bin/vim

yum provides /bin/vim

yum provides /usr/bin/vim

vim-enhanced-2:8.2.2637-20.el9_1.x86_64 : A version of the VIM editor which includes recent enhancements
Repo        : @System
Matched from:
Filename    : /usr/bin/vim

vim-enhanced-2:8.2.2637-20.el9_1.x86_64 : A version of the VIM editor which includes recent enhancements
Repo        : appstream
Matched from:
Filename    : /usr/bin/vim

yum로 교체할 수 있습니다 dnf. 패키지 설치 여부에 관계없이 패키지가 반환됩니다.

실제 설치된 패키지에 포함된 파일인 경우:

rpm -qf /bin/sh
bash-5.1.8-6.el9_1.x86_64

rpm -qf /usr/bin/vim
vim-enhanced-8.2.2637-20.el9_1.x86_64

관련 정보