次のような構成があるとしましょう。
- フォルダA
- ファイル1
- ファイル2
次に、次のようにフォルダAへのソフトリンクを作成します。ln -s A B
今、次のような結果が出ました。
- フォルダA
- ファイル1
- ファイル2
- フォルダB(フォルダAへのシンボリックリンク(ソフトリンク))
- ファイル1
- ファイル2
これで変更すると、B/file1
その変更がに伝播されますA/file1
。ただし、次のように表示されます。 - ls -l
in を使用する場合B
- thatB/file1
とB/file2
areいいえソフトリンクと代替A/file1
何A/file2
が起こっているのでしょうか?
質問:これは本当ですか?B/file1
へのハードリンクA/file1
?これを尋ねるもう1つの方法は次のとおりです。ディレクトリをソフトリンクすると、そのサブファイルは元のディレクトリのサブファイルへのハードリンクになりますか?すべてをソフトリンクにする方法はありますか?
答え1
2つの理由でハードリンクではありません。
- lsとマークされたソフトリンクディレクトリのファイルのハードリンク数は1です。ファイルがハードリンクの場合、数は2つ以上になります。
- ハードリンクはファイルシステムにまたがることはできませんが、ソフトリンクは可能です。ハードリンクを作成したい場合は、ファイルシステム間でディレクトリをソフトリンクできません。
実際に見ているのは、異なるパスから同じディレクトリにアクセスする別の方法です。ディレクトリに入ったり、その中にあるファイルに対して作業を行ったりすると、そのファイルはまったく同じファイルです(部屋にドアを追加しても内容は変更されませんが、入る新しい方法があると想像してみてください)。
ディレクトリの内容をソフトリンクにするには、ディレクトリ自体ではなくディレクトリ内の各ファイルのソフトリンクを作成する必要がありますが、これによりディレクトリのリストが少し混乱します。ソースとターゲットに異なる名前を持つことに加えて、どのような利点があるのかわかりません。
答え2
何かを混ぜ合わせたようです。
シンボリックリンク:シンボリックリンクはシステムの他のパスへのポインタです。パスは存在する場合も存在しない場合もあり、重要ではありません。また、絶対パスでも相対パスでもよい。シンボリックリンクはターゲットファイルとは関係がなく、ターゲットファイルを指すだけです。別の物理ディスクに配置することもできます。それはaと比較することができますハイパーリンクウェブサイト上で。
ハードリンク:ハードリンクはファイルへの名前の割り当てです(正確にはファイルのinode番号)。この関係を言います射精。各ファイルには、対応する inode 番号を参照する 1 つ以上のハードリンクがあります。 inode番号はファイルへの参照です。したがって、最新のファイルシステムには、ファイル名と物理ファイルが固定的に割り当てられていません。
ファイルにinodeを参照する2つのハードリンクがあり、そのうちの1つがシステムコールを介して削除されるunlink()
と、ハードリンクのみが削除され、ファイルとinodeは変更されていません(これがシステムコールの名前がunlink()
notである理由ですdelete()
)。ハードリンクの数がゼロに減少すると、最終的にinodeが削除され、ファイルも削除されます。
それが理論です。
変更すると変更されるのでB/file1
変更A/file1
されます。同じハードリンクリファレンス同じinode番号参照同じ文書。実際のディレクトリではA
なく、ディレクトリを指すシンボリックリンクに移動しただけです。B
B