読者です 読者をやめる 読者になる 読者になる

破棄されたブログ

このブログは破棄されました。

.d ディレクトリにまつわる etc.

*nix

.d を接尾辞にしたディレクトリの標準があるのか調べていたところ、.d ディレクトリの歴史的経緯について説明した文章を見つけた。 結論から言うと、 .d 接頭辞自体は標準ではないようだ。分散パッケージングが普及するにつれ、設定ファイルの衝突を避ける必要性が発生し、そこから生まれたものだった。

旧来、多くの UNIX のソフトウェアは、ソフトウェアパッケージごとに一つの設定ファイルで管理され、パッケージのすべての設定項目がひとつのファイルに記述されていた。このような管理手法も、システム管理者がローカルなシステムを手動で設定する場合には十分機能するものだった。

分散パッケージングが一般的になると、個々のパッケージから与えられる設定ファイルを複数に分割する方法がより望ましく必要になった。複数のパッケージは、同じサービスを共有しつつも、共通の設定ファイルを変更することなく設定できなければならなかった。

ファイルを配置すると、設定ファイルの一部分として読み込まれるディレクトリを作成する慣習が最も受け入れられた。この慣習は広く普及し、ディレクトリ名には、設定ファイル名の一部を置き換えるか付け加えられたものが用いられた。しかしながら、同じ名前のファイルまたはディレクトリを作成することはできないため、別々の名前をつけるための方法が必要とされた。そこで .d がファイル名の最後に追加されることとなった。したがって、設定のファイル /etc/Muttrc には /etc/Muttrc.d ディレクトリ内の設定ファイルの断片が取り込まれ、また同様に /etc/bash_completion には /etc/bash_completion/* がとりこまれる。その他の場合についても同様である。 /etc/xinetd.d が /etc/xinetd.conf にまたは /etc/apache2/conf.d が /etc/apache2/apache2.conf に読み込まれるような小さな差異がある場合はあるが、基本的には同一のアイデアである。

一般に、 *.d という命名規則を見つけたら、「このディレクトリは、何かのサービスの設定ファイルに統合されるいくつかの設定ファイルの断片を持っているよ」ということを意味してる。

Re: What does .d at the end of some dirctory and filenames actually stand for?

確かに、自分が .d ディレクトリについて考慮し始めたのは、Chef で設定ファイルを設置しようとしていた際だった。これは、自動で設定ファイルを取り扱おうと思うと、設定ファイルそのものを書き換えるより、設定ファイルに取り込まれる設定ファイル断片を配置するほうが安全なため。

もっとも早くこの慣例を取り入れた例は、モノリシックな /etc/rc ブートスクリプトと /etc/rc.d ディレクトリである。

Re: What does .d at the end of some dirctory and filenames actually stand for?

/etc/rc というと、直接の関係はないけど、 RHEL 7 で init デーモンとして systemd が採用され、 Debian 8 でも systemd が採用されようとしている(ってどっかで聞いた)。.d ファイルは、直列でしか読み込みができず、ファイル名にプレフィックスをつけるような汚い手段でしか依存を解決できない。多くの場合不要だろうけど、今後 systemd の様に並列だったりイベント駆動だったりで設定ファイルを読み込めるようになるものも出てくるのかもしれないなあとか思ってみた。もうあるのかな。

参考元

fhs - What does the .d stand for in directory names? - Unix & Linux Stack Exchange

広告を非表示にする