kazmax - Linux で自宅サーバー

ハードリンクとは

Linuxには、ファイルに別名をつけ、異なった名前でファイルにアクセスする仕組みがあります。これをリンクと呼びます。

リンクは2種類あり、ハードリンクとシンボリックリンク(ソフトリンク)が存在します。

ここでは、ハードリンクについて説明します。

Last Update : 2013年10月21日

ハードリンクとは 項目

  1. ハードリンクとは
  2. ハードリンクの作成 - lnコマンド

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の内容は同じとなります。

Linuxファイルシステム 関連記事
Linux 基礎知識 関連記事