ハードリンクとシンボリックリンクの違いを理解する
ここでは、ハードリンクとシンボリックリンクの両方を作成したので、それらの主要な違いを比較してみましょう。
ハードリンク:
- 元のファイルと同じイノードを共有する
- ディレクトリにリンクすることはできない
- ファイルシステムの境界を越えることはできない
- 元のファイルが削除または移動されても機能し続ける
- 内容の変更はすべてのハードリンクに反映される
シンボリックリンク:
- ターゲットファイルとは異なる独自のイノードを持つ
- ディレクトリにリンクすることができる
- ファイルシステムの境界を越えることができる
- ターゲットファイルが削除または移動されると無効になる
- 本質的には、ターゲットへのパスを含むポインタファイルである
これらの違いのいくつかを例を使って説明しましょう。
まず、許可されていないディレクトリへのハードリンクを作成してみましょう。
mkdir testdir
ln testdir testdir_hardlink
次のようなエラーメッセージが表示されるはずです。
ln: testdir: hard link not allowed for directory
次に、許可されているディレクトリへのシンボリックリンクを作成してみましょう。
ln -s testdir testdir_symlink
ディレクトリのシンボリックリンクを確認しましょう。
ls -la
出力に testdir_symlink -> testdir
が表示され、testdir_symlink
が testdir
へのシンボリックリンクであることがわかります。
元のディレクトリ内にファイルを作成することができます。
echo "This is a test file in the directory." > testdir/testfile.txt
そして、シンボリックリンクを通じてそのファイルにアクセスします。
cat testdir_symlink/testfile.txt
次の内容が表示されるはずです。
This is a test file in the directory.
これは、シンボリックリンクがディレクトリを指し、その内容にアクセスするために使用できることを示しています。
もう1つの重要な違いは、元のファイルを削除するとシンボリックリンクは無効になるが、ハードリンクは無効にならないことです。これは、シンボリックリンクの例ですでに見てきました。ハードリンクでこれを実証してみましょう。
rm original.txt
cat hardlink.txt
次の4行が表示されるはずです。
This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
This line was added through the symbolic link.
ハードリンクは、データがディスク上にまだ存在し、ハードリンクがそのデータを引き続き指しているため、引き続き機能します。
しかし、シンボリックリンクは現在無効になっています。
ls -l symlink.txt
cat symlink.txt
symlink.txt
はまだ存在するが、存在しないファイルを指しており、それを読み取ろうとするとエラーが発生することがわかります。
ハードリンクから元のファイルを再作成しましょう。
cp hardlink.txt original.txt
cat symlink.txt
シンボリックリンクが指すファイルが再び存在するため、シンボリックリンクは再び機能します。