ハードリンク
この記事を読んでほしいひと
LPIC level1習得を目ざす、初学者のかたへ。
コマンドの基本的な使い方について、解説をします。
今回の内容
今回は、ハードリンクについて解説します。
ハードリンクとシンボリックリンクはお互い関連する内容なのであわせて読んでみてください。またリンクについて不安な方はこちらの記事をお読みください。
ハードリンクとは
ハードリンクとは、実際のデータとファイル名の結びつきのことを表します。通常、1つのファイルには1つのファイル名がつけられますが、1つのファイルに対して複数のファイル名を結びつけることもできます。下記の図では、実際のデータに対して「sak1.txt」というファイル名をつけることができますが(ハードリンク)、さらに「sak2」というファイル名をつけることもできます(ハードリンク)。
ハードリンクの作成
それではハードリンクを作成してみましょう。まずsak1.txtをDocumentsディレクトリ下に作成して、hogeとテキストを入力しておきます。そしてsak2というハードリンクを作成してみます。
[root@localhost Documents]# touch sak1.txt #sak1.txtをDocumentsディレクトリ下に作成する [root@localhost Documents]# vi sak1.txt #viコマンドによりsak1.txtにhogeを入力を行う [root@localhost Documents]# cat sak1.txt #catコマンドによりsak1.txtの内容を確認する hoge [root@localhost Documents]# ln sak1.txt sak2 #lnコマンドによりsak2というハードリンクを作成する [root@localhost Documents]# ls #Documentsディレクトリ下にはsak1.txtとsak2が存在する sak1.txt sak2 [root@localhost Documents]# cat sak2 #sak2というハードリンクを参照する hoge
これでハードリンクの作成はできました。「sak1.txt」と「sak2」は同じファイルを表しています。なので「sak1.txt」を変更した場合は、「sak2」にもその変更内容が反映されています(演習問題参照)。
次に、リンク元のファイルを削除したらどうなるでしょうか。リンク元のファイルであるsak1.txtを削除して、sak2が参照できるか確認してみましょう。
[root@localhost Documents]# rm sak1.txt #sak1.txtを削除する rm: remove regular file 'sak1.txt'? yes #yesと入力する [root@localhost Documents]# cat sak2 #sak2を参照する hoge
リンク元のファイルを削除しても、作成したハードリンクからファイルの実体を参照できることが確認できました。ただこのハードリンクにも欠点があり、異なるファイルシステム上からリンクの作成が行えません。またディレクトリをもとにリンクを作成することができません。一方シンボリックリンクでは、異なるファイルシステム上からリンクの作成が行え、またディレクトリに対してもリンクを作成することができます。
(……ここまで読まれた方お疲れさまです。次に話す内容は少し発展的な内容を含むことになります。今までの内容ちょっと難しいなぁ…と感じられた方は演習問題に挑戦してみてください。そして次読むときにぜひ読んでみてください。もちろん初めて読む方でも分かりやすいように書いてあります。では続きをはじめましょう!)
Linuxのファイルシステムで用いられいているext3やext4では、すべてのファイルの実体にiノード番号と呼ばれるものが割りふられています。このiノード番号とファイル名の結びつきををハードリンクと呼んでいたのです! ここで新たにsak3というファイルとsak4というハードリンクを作成して、iノード番号を確認してみましょう。
[root@localhost Documents]# ls #Documentsディレクトリ下にはsak3とsak4というハードリンクが存在する sak3 sak4 [root@localhost Documents]# ls -il #lsコマンドに-ilというオプションをつけることでiノード番号を表示させる 8409177 -rw-r--r--. 2 root root 5 Aug 31 00:00 file1 8409177 -rw-r--r--. 2 root root 5 Aug 31 00:00 file2
どちらも同じiノード番号8409177であることが確認できました。これはシンボリックリンクと関連する知識なのでなので覚えておいてください。
(…というわけで以上難しい内容が終了しました! ファイルにはiノード番号が使われていて、ハードリンクでは同じiノード番号が使われているんだなぁと理解できたら大丈夫です!)
リンク元のファイルを削除しても、ハードリンクは参照できる。
まとめ
今回は、ハードリンクの作成についてお話しました。シンボリックリンクと関連する部分が多いので、ぜひシンボリックリンクについても読んでみてください。
最後に演習問題で、今回の記事の知識を復習してみましょう。
演習問題
sak1.txtの内容をfugaに変更したあと、sak2を参照してfugaに変更されていることを確認してください。