Ubuntuサーバ設定時、時々迷ってしまう

「どのファイルがどのパッケージに属しているか?」

問題。その道しるべになり得るコマンドのメモです。

先に言ってしまえば

dpkg -S コマンドを使うのが一番手っ取り早くて確実です。apt パッケージ管理システムの実体は、バックエンドで dpkg を使っているため、このコマンドがそのまま使えます。

基本的な使い方は以下の通りです。

dpkg -S /パス/to/ファイル名

具体的な使い方とテクニック

1. 基本:絶対パスで指定する

調べたいファイルの絶対パスがわかっている場合は、そのまま指定します。

dpkg -S /etc/logrotate.d/apache2

出力例:

apache2: /etc/logrotate.d/apache2

コロン(:)の左側に表示されている apache2 がパッケージ名です。

2. 応用:ファイル名だけで検索する

絶対パスが思い出せない場合は、ファイル名の一部だけでも検索できます。

dpkg -S logrotate.d/apache2

注意点: ファイル名だけで検索すると、その文字列にマッチするすべてのパッケージとファイルパスが一覧で出力されます。そのため、できるだけ具体的なパスを指定した方がノイズが少なくなります。

3. まだインストールしていないファイルの場合

「まだシステムに入れていないけれど、/etc/xxxx という設定ファイルを入れるには、どのパッケージをインストールすればいいか?」を知りたい場合は、apt-file というツールが便利です。

まずツールをインストールしてデータベースを更新します。(筆者の好みでaptitudeを用いています)

sudo aptitude install apt-file

コマンドインストール後、DBをアップデート。

sudo apt-file update

その後、以下のように検索します。

apt-file search /etc/logrotate.d/apache2

これを使えば、手元の環境にないファイルでも、どのパッケージに含まれているかを一発で特定できます。

なんかの都合で設定ファイルの名前を変えてしまったときに役立ちます。(やらかしました)