0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ハードリンクとシンボリックリンクの違い

Posted at

シェルにおけるリンクについて

シェルにおいて、ファイルのリンク付けを行うには、lnコマンドを使用する。リンク付けを行うことで、ファイルの共有などを行うことができる。

そのうち、ハードリンクとシンボリックリンクの二つが存在する。

ハードリンク

一つのファイルに複数の別の名前のファイルを作成することができる。それぞれは共有されたおり、ファイルの中身が編集されても、共有する。しかし、リンク元やリンク先のファイルが削除されても、残ったファイルは利用できる。

ハードリンクの中身

zsh
$ cat a.txt
hoge
$ ln a.txt b.txt
#a.txtのはハードリンクのb.txtを作成
$ cat b.txt
hoge #a.txtの内容と共有

リンク元を削除

zsh
$ rm a.txt
$ cat b.txt
hoge

ファイルの編集

zsh
$ cat > a.txt
puge
$ cat b.txt
puge #hogeからpugeに変化

シンボリックリンク

シンボリックリンクの作成

zsh
$ ln -s z.txt y.txt #z.txtのシンボリックリンクY.txtを作成

リンク元ファイルの削除

zsh
$ rm z.txt
$ cat y.txt
cat: y.txt: No such file or directory 
#y.txtのオリジナルであるz.txtが存在しないため、アクセス不可

y.txtファイルを起動しても、実際はz.txtの中にアクセスしていることとなる。

相違点

ハードリンクでは、リンク元を削除しても、リンク付けされたファイルはアクセス可能だ。しかし、シンボリックリンクでは、リンク元のファイルを削除した場合、リンク付けされたファイルもアクセス不可となってします。これは、リンク付けされたファイルにアクセスすることは、リンク元のファイルにアクセスすることと同義であるためだとわかる。

ハードリンク

ハードリンク.drawio.png

シンボリックリンク

シンボリックリンク.drawio.png

まとめ

日々、複数のユーザを使用しているため、それぞれのユーザでファイルを共有したいという考えがある。そのためのシェルスクリプト作成にとって、ハードリンクとシンボリックリンクの違いを明確に理解することは重要だと思う。シェルは、イマイチ寡黙なプログラミング言語(スクリプト言語)であるため、小さな挙動の相違を深く理解することは、UNIXへの理解に繋がるだろう。その点を意識して、今後も勉強に取り組んでいきたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?