3.3. ファイルパーミッション

Windows 9x 上ではファイルは常に読み込み可能であり、Cygwin はファイルが書き込み可能かどうかを判断するために独自のリードオンリーモードを使用します。 ファイル名が .bat、.com または .exe で終了しているか、或いはファイルの内容が #! で始まっているのなら、 そのファイルは実行可能だと判断されます。 その結果、chmod は「w」モードに対してのみ影響を与え、その他のモードは無言で無視されます。 つまり、ls -l はファイルを開いて読み込まなければなりません。 この処理は比較的遅くなりがちです。

NT 環境でも、ファイルパーミッションは基本的に Windows 9x と同様の動作によって決定されます。しかし、Cygwin にはファイルシステムの動作をより UNIX システム的に出来るような機能が備えられています。 これは、環境変数 CYGWIN に「ntea」オプションを追加することによって有効になります。

「ntea」機能が有効になると、Cygwin は先に決定したような基本パーミッションでスタートしますが、POSIX ファイルパーミッションを NT 拡張属性へと保存することが出来ます。この機能は、NTFS ファイルシステム構造でしか完全に動作しません。 しかしながら、FAT パーティション上では、NT は拡張属性をそのパーティションのルートにある EA DATA. SFという名称のフラットファイルに保存します。 パーティション中に多数のファイルが存在する場合、このファイルは極端に大きなサイズになる可能性があり、システムの動作を遅くしていきます。 更に、EA DATA. SF ファイルは「使用中」であるため、Windows の外からでしか削除することが出来ません。 これらの理由により、Cygwin のデフォルトでは NT 拡張属性はオフにされています。 最後に、Windows 9x では CYGWIN 環境変数に「ntea」を指定しても、何の意味もないということを覚えておいて下さい。

NT 環境では、「[ -w ファイル名]」は chmod +w filename などを使用して、ファイル名が書き込み可能とされたときにのみ真となります。