FreeBSDに於ては、OS、特にユーザーランドのコマンドの設定ファイルは /etc に置かれることが多いです。他は各ユーザーのホームディレ クトリに置かれます。カーネル関係の設定ファイルは/boot に も置かれます。アプリケーションのうちports/pakcagesから 導入されたものの設定ファイルは、/usr/local/etc に置かれ ることが多いです。他は各ユーザーのホームディレクトリに置かれること が多いです。
FreeBSDには、アプリケーション関係のファイルは、 /usr/local より上のディレクトリ階層に出さないと言う思想 があるので、/usr/local/etc が重視されます。Linuxでは、 アプリケーションはあまり /usr/local 以下に置かれませんし、 /usr/local/etcは、あまり活用されていません。 FreeBSDでは、設定ファイルのパスが2つに分散している性質 を生かして、巧妙な設定をすることができます。nviの例で説明 しましょう。
この項で扱うFreeBSDの環境は、 FreeBSD/i386 6.2-RELEASE-p12 です。
FreeBSDのユーザランドのviは、nviのハードリンクです
foo@bar~% which vi
/usr/bin/vi
foo@bar~% cd /usr/bin
foo@bar/usr/bin% ls -FailG ./vi
1013929 -r-xr-xr-x 6 root wheel 281372 4 19 05:13 ./vi*
foo@bar/usr/bin% ls -FailG . | grep 1013929
1013929 -r-xr-xr-x 6 root wheel
281372 4 19 05:13 ex*
1013929 -r-xr-xr-x 6 root wheel
281372 4 19 05:13 nex*
1013929 -r-xr-xr-x 6 root wheel
281372 4 19 05:13 nvi*
1013929 -r-xr-xr-x 6 root wheel
281372 4 19 05:13 nview*
1013929 -r-xr-xr-x 6 root wheel
281372 4 19 05:13 vi*
1013929 -r-xr-xr-x 6 root wheel
281372 4 19 05:13 view*
スクリーンエディタviとラインエディタexとスクリーンエディタ のリードオンリーモードviewとがハードリンクの関係であることは 良く知られています。FreeBSDでは実は、nvi、nex、nviewがそれ に加わるのです。リンクカウントが6ですから、これ以外にハードリンク はないことになります。
foo@bar~% jman vi とすると、
このマニュアルは ex/vi テキストエディタから派生 したnex/nvi 用として提供されています。 nex/nvi は Fourth Berkeley Software Distribution (4BSD)オリジナルの ex と vi のバグひとつひと つの互換性も含めて置き換えたつもりです。
とあります。BSD系UNIXのviは、4.4BSDの頃からnviがその実体のよう です。オリジナルのコードを書いたのは、Keith Bostic氏です。
/usr/src/contrib/nvi/LICENSEに
* Copyright (c) 1991, 1992, 1993, 1994
* The Regents of the University of California. All rights reserved.
* Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996
* Keith Bostic. All rights reserved.
とあります。
一方、FreeBSD Ports Collectionにある
nvi-m17n-1.79.20040401,1
A clone of vi/ex, with multilingual patch,
no default settings
は、Keith Bostic氏が書いたコードに、萩野純一郎氏が 2バイト対応パッチを当てたもので、日本語の他、中国語、 韓国語が表示できます。萩野純一郎氏は、 Jun-ichiro itojun Hagino (Jun-ichiro Itoh) として知られた方です。
/usr/local/share/vi/README.japanese
を読むと、 ~/.exrc に
set showmatch
set showmode
set skipdisplay
set displayencoding=euc-jp
set inputencoding=euc-jp
set fileencoding=euc-jp
set autodetect=jp
set autodetect=jp+
と書けば良いことが判るので、~/.nexrcにそう書くと
foo@bar~% /usr/bin/vi
/home/foo/.nexrc, 6: set: no skipdisplay option: 'set all' gives all option values
/home/foo/.nexrc, 6: Ex command failed: pending commands discarded
Press Enter to continue:
と、viを起動する度にエラー=メッセージが表示されて煩わしいことに なります。
そこで、~/.nexrc は、
set exrc
set showmatch
set showmode
とシンプルにしておき、
/etc/vi.exrc を
set exrc
set showmatch
set showmode
/usr/local/etc/vi.exrc を
set exrc
set showmatch
set showmode
set skipdisplay
set displayencoding=euc-jp
set inputencoding=euc-jp
set fileencoding=euc-jp
set autodetect=jp
set autodetect=jp+
とすると、
foo@bar~% /usr/bin/vi
~
~
~
~
~
~
~
~
~
~
~
~
~
/tmp/vi.khQQ2CMrNE: new file: line 1
foo@bar~% /usr/local/bin/nvi
~
~
~
~
~
~
~
~
~
~
~
~
/tmp/vi.JIT5HF: new file, euc-jp: line 1
となり、エラー=メッセージが表示されなくなります。
つまり、
/usr/bin/vi は、 /etc/vi.exrc
/usr/local/bin/nvi は、 /usr/local/etc/vi.exrc
を設定ファイルとして読み込む訳です。
もちろん、両者とも、~/.nexrc があれば、それを最優先で 読み込みます。
/usr/local/bin/nvi の設定ファイルが
/usr/local/etc/vi.exrc であることは、
/usr/ports/editors/nvi-m17n/Makefile に
CONFIGURE_ENV= OPTFLAG='-D_PATH_SYSEXRC=\"${PREFIX}/etc/vi.exrc\"'
とあることから判ります。
FreeBSDでは、OS、特にユーザランドの設定ファイルは、
/etc
アプリケーションの設定ファイルは、
/usr/local/etc
に置かれます。
nviのように、ユーザランド版とアプリケーション版と
両方存在するものでは、
ユーザーランドの設定ファイルは
/etc
に置き、
アプリケーションの設定ファイルは
/usr/local/etc
に置けば、2種類の設定ファイルを使い分けることが
できます。