はじめに
ファイルの管理をしていると時々、「デスクトップから特定の実行ファイルにアクセスできるようにしたい」と思うことがあります。その際に使用するのは恐らくリンクになるでしょう。
リンクとはファイルやディレクトリに別名をつけ、同じファイルにアクセスできる仕組みです。
また、リンクには「ハードリンク」、「シンボリックリンク」の2種類があります。
以降、想定するOSをLinuxとしてそれぞれの特徴をまとめていきます。
ハードリンク
Linuxでは、ファイルを保存すると「iノード」と呼ばれるファイル固有の番号が割り当てられます。
iノードにはファイルのメタ情報(アクセス権、サイズ等)が関連付けられることになります。
ハードリンクは直接ファイルの実体を参照するリンクになります。
そのため、ある一つのハードリンクからファイル実体を参照し変更を加えると、同一のファイル実体を参照するすべてのハードリンクに影響を与えることになります。
例として、まずiノード番号が「x」のファイル実体があり、そのファイルを参照するハードリンク「alink」、「blink」があるとします。
- 「alink」からファイル実体にアクセスして変更を加えて保存します。
- 「blink」からファイル実体にアクセスして読み取ります。
- 「alink」と「blink」は同じファイル実体(iノード番号x)を参照しているので、変更が反映された状態で読み取りを行う事になります。
ハードリンクが複数作成されている場合、そのすべてのハードリンクを削除するまでファイル実体は削除されません。
シンボリックリンク
シンボリックリンクはファイル実体を参照するのではなく、ファイル実体を参照するリンク元へのポインタを保持することになります。
リンク元のファイルを削除した場合、シンボリックリンクにアクセスするとエラーになります。
まとめ
最後にハードリンクとシンボリックリンクの使い分けポイントをまとめて本記事を終わりにします。
- ファイルシステムを跨ぐかどうか
- 複数のファイルシステム間でリンクを作成したい場合はシンボリックリンクを使います。
- 同じファイルシステム内であればハードリンクでもシンボリックリンクでも良いです。
- ファイルが削除された場合
- 元のファイルが削除されてもリンクを有効にしたい場合はハードリンク。
- 元のファイルが削除されたらリンクも不要になる場合はシンボリックリンク。
- ディレクトリへのリンク
- ディレクトリにリンクを作成する必要がある場合はシンボリックリンクを使用します(ハードリンクではディレクトリへのリンクは作成できません)
ご覧いただきありがとうございました。