Linuxで "cat"ディレクトリを許可しないのはなぜですか? [コピー]

Linuxで "cat"ディレクトリを許可しないのはなぜですか? [コピー]

私は「The Design of the UNIX Operating System」で、ディレクトリがその中に含まれる各ファイルの名前を含むファイルであることを読んでいました。だから、catMacで1つを実行しようとしましたが、エラーが発生しました。cat: ./: Is a directory

しかし、System 7 UNIXでテストした結果、正常に動作しました。

cat ./(システム 7 UNIX)

最新のオペレーティングシステムでこれが機能しないのはなぜですか?ディレクトリがもはやファイルではないか、または誰かが私たちがディレクトリを読んではいけないと決めましたか?

答え1

バージョン7 Unixは単一のファイルシステムのみをサポートすると思います。最新のオペレーティングシステム(Linuxを含む)は多数のファイルシステムをサポートしています。 Linuxカーネルには、これらのさまざまなファイルシステムがPosixおよびLinuxプログラムが期待するように動作するようにする「仮想ファイルシステム」コード階層があります。例えば。 LinuxはさまざまなMS-DOSファイルシステムとNTFSを使用できます。これらのシステムのファイル権限は、正確にLinuxが望むユーザー/グループ/その他、読み取り/書き込み/実行ではありません。したがって、仮想ファイルシステムコードはそれを調整するのに役立ちます。一部のファイルシステム(MS-DOS FATファイルシステムやReiserFSなど)はディレクトリをファイルとして処理しないため、仮想ファイルシステムコードはバージョン7 UFSのようにディレクトリを特別にタグ付けされたファイルとして処理しません。open()ディレクトリに対してシステムコールを実行できますが、ディレクトリからエントリをgetdents()読み取るにはシステムコールを使用する必要があります。

答え2

「UNIX(およびLinux)のすべてがファイルです」という意味ではまだファイルです。プログラムcatがよりスマートになり、「これはディレクトリ型ファイルなので、テキストファイルとして表示することは意味がありません」ということに気づいたので、動作が更新されました。

関連情報