他のディストリビューションから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