この許可の解釈は、初期のUnixファイルシステムにまで遡ります。最初は、ファイルのみがありました。(まあ、デバイスとパイプ、そして...しかし、私はここで話をしようとしていますが、100%厳密に正確ではありません。さらに、すべてがファイルであるため、デバイスとパイプなどすべてに当てはまりますディレクトリ)。
ディレクトリは、ファイルシステムがディレクトリツリーとその中に含まれるファイルを記述するメタデータを保持するために使用する単なるファイルです。ディレクトリ内の各ファイルは、データが保存されたiノード番号、ファイルのサイズ、タイムスタンプ、および許可ワードとともに、ファイル名(元は14文字、IIRC)のスペースを含む単純なデータ構造によって記述されました。すべてのディレクトリには、2つの名前付きのエントリで始まった.
と..
その親ディレクトリのiノードでは、この非常にディレクトリのiノードの最初のポインティング、および第二。
許可ワードには、所有者、同じグループの他のメンバー、および世界の扱いを説明する9ビットがありました。関連するユーザーがファイルを読み取り、書き込み、または実行できるかどうかの各フラグの3ビット。(私が無視している16ビット許可ワードにはさらに5つのビットがあることに気付くかもしれません。それらは最終的に意味が割り当てられましたが、ストーリーのこの部分には関係ありません。) Linuxを含む初期のUnixのすべての子孫でビットはほぼ同じままでした。)
したがって、ディレクトリが本当に特別な種類のファイルであり、あるディレクトリのエントリで記述されている場合、明らかに許可ビットもあり、それらのビットはおそらく何かを意味します。しかし、問題はまさにそのとおりです。これらのビットに意味を割り当てる最も簡単な方法は、そもそもそれらの意味を変えないことです。そして、それは本質的に行われたものです。
したがって、読み取りビットは、ユーザーがディレクトリ自体を読み取ることができることを意味します。これにより、読者は各ファイルのデータのファイル名、タイムスタンプ、サイズ、およびiノード番号にアクセスできます。特に、r
setを使用ls
すると、ディレクトリ内のすべてのファイルの名前を表示できますが、リストされたファイルを開く(または何らかの方法で使用する)には不十分です。
実行ビットは、ユーザーがディレクトリを「実行」できることを意味します。ディレクトリは特別なので、executeは実際には名前でエントリを検索して使用することを意味します。つまりx
、設定されている場合はファイルを開こうとすることができますが、ファイルがなければr
名前を見つけることができません。もちろん、要求されたファイルのアクセス許可もアクセスに影響するためx
、ディレクトリ上であっても、を提供しない限りファイルを読み取ることはできませんr
。
書き込みビットは、ユーザーがディレクトリに書き込むことができることを意味しますが、当然、ファイルシステム自体によってのみ仲介されます。つまり、w
setを使用すると、そのディレクトリに新しいファイルを作成したり、既存のファイルのディレクトリエントリを編集したりできます。ただし、x
設定しないと、実際にファイルを使用することr
はできません。また、ファイルを表示することもできません。
Unixおよびその子孫では、ユーザーIDのより複雑なモデルが進化してきたため、これらの同じ基本的な記述は著しく変わっていません。
要するに、r
そのコンテンツを見ることができることをx
意味し、それを使用できることをw
意味し、ディレクトリに対してもそれを変更できることを意味します。