多くのシステムでは、ファイルやディレクトリに別名をつけて、異なった名前で同一のファイルにアクセスできるようになっています。
Ubuntuでは、ハードリンクとシンボリックリンクがあります。
ここの記事では、ハードリンクとシンボリックリンクの違い、作成方法、いつ使うのかを紹介します。
ハードリンク
ハードリンクは、ファイルの実体と同一の実体を参照できるリンクを指します。
コピーしたファイルは、元ファイルとコピーしたファイルで、片方を編集しても、他方に影響はありません。
しかし、ハードリンクは異なり、元ファイルかハードリンクをいずれか変化させると他方も同じように変化してしまいます。
ハードリンクは、あるファイルの完全な複製であると思ってください。
したがって、ハードリンクは、元ファイルと全く同じであるため、リンクを全て削除しないとそのファイルは削除したことにはなりません。
ディレクトリに対して、ハードリンクを作成することはできません。
iノード番号
Linuxでは、ファイルを保存すると、重複しないiノード番号が割り当てられます。
すべてのファイルには対応するiノード番号が存在することになります。
ハードリンクは、このiノード番号が元ファイルと同じであるため区別出来ません。
因みに、コピーしたファイルは、iノード番号が違います。
また、iノード番号とリンク数は、以下のコマンドで確認できます。
$ ls -li
total 10
123456 -rw-r--r-- 3 hoge hoge 1500 Jan 11 10:00 file.txt
123456 -rw-r--r-- 3 hoge hoge 1500 Jan 11 10:00 file 1
123456 -rw-r--r-- 3 hoge hoge 1500 Jan 11 10:00 file 2
上の例では、file.txtをfile 1とfile 2というハードリンクを作成しました。
左端が、iノード番号で、3という数字がリンク数です。元ファイルとハードリンクが2つで3つとなっています。
シンボリックリンク
シンボリックリンクは、元ファイルの場所を指します。
ハードリンクと異なり、元ファイルを削除すると、シンボリックリンクは、ファイルの実体が見つからずエラーメッセージが出力されます。
ディレクトリに対して、シンボリックリンクを作成することができます。
リンクの作成
lnコマンドでリンクを作成します。
オプションsの有無でハードリンクかシンボリックリンクかになります。
ハードリンクの場合
$ ln リンク元(ファイルの実体) リンクファイル名
シンボリックリンクの場合
$ ln -s リンク元(ファイルの実体) リンクファイル名
シンボリックリンクのコピー
コピーと言えば、cpコマンドだと思いますが、シンボリックリンクをそのままcpコマンドを使うと、リンク元の内容をコピーしてしまうため、機能しません。
cpコマンドにdオプションをつけると、シンボリックリンク自体をコピーできます。
いつ使うの
ハードリンクの場合
ファイルの完全な複製であるため、もし、誤って削除した際のバックアップです。
また、編集した最新の状態であるため、定期的にバックアップを取る必要もありません。
シンボリックリンクの場合
容量が大きいデータファイルを作業ディレクトリに持ってくるのは、容量をたくさん使ってしまいます。
そこで、シンボリックリンクを作成し、少ない容量でデータファイルを作業ディレクトリに置くときに用います。
まとめ
ハードリンクは、あるファイルの完全な複製。
シンボリックリンクは、あるファイルの場所を示すもの。
おススメ書籍
Linuxを学ぶ上で、おススメの書籍を紹介します。
この書籍は、LPICというLinuxのプロフェッショナルとして認定される資格の教科書になります。
資格の教科書ですが、Linuxを学ぶ上でもってこいの書籍です。自分は、この書籍でLPICを取得しました。
![](https://images-fe.ssl-images-amazon.com/images/I/51kkwZ88wIL._SL160_.jpg)
Linux教科書 LPICレベル1 Version5.0対応