第3章 Cygwin を使う

本章では Cygwin 環境と伝統的な UNIX システムの間にある、 幾つかの重要な違いについて記述します。 標準的な UNIX コマンドの知識があることを仮定しています。

mount ユーティリティプログラムは、Win32 ドライブとネットワーク共有を Cygwin の内部的 POSIX ディレクトリツリーにマップするために使用されます。 これは典型的な UNIX のマウントプログラムのコンセプトと同様です。 Windows での経験が豊富であれば、mount ユーティリティはかつての DOS に存在した join と非常に似ており、ドライブ文字を任意のサブディレクトリとして扱うことを可能にするといえば分かりやすいかもしれません。

このマッピングは現在のユーザの Cygwin マウントテーブル(Windows レジストリ中に格納されています)に保存され、次回のログインの際にも取り出されることになります。 時として、ユーザ単位でのマウントと同様に、システム全体でのマウント情報を持つことが望ましいので、Cygwin の全利用者が継承するシステム全体のマウントテーブルもまた存在します。 システム全体のテーブルは、適切な権限を持ったユーザだけが修正可能です(Windows NT では Administrator 権限)。

現在のユーザのテーブルは 「"HKEY_CURRENT_USER/Software/Cygnus Solutions/Cygwin/mounts v<version>」以下に保存されています。ここで <version> とは Cygwin ライブラリによって割り当てられる最新のレジストリバージョンです(このバージョンはリリース番号と同一ではありません)。 システム全体のテーブルは HKEY_LOCAL_SYSTEM 以下にある同様のサブキーの下にあります。

デフォルトでは、POSIX ルート / はシステムパーティションに位置づけられていますが、mount コマンドを使用することによって Windows ファイルシステム中の任意のディレクトリで再定義することが出来ます。 Cygwin が Win32 パスから POSIX パスを生成したかどうかに関わらず、 最も長くマッチしたプレフィックスがマウントテーブル中で使われます。 すなわち、C:/c として、更に / としてマウントされている場合、 Cygwin は C:/foo/bar/c/foo/bar として変換することになります。

引数なしで mount を起動した場合、Cygwin の現在のマウントポイントを表示します。 以下の例では、C ドライブは POSIX ルートとして、D ドライブは /d としてマップされています。この例では、ルートマウントは Cygwin プログラムを使用する全てのユーザが使用出来るシステム全体のマウントポイントですが、一方で /d は現在のユーザだけが使用できます。

mount コマンドは新しいマウントポイントを追加するために、umount コマンドはマウントポイントを削除するために使用できます。Cygwin の POSIX ファイルシステムを設定するこれらのユーティリティの使用方法についての更なる情報が得るには、項3.7.8. 「mount」項3.7.15. 「umount」 を参照して下さい。

特定の Win32 パスを 既存のマウントによって POSIX パスへと変換することが出来なかった場合、Cygwin は常に自動的に POSIX パス /cygdrive の下にある仮想上のマウントポイントを使用します。例えば、Cygwin が Z:\foo にアクセスしたが、Z ドライブは現在のマウントテーブルには存在しなかった場合、 Z:\ は自動的に /cygdrive/Z へと変換されます。デフォルトのプレフィックス /cygdrive は変更可能です(更なる情報については 項3.7.8. 「mount」 を参照して下さい)。

個々のマウントポイントに対して、ある特定の属性を割り当てることが可能です。 自動的にマウントされるパーティションは「auto」として表示されます。 マウントには同様に、「textmode」又は「binmode」 ― デフォルトでテキストファイルがバイナリファイルと同様の方法で読まれるか否か ― を指定出来ます(テキストモードとバイナリモードに関する更なる情報については、項3.2. 「テキストモードとバイナリモード」を参照して下さい)。

cygpath プログラムを使うことにより、シェルスクリプト中で Win32 のパス名と POSIX のパス名を変換することが出来ます。詳細については 項3.7.2. 「cygpath」 を参照して下さい。

環境変数 HOMEPATH そして LD_LIBRARY_PATH は、Cygwin プロセスが最初に開始された時点で自動的に Win32 フォーマットから POSIX フォーマットへと変換されます (c:\cygwin\bin から /bin のように。但し、この Win32 パスがこのように POSIX パスとしてマウントされていた場合)。

シンボリックリンクもまた、Win32 パス名から POSIX パス名へとマップされます。 例えば、コマンド ln -s //pollux/home/joe/data /dataは、シンボリックリンクがデフォルトのファイルアクセスモードをセット出来なかった場合を除き、mount によって //pollux/home/joe/data/data へのマウントポイントとして作成されていた場合と同様の結果をもたらします。 異なるのは、シンボリックリンクによるマッピングはファイルシステム全体に渡って分布するといことと、カーネルテーブル中でマッチする最長のプレフィックスを使用する代わりに、ディレクトリツリー中を繰り返し移動することによって処理されるという点です。 なお、シンボリックリンクは「system」ファイル属性を正しくサポートするように構成されたネットワークドライブでのみ動作するということに気をつけて下さい。 多くのものは、デフォルトでは「system」ファイル属性を正しくサポートしません(例えば、UNIX の Samba サーバは、デフォルトではそのように動作しません)。