すべての種類のファイル(画像、バイナリ実行可能ファイル、スクリプト、ディレクトリ、zipファイルなど)を含むフォルダにある場合、なぜをクリックすると、次の出力がls -l
テーブルに表示されますか?すべてのファイル?
これは、ファイル自体がメタデータが添付された統合スーパーファイルに配置されるのと似ており、プロセスの制御ブロック構造に少し似ています。
UnixやLinuxに関連しないファイルではなぜ問題がないと思いますか? Windowsの世界のファイルを処理するための同様のファイルシステムプリプロセッサはありますか?それとも、クロスプラットフォームファイルは必要ありませんか? (何かあります!)
どのような方法がありますか?バラよりこの隠し(?)レイヤー? (Lispなどはもちろん、HTMLもそのまま読むだけでは理解しにくいですが、見ればすぐに理解になります。)
答え1
ほぼ正確に正しい答えを見つけました。いくつかの詳細を入力するだけです。
ほとんどの場合(特殊ファイルを除く)、すべてのファイルはまったく同じように扱われ、ディレクトリ(「フォルダ」とも呼ばれます)は実際にはファイルとして実装されます。ファイルは実際には一連のディスクブロックです。作成する「メタデータ」を「インデックスノード」と呼びます(参照:スーパーブロック、アノード、ディレクトリエントリ、ファイルとは何ですか?とインデックスノードとは何ですか?このウェブサイトから)。ディレクトリ(または「フォルダ」)は、ファイル名をinodeと一致させる方法にすぎません。名前(ファイル形式、権限、所有権など)に加えて、メタデータもinodeに存在します。メタデータは主にアクセス速度と圧縮のためのバイナリ形式です。 XMLや他のテキスト形式を解析するのに時間がかかりすぎます。
次のコマンドを使用して、ファイルメタデータのテキスト表現を表示できますstat
。stat /bin/cat
興味があるかもしれません。stat
GNUコマンドなので、普遍的には使用できませんが、ほとんどのLinuxディストリビューションにはこのコマンドが必要です。
「外部」ファイルに関して、ファイル/inode/ディレクトリの概念は、オペレーティングシステムが今日よりもはるかに可変であった時代に由来しています。 Unixと元のファイルシステムの設計者は、今日非常に奇妙に思われるオペレーティングシステムとファイルシステムの豊富な経験を持っていました。ファイル/アノード/ディレクトリの概念がすべての経験の特徴であることがほぼ確実であるため、今日のより均質なオペレーティングシステムが提供する「ファイルとは何か」のいくつかのバリエーションは実際には問題になりません。 20年前の状況を理解するには、以下を参照してください。ファイルシステムはカーネルに属します。最近のコンテンツを見るには、次をご覧ください。醜い名前。これはRuss Coxのブログ投稿です。ブログ記事に引用されているRob Pikeの論文も読んでください。あなたはそれからインスピレーションを受けます。
答え2
すべてのファイルはデフォルトでバイトシーケンスです。その中に何が入っているかは問題ではありません。システムはファイルに何バイトがあるかを知り、それを保存する場所を用意します。ファイルの内容が何であれ、それはバイトの束にすぎません。
各ファイルについて、システムはいくつかのファイルも保存します。メタデータ。実際、メタデータはファイルの内容とは無関係です。コンテンツはこれらのメタデータ項目の1つであると言えます(ただし、コンテンツのサイズは可変で非常に大きくなる可能性があるため、通常は別々と見なされます)。保存されるメタデータは次のように異なります。ファイルシステムタイプ。 Unixファイルシステムはls
通常、権限、変更時間など、表示される情報を提供します。ファイル名もメタデータの一部であり、特別な状態を持ちます。つまり、両方のファイルが同じディレクトリに同じ名前を持つことはできません。
ファイルは次のように構成されます。目次。ディレクトリには、通常のファイル、サブディレクトリ、および次のような特殊なファイル形式を含めることができます。シンボリックリンク。というディレクトリがあります。ルートディレクトリすべてのディレクトリはサブディレクトリです。N時間を削除します。
ファイルパスは、ルートディレクトリから始めてファイルを見つける方法を示します。探索する各ディレクトリは、ルートから順番に下に配置され、/
各ディレクトリ名の後にはスラッシュ文字が続きます。たとえば、/usr/bin/env
ルートディレクトリから始めてそのサブディレクトリ/
に移動しusr
、そのサブディレクトリに移動してからそのサブディレクトリ内のエントリをbin
見つけることを意味します。env
ディレクトリの内容を一覧表示するとき、コア(ファイルシステムドライバを含む)タスクは、ディスクのディレクトリを表すバイトを読み込み、それをファイル名、メタデータ、およびコンテンツの場所のリストに変換することです。プログラムls
は次のプログラムを呼び出します。opendir
ディレクトリを開き、繰り返し呼び出して、readdir
ディレクトリ内の各エントリを順番に読み込みます。つまり、ディレクトリ内のファイル名のリスト(サブディレクトリやその他の特殊ファイルを含む)を取得します。使用すると、ls -l
プログラムls
は名前だけでなくファイルに関するより多くの情報を必要とするため、次のように呼び出します。stat
各ファイルのメタデータを検索します。
一部のオペレーティングシステムでは、テキストビュープログラムを使用できます(たとえばcat
、Linuxではこれを許可しません。このdebugfs
プログラムを使用してファイルシステムを参照できます(読み取り専用モードでのみ使用してください))。