Linuxのソフトリンクとハードリンクを例を挙げて説明する
シンボリックリンクとハードリンクを例を挙げて説明
Linux のソフト リンクとハード リンクとは何ですか?
シンボリックまたはソフトリンクは元のファイルへの実際のリンクですが、ハードリンクは元のファイルのミラーコピーです。元のファイルを削除した場合、ソフト リンクは存在しないファイルを指しているため、ソフト リンクには価値がありません。
しかし、ハードリンクの場合は全く逆になります。元のファイルを削除しても、ハードリンクには元のファイルのデータが残ります。ハードリンクは元のファイルのミラーコピーとして機能するためです。
一言で言えば、ソフトリンク
- ファイルシステムを越えることができ、
- ディレクトリ間をリンクできます。
- 元のファイルとは異なる inode 番号とファイル権限を持っています。
- 権限は更新されません。
- 元のファイルのパスのみが含まれ、コンテンツは含まれません。
ハードリンク
- ファイル システムの境界を越えることはできません (つまり、ハードリンクは同じファイル システム上でのみ機能します)。
- ディレクトリをリンクできない、
- 元のファイルと同じ i ノード番号と権限を持ち、
- ソースファイルのパーミッションを変更するとパーミッションも更新されます。
- には元のファイルの実際の内容が含まれているため、元のファイルが移動または削除された場合でも、引き続き内容を表示できます。
まだわかりませんか?さて、いくつかの実践的な例をお見せしましょう。
ソフトリンクまたはシンボリックリンクの作成方法
"test"
という名前の空のディレクトリを作成しましょう。
mkdir test
"test"
ディレクトリに移動します。
cd test
次に、以下に示すように、いくつかのデータを含む source.file
という名前の新しいファイルを作成します。
echo "Welcome to OSTechNix" >source.file
source.file のデータを表示してみましょう。
$ cat source.file
Welcome to OSTechNix
source.file
が作成されました。
ここで、source.file
へのシンボリック リンクまたはソフト リンクを作成します。
これを行うには、次を実行します。
ln -s source.file softlink.file
source.file
と softlink.file
の両方のデータを比較してみましょう。
$ cat source.file
Welcome to OSTechNix
$ cat softlink.file
Welcome to OSTechNix
シンボリックリンクデータの表示
上記の出力でわかるように、softlink.file
には source.file
と同じデータが表示されます。
softlink.file
と source.file
の i ノードと権限を確認してみましょう。
ls -lia
サンプル出力:
total 12
11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:39 .
4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..
11665731 lrwxrwxrwx 1 sk sk 11 Oct 17 11:39 softlink.file -> source.file
11665692 -rw-rw-r-- 1 sk sk 21 Oct 17 11:39 source.file
i ノードとシンボリック リンクの権限を確認する
上のスクリーンショットでわかるように、inode 番号 (11665731
vs 11665692
) とファイル権限(lrwxrwxrwx
vs -rw-r--r--
) は softlink.file の内容は source.file
と同じですが、 :Underline;">異なります。したがって、ソフト リンクは元のファイルと同じ i ノード番号と権限を共有していないことが証明されています。
ここで、元のファイル (つまり、source.file
) を削除して、何が起こるかを確認してください。
rm source.file
次のコマンドを使用して、softlink.file
の内容を確認します。
cat softlink.file
サンプル出力:
cat: softlink.file: No such file or directory
シンボリックリンクの内容を確認する
上でわかるように、元のファイル (つまり、source.file
) を削除した後は、softlink.file
という名前のファイルまたはディレクトリは存在しません。
これで、ソフト リンクは元のファイルを指す単なるリンクであることがわかりました。ソフトリンクはファイルへのショートカットのようなものです。ファイルを削除すると、ショートカットは使用できなくなります。
すでにご存知のとおり、ソフト リンクを削除しても、元のファイルは引き続き使用できます。
推奨読書:
- Linux でシンボリックリンクを一覧表示する方法
- Linux で壊れたシンボリックリンクを見つけて削除する方法
ハードリンクの作成方法
以下に示すような内容を含む source.file
という名前のファイルを作成します。
echo "Welcome to OSTechNix" >source.file
ファイルの内容を確認してみましょう。
$ cat source.file
Welcome to OSTechNix
source.file
が作成されました。
次に、以下に示すように、source.file
へのハード リンクを作成しましょう。
ln source.file hardlink.file
ハードリンクを作成する
hardlink.file
の内容を確認します。
$ cat hardlink.file
Welcome to OSTechNix
hardlink.file
には、source.file と同じデータが表示されていることがわかります。
hardlink.file
と source.file
の i ノードと権限を確認してみましょう。
ls -lia
サンプル出力:
total 16
11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:58 .
4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..
11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 hardlink.file
11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file
ハードリンクの i ノードと権限を確認してください
hardlink.file
と source.file
の両方が同じ inode 番号 (11665692
) を持っていることがわかります。およびファイル権限 (-rw-r--r--
)。したがって、ハード リンク ファイルは元のファイルと同じ i ノード番号とアクセス許可を共有していることが証明されます。
注意: source.file
の権限を変更すると、同じ権限が hardlink.file
にも適用されます。
ここで、元のファイル (つまり、source.file
) を削除して、何が起こるかを確認してください。
rm source.file
次のコマンドを使用して、hardlink.file
の内容を確認します。
cat hardlink.file
サンプル出力:
ハードリンクの内容を確認する
上で見たように、ソース ファイルを削除した場合でも、hardlink.file
の内容を表示できます。したがって、ハード リンクは元のファイルの同じ i ノード番号、アクセス許可、およびデータを共有していることが証明されます。
では、ハードリンクと通常のコピーファイルの違いは何でしょうか?
元のファイルは簡単にコピー/ペーストできるのに、なぜハード リンクを作成するのか疑問に思われるかもしれません。ファイルへのハード リンクの作成は、ファイルをコピーすることとは異なります。
ファイルをコピーすると、内容が複製されるだけです。したがって、一方のファイル (オリジナルまたはハードリンク) の内容を変更しても、もう一方のファイルには影響しません。
ただし、ファイルへのハード リンクを作成し、どちらかのファイルの内容を変更すると、その変更は両方に反映されます。
source.file を見てみましょう。
$ cat source.file
Welcome to OSTechNix
ソース ファイルには、「OSTechNix へようこそ」という 1 行が含まれています。
source.file
または hardlink.file
に「Welcome to Linux」などの新しい行を追加します。
echo "Welcome to Linux" >>source.file
次に、両方のファイルの内容を確認します。
$ cat hardlink.file
Welcome to OSTechNix
Welcome to Linux
$ cat source.file
Welcome to OSTechNix
Welcome to Linux
ハードリンクの内容を更新する
見る? source.file
に加えた変更は、両方のファイルで更新されます。意味 - 両方のファイル (ソースとハード リンク) が同期します。
いずれかのファイルに加えた変更は、他のファイルにも反映されます。通常、ファイルをコピー/ペーストした場合、他のファイルに新たな変更は表示されません。
詳細については、マニュアルページを確認してください。
man ln
結論
このガイドでは、Linux のソフト リンクとハード リンクとは何か、コマンド例を使用してソフトリンクとハードリンクを作成する方法について説明し、最後にハードリンクと通常のコピー ファイルの違いについて説明しました。
Linux でシンボリック リンク、ソフト リンク、ハード リンクを使用する方法の基本的なアイデアを理解できたでしょうか。