本章では Cygwin 環境と伝統的な UNIX システムの間にある、 幾つかの重要な違いについて記述します。 標準的な UNIX コマンドの知識があることを仮定しています。
Cygwin は Win32(ディレクトリの区切りにバックスラッシュを使う)スタイルのパスと、 POSIX(ディレクトリの区切りにスラッシュを使う)スタイルのパスを共にサポートしています。 UNC パス名(二つのスラッシュと一つのネットワーク名で始まる)もまたサポートしています。
(Linux のような)POSIX オペレーティングシステムには、ドライブ文字という概念はありません。
代わりに、全ての絶対パスは(「c:」のようなドライブ文字の代わりに)スラッシュで始まり、全てのファイルシステムはサブディレクトリとして表現されます
(例えば、新しいディスクを購入してそれを /disk2 というディレクトリにする、といったようになります)。
UNIX システムで動作するように書かれた多くのプログラムでは、単一の統合された POSIX ファイルシステム構造の存在が前提となっているので、Cygwin は それらのプログラムが Windows 上で正常に動作するように、Win32 ファイルシステムに対する特別な内部的 POSIX ビューを提供します。 Cygwin は必要に応じて、Win32 パスと POSIX パスの間の変換用のマッピングを使用します。
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 は現在のユーザだけが使用できます。
c:\> mount
f:\cygwin\bin on /usr/bin type system (binmode)
f:\cygwin\lib on /usr/lib type system (binmode)
f:\cygwin on / type system (binmode)
e:\src on /usr/src type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
例 3.1. マウントポイントの現在の設定を表示する
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」 を参照して下さい。
環境変数 HOME、PATH そして
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 サーバは、デフォルトではそのように動作しません)。