ハードリンクとシンボリックリンク
shadowです。
今回はWindouwsを使っている人ならお馴染みのショートカットについて、
Linuxにはそのショートカットが2種類あるので、詳しく説明したいと思います。
ハードリンクとシンボリックリンクの違い
Linuxにはショートカットの種類として、ハードリンクとシンボリックリンクが存在します。
この2つのリンクの違いについて説明する前にまずは、ファイルのinode番号について書いていきます。
inode番号
Linuxでファイルを作成するとinode番号という一意の番号が割り当てられます。
また、inodeにはファイルの属性情報が格納されています。
・ファイル種別
・ファイルサイズ
・アクセス権
・所有者情報
・リンク
・ブロック番号
$ ls -li sample.txt 7454 -rw-r--r-- 1 user user 0 Aug 9 2019 sample.txt
一番左の7454がinode番号です。
ハードリンク
ハードリンクはファイルに別名をつけるようなものです。
ファイル名A -> ファイルの実体 <- ファイル名B
このようにファイル名は違えど同じファイルの実体(inode)を指しています。
また、ファイルのinodeにアクセスしているため、ファイルが移動しても問題ありません。
そして、異なるファイルシステム上や、ディレクトリにはリンクを作成することが出来ません。
シンボリックリンク
シンボリックリンクはWindowsのショートカットに近い概念です。
シンボリックリンクはハードリンクと違い、ファイルの実体ではなくファイルパスを指します。
シンボリックリンクファイル -> ファイル名 -> ファイルの実体
シンボリックリンクはinodeに依存せず、パスで参照しているので、
ハードリンクと違い、異なるファイルシステム上のファイルや、ディレクトリに対してもリンクを作成することができます。
ただし、パスでアクセスしているため、ファイルが移動するとアクセス不能なデットリンクになってしまいます。
lnコマンド
リンクを作成するにはlnコマンドを使います。
オプションを指定せずにlnコマンドを実行した場合、ハードリンクが作成されます。
-sオプションをつけることで、シンボリックリンクが作成されます。
動かしてみる
ハードリンク
実際に動かしてみます。
$ mkdir -p testdir/sampledir $ touch testdir/sampledir/file.txt $ echo Test > testdir/sampledir/file.txt $ cd sampledir $ ln sampledir/file.txt ./sample_hard $ cat sample_hard Test
sample_hardの中を見てみるとfile.txtと同じ内容になっています。
次はinode番号をチェックしてみます。
$ ls -li sample_hard sampledir/file.txt 7461 -rw-r--r-- 1 root root 5 Aug 9 2019 sample_hard 7461 -rw-r--r-- 1 user user 5 Aug 9 2019 sampledir/file. txt
どちらも同じになっています。
ファイルの移動もしてみたいと思います。
$ mv sampledir/file.txt . $ cat sample_hard Test
移動しても同じ内容を表示しました。
シンボリックリンク
$ mkdir sampledir2 $ touch sampledir2/file2.txt $ echo Test2 > sampledir2/file2.txt $ cat sampledir2/file2.txt Test2 $ ln -s sampledir2/file2.txt ./sample_symbolic $ cat sample_symbolic Test2
シンボリックリンクの中身も同じでした。
こちらもファイルの移動をします。
$ mv sampledir2/file2.txt . $ cat sample_symbolic cat: sample_symbolic: そのようなファイルやディレクトリはありません
こちらはファイルが移動すると参照出来ませんでした。
まとめ
最後にハードリンクとシンボリックリンクの特徴を、ざっくりまとめると以下のようになります。
特徴 | ハードリンク | シンボリックリンク |
---|---|---|
参照 | inode | パス |
異なるファイルシステム | できない | できる |
元ファイルの移動 | 移動しても消えない | 移動すると参照できない |
元ファイルの削除 | 削除しても消えない | 削除すると消える |
以上です。お疲れ様でした。