非常に短い答えは次のとおりです。
- ファイルはデータの匿名のblobです
- ハードリンクはファイルの名前です
- シンボリックリンクは、コンテンツがパス名である特別なファイルです
Unixのファイルとディレクトリが動作し、正確に(およびファイルやディレクトリ現実の世界のようではないようなフォルダ現実の世界で)。Unixファイルシステムは(概念的に)このように構成されています:
- ファイルはデータの匿名のblobです。名前はなく、数字(inode)しかありません
- ディレクトリは、ファイル(より具体的にはiノード)への名前のマッピングを含む特別な種類のファイルです。ディレクトリは単なるファイルであるため、ディレクトリはディレクトリのエントリを持つことができます、それが再帰の実装方法です(Unixファイルシステムが導入されたとき、これはまったく明らかではなく、多くのオペレーティングシステムはディレクトリにディレクトリを含めることを許可していませんでしたその後)
- これらのディレクトリエントリはハードリンクと呼ばれます
- シンボリックリンクは、コンテンツがパス名である別の特別な種類のファイルです。このパス名は別のファイルの名前として解釈されます
- 他の種類の特殊ファイルは次のとおりです。ソケット、FIFO、ブロックデバイス、キャラクターデバイス
このメタファーを念頭に置いて、特にUnixディレクトリが実世界のディレクトリのように機能し、実世界のフォルダのように機能しないことを念頭に置いて、初心者がよく遭遇する「奇妙な」ことの多くを説明します。書き込み権限がありますか?1つは、ファイルを削除するのではなく、ファイルに存在する可能性のある名前の1つを削除することです。そのためには、ファイルではなくディレクトリへの書き込みアクセスのみが必要です。現実の世界のように。
または、なぜぶら下がっているシンボリックリンクを持つことができますか?まあ、シンボリックリンクには単にパス名が含まれています。その名前のファイルが実際に存在しなければならないということは何もありません。
私の質問は、単にファイルとハードリンクの違いは何ですか?
ファイルとハードリンクの違いは、あなたと電話帳の名前のある行との違いと同じです。
ハードリンクはiノードを指しているので、ファイルとは何ですか?iノードエントリ自体?または、ハードリンクのあるiノードですか?
ファイルは、匿名のデータです。それでおしまい。ファイルは、ファイルが、iノードではありません持っているあなたは、あなたが社会保障番号ではありません同じように、inodeを持って SSNを。
ハードリンクは、ファイルの名前です。ファイルには多くの名前を付けることができます。
たとえば、タッチでファイルを作成すると、iノードエントリがiノードテーブルに作成されます。
はい。
そして、ファイルと同じiノード番号を持つハードリンクを作成します。
いいえ。ハードリンクはファイルではないため、iノード番号はありません。ファイルにのみiノード番号があります。
ハードリンクは、名前とiノード番号を関連付けます。
新しいファイルを作成しましたか?
はい。
または、ファイルは単にiノードとして定義されていますか?
いいえ。ファイルにはiノードがありますが、iノードではありません。