특정 디렉토리에 파일이 포함된 패키지를 나열하는 방법은 무엇입니까?

특정 디렉토리에 파일이 포함된 패키지를 나열하는 방법은 무엇입니까?

다른 배포판에서 CentOS로 전환 중인데 익숙하지 않습니다 yum. 설치된 패키지 중 디렉터리에 파일이 있는지 알 수 있는 방법이 있는지 알고 싶습니다.

예를 들어, 어떤 패키지에 /usr/share/applications.

제공된 내용을 살펴보면 yum설치된 패키지를 볼 수 있는 방법(설치된 패키지 나열)이 있는 것을 알 수 있지만 제공되더라도 -q패키지 이름만 알 수는 없습니다. 그러나 개별 패키지의 내용을 나열하는 옵션은 표시되지 않습니다.

가능합니까? 어떻게 해야 하나요?

답변1

를 사용하여 이를 수행할 수 있는 방법은 없지만 원하는 대부분의 작업을 수행하는 명령을 yum만들 수 있습니다 . rpm이 옵션을 활용 --queryformat하고 를 사용해야 합니다 [..].--queryformat

노트:이러한 모든 기능은 RPM 매뉴얼에서 논의됩니다.최대 RPM: Red Hat Package Manager를 한계까지 끌어올리다.

$ rpm -qa --queryformat '[%{NAME}: %{FILENAMES}\n]' | \
    sed 's#\(/.*/\).*$#\1#' | sort -u | grep '/usr/sbin' | head -10
abrt-addon-ccpp: /usr/sbin/
abrt-addon-pstoreoops: /usr/sbin/
abrt-addon-vmcore: /usr/sbin/
abrt-dbus: /usr/sbin/
abrt: /usr/sbin/
alsa-utils: /usr/sbin/
aoetools: /usr/sbin/
at: /usr/sbin/
authconfig: /usr/sbin/
avahi-autoipd: /usr/sbin/
...

세부 사항

위의 코드는 --queryformat기호별로 매크로 배열을 반복하여 포함된 패키지 이름()과 전체 설치 경로를 인쇄합니다.%{FILENAMES}[...]%{NAME}

$ rpm -q --queryformat '[%{NAME}: %{FILENAMES}\n]' fatrace
fatrace: /usr/sbin/fatrace
fatrace: /usr/sbin/power-usage-report
fatrace: /usr/share/doc/fatrace-0.5
fatrace: /usr/share/doc/fatrace-0.5/COPYING
fatrace: /usr/share/doc/fatrace-0.5/NEWS
fatrace: /usr/share/man/man1/fatrace.1.gz

이러한 유형의 출력에서는 위 경로에서 후행 파일 이름을 제거하기만 하면 됩니다. 이를 위해 sed. 마지막으로 특정 디렉터리에서 파일이 포함된 패키지를 찾는 sort -u데 사용합니다 . grep ...이를 더욱 용이하게 하려면 다음을 수행할 수 있습니다.

grep $(pwd)
$ pwd
/usr/sbin

$ rpm -qa --queryformat '[%{NAME}: %{FILENAMES}\n]' | \
    sed 's#\(/.*/\).*$#\1#' | sort -u | grep $(pwd)

패키지 이름만 포함된 목록

고유한 목록에서 패키지 이름만 가져오려면 다음을 수행할 수 있습니다.

$ rpm -qa --queryformat '[%{NAME}: %{FILENAMES}\n]' | \
    sed 's#\(/.*/\).*$#\1#' | sort -u | grep $(pwd) | \
    awk -F: '{print $1}' | head -10
abrt-addon-ccpp
abrt-addon-pstoreoops
abrt-addon-vmcore
abrt-dbus
abrt
alsa-utils
aoetools
at
authconfig
avahi-autoipd

인용하다

답변2

/usr/share/applications에 파일이 있는 패키지를 알고 싶습니다.

를 실행하여 전체 디렉토리 트리를 생성할 수 있습니다 rpm -qf <absoluteFilePath>. 전체 디렉토리 트리를 생성하려면 이 find명령을 사용하고 출력을 필터링할 수 있습니다.

예를 들어:

[root@xxx01 ~]# find /usr/share/applications -type f -exec rpm -qf {} \; | grep -v "is not owned by any package" | sort | uniq 
firefox-31.1.0-5.el6_5.x86_64 
savui-1.0.14-13.i386 
shared-mime-info-0.70-4.el6.x86_64 
[root@xxx01 ~]#

그러나 개별 패키지의 내용을 나열하는 옵션은 표시되지 않습니다.

이것은 약간 다른 옵션입니다 rpm. 예를 들어 firefox패키지의 파일을 나열합니다.

[root@xxx01 ~]# rpm -ql firefox
/usr/bin/firefox
/usr/lib64/firefox
/usr/lib64/firefox/LICENSE
/usr/lib64/firefox/application.ini
/usr/lib64/firefox/browser/blocklist.xml
/usr/lib64/firefox/browser/chrome
/usr/lib64/firefox/browser/chrome.manifest
/usr/lib64/firefox/browser/chrome/icons
/usr/lib64/firefox/browser/chrome/icons/default
/usr/lib64/firefox/browser/chrome/icons/default/default16.png
/usr/lib64/firefox/browser/chrome/icons/default/default32.png
/usr/lib64/firefox/browser/chrome/icons/default/default48.png
/usr/lib64/firefox/browser/components
/usr/lib64/firefox/browser/components/components.manifest
/usr/lib64/firefox/browser/components/libbrowsercomps.so
/usr/lib64/firefox/browser/defaults/preferences
/usr/lib64/firefox/browser/extensions
/usr/lib64/firefox/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
/usr/lib64/firefox/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon.png
/usr/lib64/firefox/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
/usr/lib64/firefox/browser/icons
/usr/lib64/firefox/browser/icons/mozicon128.png
... snip ...

답변3

slm의 대답은 거의 정확하며 아마도 구식일 수 있습니다. 내가 가진 최고의 스크립트는 다음과 같습니다.

rpm -qa --queryformat '[%{=NAME}: %{FILENAMES}\n]' | grep ' /var' |  cut -d: -f 1 | uniq

내용은 위와 거의 동일하며 "="도 NAME을 반복자로 만듭니다.

답변4

무슨 가방인지 보세요공급사용할 수 있는 특정 파일 또는 디렉터리는 다음과 같습니다 yum provides <file>.

$ yum provides /usr/share/applications/*
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * fedora: mirrors.ircam.fr
 * rpmfusion-free-rawhide: mirrors.coreix.net
 * rpmfusion-nonfree-rawhide: mirrors.coreix.net
 * updates: ftp.uni-koeln.de
abrt-gui-2.3.0-3.fc21.x86_64 : abrt's gui
Repo        : fedora
Matched from:
Filename    : /usr/share/applications/abrt-applet.desktop



alacarte-3.11.91-2.fc21.noarch : Menu editor for the GNOME desktop
Repo        : fedora
Matched from:
Filename    : /usr/share/applications/alacarte.desktop

이것은 계속해서 진행됩니다. 파이프를 통해 읽어보세요 less.

패키지의 파일을 나열하려면 다음을 사용하십시오.rpm -ql <package>

$ rpm -ql less
/etc/profile.d/less.csh
/etc/profile.d/less.sh
/usr/bin/less
/usr/bin/lessecho
/usr/bin/lesskey
/usr/bin/lesspipe.sh
/usr/share/licenses/less
/usr/share/licenses/less/LICENSE
/usr/share/man/man1/less.1.gz
/usr/share/man/man1/lessecho.1.gz
/usr/share/man/man1/lesskey.1.gz

관련 정보