シェルにおけるリンクについて
シェルにおいて、ファイルのリンク付けを行うには、ln
コマンドを使用する。リンク付けを行うことで、ファイルの共有などを行うことができる。
そのうち、ハードリンクとシンボリックリンクの二つが存在する。
ハードリンク
一つのファイルに複数の別の名前のファイルを作成することができる。それぞれは共有されたおり、ファイルの中身が編集されても、共有する。しかし、リンク元やリンク先のファイルが削除されても、残ったファイルは利用できる。
ハードリンクの中身
$ cat a.txt
hoge
$ ln a.txt b.txt
#a.txtのはハードリンクのb.txtを作成
$ cat b.txt
hoge #a.txtの内容と共有
リンク元を削除
$ rm a.txt
$ cat b.txt
hoge
ファイルの編集
$ cat > a.txt
puge
$ cat b.txt
puge #hogeからpugeに変化
シンボリックリンク
シンボリックリンクの作成
$ ln -s z.txt y.txt #z.txtのシンボリックリンクY.txtを作成
リンク元ファイルの削除
$ rm z.txt
$ cat y.txt
cat: y.txt: No such file or directory
#y.txtのオリジナルであるz.txtが存在しないため、アクセス不可
y.txt
ファイルを起動しても、実際はz.txt
の中にアクセスしていることとなる。
相違点
ハードリンクでは、リンク元を削除しても、リンク付けされたファイルはアクセス可能だ。しかし、シンボリックリンクでは、リンク元のファイルを削除した場合、リンク付けされたファイルもアクセス不可となってします。これは、リンク付けされたファイルにアクセスすることは、リンク元のファイルにアクセスすることと同義であるためだとわかる。
ハードリンク
シンボリックリンク
まとめ
日々、複数のユーザを使用しているため、それぞれのユーザでファイルを共有したいという考えがある。そのためのシェルスクリプト作成にとって、ハードリンクとシンボリックリンクの違いを明確に理解することは重要だと思う。シェルは、イマイチ寡黙なプログラミング言語(スクリプト言語)であるため、小さな挙動の相違を深く理解することは、UNIXへの理解に繋がるだろう。その点を意識して、今後も勉強に取り組んでいきたい。