シンボリックリンク
この記事を読んでほしいひと
LPIC level1習得を目ざす、初学者のかたへ。
コマンドの基本的な使い方について、解説をします。
今回の内容
今回は、シンボリックリンクについて解説します。
シンボリックリンクとハードリンクはお互い関連する内容なのであわせて読んでみてください。またリンクについて不安な方はこちらの記事をお読みください。
シンボリックリンクとは
シンボリックリンクとは、リンク先のパスを保持しているファイルです。ハードリンクは実際のデータとファイル名の結びつきを表していましたが、異なるファイルシステムからリンクの作成が行えませんでした。一方シンボリックリンクの場合、異なるファイルシステム上へもリンクの作成を行うことができます。また、ディレクトリに対してもリンクを作成することができます。なので一般的に、シンボリックリンクの方がよく使われています。
下記の図では、ファイルの実体に対してsak1.txtというファイル名が結び付けられていますが(ハードリンク)、その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 -s sak1.txt sak2 #lnコマンドによりsak2というシンボリックリンクを作成する [root@localhost Documents]# ls #Documentsディレクトリ下にはsak1.txtとsak2というシンボリックリンクが存在する sak1.txt sak2 [root@localhost Documents]# cat sak2 #sak2というシンボリックリンクを参照する hoge [root@localhost Documents]# ls -l #lsコマンドで-lオプションを指定してリンク先を確認する -rw-r--r--. 1 root root 5 Aug 31 00:00 file1 lrwxrwxrwx. 1 root root 5 Aug 31 00:00 file2 -> file1
これでシンボリックリンクの作成はできました。シンボリックリンクのリンク先を確認するには、lsコマンドで-lオプションを指定すると、「file2 -> file1」のようにシンボリックリンクが表示されます。
それではリンク元のファイルを削除したらどうなるでしょうか。sak1.txtを削除してsak2が参照できるか確認してみましょう。
[root@localhost Documents]# rm sak1.txt #sak1.txtを削除する [root@localhost Documents]# cat sak2 #sak2を参照する cat: sake2: No such file or directory
シンボリックリンクではリンク元のファイルを削除した場合、シンボリックリンクを参照してもデータにアクセスすることはできなくなります。ファイルの実体に結びつけられているsak1.txtというハードリンクが削除されすべてのハードリンクが削除された場合、ファイルの実体が削除されることになります。またsak2が保持しているパス情報も参照できないことから、エラーが表示されるのです。
(……ここまで読まれた方お疲れさまです。次に話す内容は少し発展的な内容を含むことになります。今までの内容ちょっと難しいなぁ…と感じられた方は確認問題に挑戦してみてください。そして次読むときにぜひ読んでみてください。もちろん初めて読む方でも分かりやすいように書いてあります。では続きをはじめましょう!)
Linuxのファイルシステムで用いられいているext3やext4では、すべてのファイルの実体にiノード番号と呼ばれるものが割りふられています。ここで新たにsak3というファイルとsak4というシンボリックリンクを作成して、iノード番号を確認してみましょう。
[root@localhost Documents]# ls #Documentsディレクトリ下にはsak3とsak4というシンボリックリンクが存在する sak3 sak4 [root@localhost Documents]# ls -il #lsコマンドに-ilというオプションをつけることでiノード番号を表示させることができる 8409166 -rw-r--r--. 1 root root 5 Aug 31 00:00 sak3 8409158 lrwxrwxrwx. 1 root root 5 Aug 31 00:00 sak3 -> sak4
sak3には8409166、sak4には8409158と違うiノード番号が割り振られていることが確認できました。ファイルの実体と結び付けられているリンク元のファイル(sak3のiノード番号)を削除すると、シンボリックリンクでは参照できなくなるのです。
(…というわけで以上難しい内容が終了しました! ファイルの管理にはiノード番号が使われていて、シンボリックリンクでは違うiノード番号が使われているんだなぁ、と理解できたら大丈夫です!)
リンク元のファイルを削除すると、シンボリックリンクからデータにアクセスすることはできない
まとめ
今回は、シンボリックリンクの作成についてお話しました。ハードリンクと関連する部分が多いので、ぜひハードリンクについても読んでみてください。
最後に確認問題で、今回の記事の知識を復習してみましょう。
確認問題
「ln -s fileA fileB」でシンボリックリンクを作成したあと、fileAを違うディレクトリに移動した。この場合、fileBを参照するとどうなるか。