日向夏特殊応援部隊

俺様向けメモ

どのバイナリがどのパッケージに含まれるかを調べる

世の中binary2.0なムードが高まっていますが、
今日会社のLinux masterな方に聞いた手法。
あと自分で少し工夫してみたです。

sano++

rpmコマンド

rpm -qa

query allなので全てのパッケージを表示します。

rpm -ql [package name]

packageに含まれるファイルを全て列挙します。

方法1

下記みたいなコマンドで出来るハズ。

# rpm -qa | sort | sed -e "s/.*/rpm -ql &/g" >  package.sh
# script package.log
# sh -x package.sh
# exit
# cat package.log

方法2

スクリプト化しますた。

#!/bin/sh

for p in `rpm -qa | sort`; do
    echo -e "+ $p";

    for entry in `rpm -ql $p`; do
	if [ -f $entry -a -x $entry ]; then
	    echo -e "\t$entry"
	fi
    done
done

これをとりあえずrpmbintree.shとか名前付けて。

# ./rpmbintree.sh
+ ElectricFence-2.2.2-20.2.2
        /usr/bin/ef
        /usr/lib/libefence.so
        /usr/lib/libefence.so.0
        /usr/lib/libefence.so.0.0
+ GConf2-2.14.0-2.1
        /usr/bin/gconf-merge-tree
        /usr/bin/gconftool-2
        /usr/lib/GConf/2/libgconfbackend-evoldap.so
        /usr/lib/GConf/2/libgconfbackend-oldxml.so
        /usr/lib/GConf/2/libgconfbackend-xml.so
        /usr/lib/libgconf-2.so.4
        /usr/lib/libgconf-2.so.4.1.0
        /usr/libexec/gconf-sanity-check-2
        /usr/libexec/gconfd-2

これでもしHackしたいバイナリがあったらば、どのパッケージか分かるので、
srpmなど探してrpm2cpio, cpioとかでソースを取り出したり出来ます。