CUBE SUGAR CONTAINER

技術系のこと書きます。

Ubuntu: apt-file でファイルが含まれるパッケージを調べる

あるファイルがどのパッケージに含まれているかを知りたくなる場面は意外と多い。 例えば何かをビルドするときにヘッダファイルがないといわれて、それがどのパッケージに含まれているか調べたいとか。 あるいは何かをパッケージングするときに、それが依存しているパッケージを調べたいとか。 そういったときは Linux ディストリビューションのパッケージシステムが APT なら apt-file を使うと楽ができる。

使った環境は次の通り。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"
$ uname -r
3.19.0-25-generic

下準備

まずは apt-file をインストールする。

$ sudo apt-get -y install apt-file

次にファイルのインデックスを更新する。 要するに、何が何処にあるかという情報を取得してくる作業だ。

$ sudo apt-file update

ファイルが含まれるパッケージを調べる

例えば stdio.h って何処に含まれていたっけなーと調べるときは apt-file の search サブコマンドを実行する。

$ apt-file search /usr/include/stdio.h
libc6-dev: /usr/include/stdio.h

これで libc6-dev に含まれていることが分かった。

apt-file の便利なところはファイルがインストールされていなくても調べられるところ。 例えば先ほどの libc6-dev をアンインストールする。

$ sudo apt-get -y remove libc6-dev

もちろん、これで調べたいファイルは存在していない。

$ ls /usr/include/stdio.h
ls: cannot access /usr/include/stdio.h: No such file or directory

それでも apt-file はパスを指定すれば、それがどこに含まれるか教えてくれる。

$ apt-file search /usr/include/stdio.h
libc6-dev: /usr/include/stdio.h

べんり。

パッケージシステムが、どのファイルが何処にあるかをちゃんとインデックスしているおかげだね。 めでたしめでたし。