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
などを使用して、ファイル名が書き込み可能とされたときにのみ真となります。