ハードリンクとは
Linuxには、ファイルに別名をつけ、異なった名前でファイルにアクセスする仕組みがあります。これをリンクと呼びます。
リンクは2種類あり、ハードリンクとシンボリックリンク(ソフトリンク)が存在します。
ここでは、ハードリンクについて説明します。
Last Update : 2013年10月21日
ハードリンクとは 項目
1. ハードリンクとは
ハードリンクとは、あるファイルのinodeと、そのファイルにつけられた名前とのつながりの事をいいます。
ファイルを作成すると、作成したファイルは当然ファイル名を持ち、データを持ち、また、ファイルに対応したinodeが割り当てられますが、「ファイル」の実態というのは、inodeと実データの部分の事だけで、「ファイル名」というのはディレクトリが管理しています。
ディレクトリは、そのファイル名と、inode番号のつながりをリストとして持ち、システムがそのファイル名へアクセスを試みると、そのファイル名に対応したinode番号を返します。
この「ファイル名とinode番号のつながり」の事をハードリンクといいます。ですので、通常ファイルというのは、最低1つのハードリンクを持ちます。
あるinodeに対して、ハードリンクは複数つくる事ができます。言い換えると、1つのファイルに対して、対応するファイル名を複数持つ事ができるという事です(同じファイルシステム上に限ります)。
また、ディレクトリに対してハードリンクを作成する事はできません。
memo
あるファイルがいくつのハードリンクを持っているかは、「ls -l」で確認する事ができます。
水色の文字の部分が、そのファイルの持つハードリンクの数です。
# ls -l 合計 0 -rw-r--r--. 1 root root 0 9月 27 14:21 2013 test1.txt ← ハードリンクは1個 -rw-r--r--. 2 root root 0 9月 27 14:21 2013 test2.txt ← ハードリンクは2個 -rw-r--r--. 2 root root 0 9月 27 14:21 2013 test2.txt.hardlink ← ハードリンクは2個
memo
複数のファイル名を持っていても、元の名前という考え方はありません。すべてのファイル名が同等の立場にいます。
ファイル名を複数持つ場合は、最後のファイル名が削除された場合のみディスクから実態が消えます。
2. ハードリンクの作成 - lnコマンド
あるファイルに対し、ハードリンクを作成してみます。
ハードリンクを作成するには、「ln」コマンドを使用します。
書式
ln リンク元ファイル リンク先ファイル
※絶対パス、相対パスでの指定も可能
例
ハードリンクを作成し、対応するinode番号を確認します。
# ln test1.txt test1.txt.hardlink ← ハードリンクを作成 # ls -i1 ← inode番号を確認する 129337 test1.txt ←inode番号は、129337 129337 test1.txt.hardlink ←inode番号は、129337
ls の結果から各ファイルが同じinodeを参照している事がわかります。
それぞれのファイルが同じものを参照しています。ファイルの実態が同じなので、どのファイルを指定して変更をくわえても、見かけ上すべてのファイルが変更されたようにみえます。
# echo ABCDE > test1.txt ← test1.txtへ文字列を書き込み
# cat test1.txt
ABCDE
# cat test1.txt.hardlink
ABCDE
test1.txtとtest1.txt.hardlinkの内容は同じ
# echo FGHIJ >> test1.txt.hardlink ← test1.txt.hardlinkへ文字列を書き込み
# cat test1.txt
ABCDE
FGHIJ
# cat test1.txt.hardlink
ABCDE
FGHIJ
ファイルの実態は同じなので、test1.txtとtest1.txt.hardlinkの内容は同じとなります。