Linuxではファイルの参照方法として「ハードリンク」と「シンボリックリンク」が存在します。
これらはファイルシステムの管理に密接に関わる概念で、用途や動作が異なります。
この記事では、これらの違い、使い分け、参照先やinode
の関係について掘り下げて解説します。
Linuxの高度なファイル操作(ln/rsync/tar/ddコマンド)
Linuxでのファイル操作やバックアップ作業は、データ保護や効率的なシステム運用において重要です。この記事では、ln、rsync、tar、ddのコマンドを中心に、具体的な使用…
目次
ハードリンクとは
ハードリンクは、同じファイルデータに対して複数の名前(リンク)を付与するものです。
ハードリンクを作成する際、元のファイルとリンク先は同じinode
番号を持つため、
どちらも同じ実体を指し示しています。
つまり、ハードリンクは一つのファイルに対して複数の参照名を提供し、
ファイルそのものを完全にコピーするわけではありません。
ハードリンクの特徴
- 同じファイルに複数の名前がつく:元のファイルとハードリンクは同一のデータを参照します。
- 同じ
inode
番号を持つ:ファイルシステム上、同じinode
を指すため、ファイルのデータが変更されるとリンク元とリンク先の両方に影響します。 - リンク元が削除されてもファイルは削除されない:一つのリンクを削除しても、他のリンクが残っている限り、ファイルデータは保持されます。
- 異なるファイルシステムでは作成できない:ハードリンクは同じファイルシステム内でしか機能しません。
ハードリンクの例
ln file1 link1
上記のコマンドでfile1
のハードリンクをlink1
という名前で作成します。
どちらも同じファイルデータを指します。
シンボリックリンク(ソフトリンク)とは
シンボリックリンクは、元のファイルの「パス」を参照する特殊なファイルです。
シンボリックリンク自体は元のファイルとは別のinode
番号を持ち、
実体ではなく元のファイルの場所(パス)を指します。
そのため、元のファイルが削除されるとシンボリックリンクは無効になります。
シンボリックリンクの特徴
- 元ファイルへのパスを参照:リンクは元のファイルの場所を指します。
- 異なるファイルシステムでも使用可能:異なるディスクやパーティション上でもリンクを作成できます。
- 独自の
inode
を持つ:シンボリックリンクは元ファイルとは別のinode
を持ち、ファイルのデータではなくパス情報を持ちます。 - 元ファイルが削除されるとリンクが切れる:元のファイルが削除されると、リンクが機能しなくなり「壊れたリンク」になります。
シンボリックリンクの例
ln -s /path/to/file link_name
このコマンドで、/path/to/file
のシンボリックリンクをlink_name
として作成します。
ハードリンクとシンボリックリンクの違い
項目 | ハードリンク | シンボリックリンク |
---|---|---|
参照対象 | ファイル本体 | ファイルのパス |
inode | 同じinode を共有する | 別のinode を持つ |
ディスク上の制約 | 同一ファイルシステム内でのみ作成可能 | 異なるファイルシステムでも作成可能 |
元ファイル削除の影響 | 他のリンクが残っていれば問題なし | リンク切れとなる(無効化) |
使い分け
- ハードリンクを使うべき場合: 同一ファイルシステム内で、同じファイルを複数の場所から参照したい場合に使用します。特に、元ファイルを削除しても他の場所からアクセスできるようにしたいときに便利です。
- シンボリックリンクを使うべき場合: 異なるファイルシステム間やパスの指定が重要な場合に使います。また、ディレクトリのリンクはシンボリックリンクのみ可能です。
inode
とは?
inode
は、Linuxのファイルシステムがファイルの
メタデータ(サイズ、アクセス権、作成日時など)を管理する構造体です。
ファイルやディレクトリの実体データに関する情報はすべてinode
に記録されています。
ハードリンクは同じinode
を共有しますが、シンボリックリンクは元のファイルとは異なるinode
を持ち、パス情報のみを保存します。
まとめ
- ハードリンクは同じファイルを複数の名前で参照し、元のファイルが削除されてもデータは残ります。
- シンボリックリンクは元のファイルのパスを指し示すため、異なるファイルシステム間でも使用可能ですが、元ファイルが削除されるとリンクが切れます。