Cygwinのいくらかましな使い方

はっきり言ってCygwinは気持ち悪い。できれば使いたくないと10年以上前に初めてCygwinを使ったときに思った。Cygwinの開発に関わって、僕のパッチがいくつも取り込まれたCygwinを使っている今でも、その気持ちに変わりはない。本質的には変わってないからね。
Cygwinが気持ち悪い理由の一つはファイルシステムだと思う。ホームディレクトリの/homeがC:/cygwin/homeなのはよくない。ホームディレクトリのファイルの名前が普通のWindowsアプリケーションに渡ったときに、/homeはC:/homeとして扱われるので見えなくなってしまう。

少なくともホームディレクトリはWindowsCygwinでパス名が一致するようにしておくべきだ。そうすればWindowsCygwinのアプリケーションを混在させたときに混乱せずにすむ。

たとえばC:/home/fujiedaをホームディレクトリにして、/etc/fstabに以下の一行を挿入すれば、Cygwinの/home/fujiedaがC:/home/fujiedaになる。

C:/home /home ntfs binary 0 0

/home/ユーザ名以外のホームディレクトリを選んだときには、/etc/passwdの自分のアカウントのホームディレクトリを修正するのを忘れないように。また、環境変数HOMEを参照するUnixライクなWindowsアプリケーションのために、HOMEにホームディレクトリを設定しておくとよい。

ちなみに僕はC:/DropboxDropboxのフォルダを作成してC:/Dropbox/homeをホームディレクトリにしている。この場合は/etc/fstabに以下の一行を入れればよい。

C:/Dropbox /Dropbox ntfs binary 0 0

マウントテーブルや/etc/passwdの内容は共有メモリにキャッシュされているので、すべてのCygwinのアプリケーションを終了しないと変更した内容が反映されないことに注意してほしい。

Cygwinファイルシステムで気持ち悪いのは、lsで見えるファイルのパーミッションもそうだ。僕はもう慣れてしまったので平気だが、WindowsACLに基づいて作られたパーミッションが気持ち悪い人はいると思う。これが嫌な人はWindowsACLCygwinから見えないようにしてしまえばよい。具体的には以下のように/etc/fstabでnoaclオプションを指定すればよい。

C:/home /home ntfs binary,noacl,notexec 0 0

ACLが使えない場合、Cygwinがファイルの先頭2バイトが#!かどうかで実行ファイルかどうかを調べるようになるので、それを避けるためにnotexecオプションも指定しておいたほうがよい。

あとはC:/cygwinの外のディレクトリを参照するために、/cygdrive/c/とか付けるのはやってられないので、/etc/fstabに以下の一行を指定して/c/で参照できるようにするとよい。

none / cygdrive binary 0 0

これでいくらかましCygwinを使えるようになるんじゃないかな。