What is Soft Link And Hard Link In Linux?

シンボリックリンクまたはソフトリンクは、オリジナルファイルへの実際のリンクであり、一方ハードリンクはオリジナルファイルのミラーコピーです。 元のファイルを削除すると、ソフト リンクは存在しないファイルを指すので、何の価値もありません。 しかし、ハードリンクの場合は、全く逆です。 たとえ元のファイルを削除しても、ハードリンクには元のファイルのデータが残っています。

一言で言えば、ソフトリンクは

  • ファイルシステムを横断できる、
  • ディレクトリ間をリンクできる、
  • 元のファイルとはinode番号やファイル権限が異なる、
  • 権限が更新されない、
  • 元のファイルのパスだけを持っていて中身は持っていない、です。

A hard Link

  • はファイルシステムの境界を越えることができません(すなわち、ファイルシステムの境界を越えることができません)。ハードリンクは同じファイルシステム上でしか動作しない)、
  • ディレクトリをリンクできない、
  • 元のファイルと同じ inode 番号およびパーミッションを持つ、
  • 元のファイルのパーミッションを変更すると、パーミッションが更新される、
  • 元のファイルの実際のコンテンツを持ち、元のファイルが移動または削除されても、コンテンツを表示できるようになる、などです。

まだ理解できない?

ソフトリンクまたはシンボリックリンクの作成

「test」という空のディレクトリを作成しましょう。

$ mkdir test

「test」ディレクトリに移動します。

$ cd test

ここで、以下のようなデータを含むsource.fileというファイルを新規作成します。

$ echo "Welcome to OSTechNix" >source.file

ソースファイルのデータを表示してみましょう。

$ cat source.fileWelcome to OSTechNix

さて、ソースファイルは、以下のようになります。

次に、source.fileへのシンボリックリンクまたはソフトリンクを作成します:

$ ln -s source.file softlink.file

ソースファイルとソフトリンクの両方のデータを比較してみましょう。

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

上の出力にあるように、softlink.file は source.file と同じデータを表示しています。

softlink の inode と permissions を確認してみます。

$ ls -lia

サンプル出力:

total 1211665675 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.file11665692 -rw-rw-r-- 1 sk sk 21 Oct 17 11:39 source.file

上のスクリーンショットにあるように、inode 番号 (11665731 vs 11665692) とファイルのパーミッション (lrwxrwxrwx vs -rw-r–r–) は、 softlink.file でも違っていますね。したがって、ソフトリンクは元のファイルと同じinode番号とパーミッションを共有していないことが証明されます。

では、元のファイル (つまり source.file) を削除して、どうなるか見てみましょう。

$ rm source.file

コマンドを使用して softlink.file の内容を確認します:

$ cat softlink.file

サンプル出力:

cat: softlink.file: No such file or directory

上記のとおり、元のファイル(つまり source.file )を削除すると softlink.file というファイルまたはディレクトリは存在しないことが確認できます。 つまり、ソフト リンクは元のファイルを指す単なるリンクであることが理解できました。 ソフトリンクは、ファイルへのショートカットのようなものです。

すでにご存知のように、ソフトリンクを削除しても、元のファイルは利用可能です。

Suggested read:

  • How To List Symlinks On Linux
  • How To Find Broken Symlinks And Delete Them On Linux

Creating Hard Link

sourceというファイルを作成する。

$ echo "Welcome to OSTechNix" >source.file

ファイルの内容を確認してみましょう。

$ cat source.fileWelcome to OSTechNix

これでsource.fileが作成されました。

では、次のようにsource.fileへのハードリンクを作成しましょう。

$ ln source.file hardlink.file

ハードリンク.fileの内容を確認してください。

$ cat hardlink.fileWelcome to OSTechNix

ハードリンク.fileにはsource.fileと同じデータが表示されていることが分かりますね。

hardlink.fileとsource.fileのinodeとパーミッションを確認してみます。

$ ls -lia

サンプル出力:

total 1611665675 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.file11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file

これで、hardlink.fileとsource.fileはどちらもinode番号 (11665692) とファイル権限 (-rw-r–r–) は同じであることが分かります。

Note: source.file のパーミッションを変更すると、同じパーミッションが hardlink.file にも適用されます。

$ rm source.file

コマンドでhardlink.fileの内容を確認:

$ cat hardlink.file

サンプル出力:

上記のように、ソースファイルを削除してもhardlink.fileの内容を見ることができますね。 したがって、ハード リンクは元のファイルの同じ inode 番号、権限、データを共有していることが証明されました。

では、ハード リンクと通常のコピーされたファイルの違いは何でしょうか。

元のファイルを簡単にコピー/貼り付けできるのに、なぜハード リンクを作成するのだろうと疑問に思うかもしれません。

ファイルをコピーすると、コンテンツが複製されるだけです。 したがって、1 つのファイル (オリジナルまたはハード リンクのいずれか) のコンテンツを変更しても、もう 1 つのファイルには何の影響もありません。

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 OSTechNixWelcome to Linux
$ cat source.file Welcome to OSTechNixWelcome to Linux

見ましたか? 先ほどsource.fileで行った変更は、両方のファイルで更新されています。 つまり、両方のファイル (ソースとハードリンク) が同期されます。 どちらかのファイルで行った変更は、もう一方のファイルにも反映されます。

より詳細な情報は、マニュアルページを参照してください。 シンボリックリンク、ソフトリンク、ハードリンクについて基本的なことがお分かりいただけたでしょうか。

お立ち寄りありがとうございました。

Help us to help you:

  • Subscribe to our Email Newsletter : Sign Up Now
  • サポート OSTechNix : Donate Via PayPal
  • 無料電子ブックとビデオをダウンロード : OSTechNix on TradePub
  • 私たちとつながりましょう。 Reddit|Facebook|Twitter|LinkedIn|RSSフィード

良い一日を!

コメントを残す

メールアドレスが公開されることはありません。