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フィード
良い一日を!