ウェブサイト検索

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.filesoftlink.file の両方のデータを比較してみましょう。

$ cat source.file 
Welcome to OSTechNix
$ cat softlink.file 
Welcome to OSTechNix

シンボリックリンクデータの表示

上記の出力でわかるように、softlink.file には source.file と同じデータが表示されます。

softlink.filesource.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.filesource.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.filesource.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 でシンボリック リンク、ソフト リンク、ハード リンクを使用する方法の基本的なアイデアを理解できたでしょうか。

関連記事