morito

個人的に勉強したことのメモを投稿していく技術ブログ。最近はWebアプリ開発と量子コンピュータの勉強をしてます。

ハードリンクとシンボリックリンク

リンクとはファイルの別名を構成し、
同じファイルにアクセスできるようにする仕組みです。
Linuxでは2種類のリンクファイルが用意されています。

ハードリンク
  • 元のファイルとリンクファイルでiノードとファイルの実態を共有する仕組み
  • 元のファイルが削除されてもアクセスできる
シンボリックリンク
  • 元のファイルのパスを記録しているリンクファイルを作成する仕組み(Windowsのショートカットと同じ)
  • ディレクトリ宛のリンクを作成できる
  • 異なるファイルシステム宛のリンクを作成できる



実際に使ってみる

リンクをつくるにはlnコマンドを使います

lnコマンド書式

ln [option]  リンク元 リンク

Option


lnコマンドでリンクを作る↓
> touch original.txt
> ls
original.txt
> ln original.txt hard.ln
> ln -s original.txt symbol.ln
> ls -li *.ln
63007659 -rw-r--r--  2 [user]  staff   0  3 21 14:12 hard.ln
63007696 lrwxr-xr-x  1 [user]  staff  12  3 21 14:13 symbol.ln@ -> original.txt

シンボリックリンクls -lで見たときファイルの種類がlになってる

リンクの中身を参照してみると、オリジナルと同じになっている

> echo "test" > original.txt 
> cat hard.ln
test
> cat symbol.ln 
test


リンク元であるオリジナルを消してみる
> rm -f original.txt 
> ls -l *.ln
-rw-r--r--  1 [user]  staff   5  3 21 14:28 hard.ln
lrwxr-xr-x  1 [user]  staff  12  3 21 14:13 symbol.ln@ -> original.txt
> cat hard.ln
test
> cat symbol.ln 
cat: symbol.ln: No such file or directory

ハードリンクは既存のファイルとiノードを共有する仕組みなので,
オリジナルファイルが削除されてもリンクファイルはiノードを引き続き参照できる。
リンクファイルも削除されてリンク数が0になったらiノードが解放される。

シンボリックリンクはオリジナルのパスが記録されているだけなので
オリジナルが削除されたらファイルの内容に参照できなくなる。