ここには非常に正しい答えがたくさんありますが、元の誤解に実際に取り組んだ人はいないと思います。元の質問は基本的に「シンボリックリンクを作成すると、後で簡単に識別できます。しかし、ハードリンクを識別する方法がわかりません」です。そして、はい、答えは基本的に「できない」に要約され、多かれ少なかれその理由を説明しますが、実際、それは混乱し、奇妙です。
これをすべて読んでいて、何が起こっているのかを理解していれば、あなたは大丈夫です。あなたは私の少しを読む必要はありません。まだ混乱している場合は、続けてください。
本当に短い答えは、ハードリンクは実際にはリンクではなく、シンボリックリンクのようではないということです。これは、元のディレクトリエントリと同じバイトの束を指すディレクトリ構造内の新しいエントリであり、一度作成すると、最初のエントリと同じように「本物」で正当なものになります。ドライブ上のすべての「通常の」ファイルには、少なくとも1つのハードリンクがあります。それなしでは、あなたはそれを見ることはありませんディレクトリ、およびそれを参照したり使用したりすることはできません。したがって、ファイルFred.txtがあり、Wilma.txtとBarney.txtをそのファイルにハードリンクすると、3つの名前(およびディレクトリエントリ)はすべて同じファイルを参照し、すべて同じように有効です。OSが、テキストエディタで「保存」を押したときにエントリの1つが作成され、他のエントリが「ln」コマンドで作成されたことを通知する方法はありません。
ただし、OS は同じファイルを指している異なるエントリの数を追跡する必要があります。Wilma.txtを削除しても、ドライブの空き領域が確保されないのは当然のことです。ただし、Fred.txt(「元の」ファイル)を削除しても、ドライブの空き領域は確保されません。これは、Fred.txtというドライブ上のデータもBarney.txtのままであるためです。すべてのディレクトリエントリを削除した場合にのみ、OSはデータ自体が占有していたスペースの割り当てを解除します。
Barney.txtがシンボリックリンクされていた場合は、Fred.txtを削除してしまうデ割り当てられたスペースを持っている、とBarney.txtは現在、リンク切れになります。また、それを指すシンボリックリンクを持つファイルを移動または名前変更すると、リンクが解除されます。ただし、ハードリンクされたファイルは、そのファイル/データを指す他のディレクトリエントリを壊すことなく、すべて移動または名前変更できます。これらはすべて、ドライブ上の同じデータブロックを参照するディレクトリエントリであるためですそのデータのiノード番号)。
[それは2年後、その最後の少し混乱していたので、明確にすると思います。「mv ./Wilma.txt ../elsewhere/Betty.txt」と入力すると、ファイルを移動しているように見えますが、実際はそうではありません。実際に行っているのは、現在のディレクトリのディレクトリリストから行項目を削除することです。「Wilma.txt」という名前は、iノード######を使用して検索できるデータに関連付けられています。 #、」と新しい行項目をディレクトリ../elsewhereのディレクトリリストに追加し、「名前 'Betty.txt'はiノード#######で検索できるデータに関連付けられています」と表示します。これが、同じドライブ上の別の場所に移動している限り、2ギガバイトのファイルを2キロバイトのファイルと同じ速さで「移動」できる理由です。]
OSは、データの同じチャンクを指しているどのように多くの異なるディレクトリエントリを追跡する必要があるため、あなたがすることができ、特定のファイルをハードにリンクされている場合は、確実に伝えることができないにもかかわらず、伝える場合、そのディレクトリエントリ「見ているのは、「オリジナル」なのかどうか」1つの方法は、「ls」コマンド、具体的には「ls -l」(ダッシュの後の小文字のL)です。
以前の例を借りるには...
-rw-r--r-- 3 stephane stephane 0 Nov 12 19:55 f1
最初の文字はダッシュなので、ディレクトリや他のエキゾチックなものではなく、「通常の」通常のファイルです。しかし、本当に普通であれば、「このデータブロックを指すディレクトリエントリが1つあります」のように、rwx-ish部分の後の数字は「1」になります。しかし、これはハードリンクのデモの一部であるため、代わりに「3」と表示されます。
これは、奇妙で神秘的な動作につながる可能性があることに注意してください(ハードリンクに頭を包んでいない場合)。テキストエディターでFred.txtを開いて変更を加えた場合、Wilma.txtとBarney.txtにも同じ変更が表示されますか?多分。恐らく。テキストエディタが元のファイルを開いて変更を書き込むことで変更を保存する場合、はい、3つの名前はすべて同じ(新しく変更された)テキストを指します。ただし、テキストエディターが新しいファイル(Fred-new-temp.txt)を作成し、変更されたバージョンをそのファイルに書き込み、Fred.txtを削除し、Fred-new-temp.txtの名前をFred.txtに変更すると、ウィルマとバーニーは新しく変更されたバージョンではなく、元のバージョンを引き続き指している。ハードリンクを理解していない場合、これは少し怒ってしまう可能性があります。:) [わかりました、私は実際に個人的に知りません新しいファイル/名前の変更を行うテキストエディターですが、それを正確に行う他の多くのプログラムを知っているので、注意してください。]
最後の注意: 'fsck'(ファイルシステムチェック)がチェックすることの1つは、何らかの方法でディレクトリエントリによって参照されなくなったデータブロックがドライブにあるかどうかです。時々何かがおかしくなり、inodeを指す唯一のディレクトリエントリが削除されますが、ドライブスペース自体は「使用可能」としてマークされません。fsckの仕事の1つは、割り当てられたすべてのスペースをすべてのディレクトリエントリと照合して、参照されていないファイルがないことを確認することです。見つかった場合、新しいディレクトリエントリを作成し、「lost + found」に入れます。