それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

あるコマンドが含まれるパッケージを探す。apt-file/dpkg

あるコマンドがどのパッケージに含まれるか探したい

  • このコマンド、どこからインストールされたの?
  • このコマンドをインストールするには何を入れたら良いの?

これらの疑問を解決するために2つのコマンドが有ります。また或るパッケージで入れたコマンドにどんなものが有るか知りたいとき。パッケージのファイルを知りたいときに使う。

このコマンドは「どこから」インストールされたの

インストールされているコマンドが、どこ由来か、Originを探す。どのパッケージに含まれるのかを知りたい時。

この場合は、インストール済みなので、インストール済みパッケージの中身を探せばいいです。

かと言って、全てのパッケージをlist up して for grep するのは面倒なので、ソレ専用のコマンドが用意されています

たとえば、bin/locate はどこから来たのか。

## ln されている場合があるのでrealpathする
apt-file search $(realpath $(which locate ))

それはインストール済みなのか

apt list $(apt-file search $(realpath $(which locate )) | cut -d":" -f 1 )

それは、どんなファイルを持つのか

dpkg -L plocate  | grep bin

例 lsusb がどのパッケージか

takuya@:~$ dpkg -S $(which lsusb)
usbutils: /usr/bin/lsusb

-S が思い出せない時は多少強引に

pkg -l | cut -d " " -f 3 | xargs -I@ dpkg -L @ | grep lsusb

逆に、あるパッケージに含まれるコマンドを知りたい

例 util-linuxに含まれるコマンド

dpkg -L util-linux | grep bin/

とすれば、コマンドが出てきます。

インストールしたいコマンドが含まれるパッケージがわからない。

未インストールの場合、dpkg で網羅することが出来ないので、 apt-file を使います。

sudo apt install apt-file

apt-file はapt-lineに含まれる*.debに含まれる、ファイル一覧を取得して、インデックスしてくれます。

takuya@:~$ apt-file search /bin/locate
atlc: /usr/bin/locatediff
locate: /usr/bin/locate.findutils

初回起動では、ファイル一覧を取得するのでちょっと時間がかかる。

あれ?このコマンドってなんだっけ

普段良く使ってるコマンドがどこから入ってるか調べるのに便利です。

util-linux関連はBSDmacOS X に含まれてないコマンドもあるのでアレレと思った時に調べるのに使っています。

参考資料

http://www.cyberciti.biz/howto/question/linux/dpkg-cheat-sheet.php

http://d.hatena.ne.jp/stakizawa/20080823/t1

2017-05-06

若干修正