ハードリンクとシンボリックリンクについて勉強したメモ
環境:CentOS7
登場する用語
ファイル
コンピュータ上で記録・管理される情報の単位
通常ファイルとリンクファイルが登場iノード (index node)
ファイルを管理するためのデータ(通常ファイル作成時に、対応したiノードができる?)
サイズ、日時、ディスク上のデータの場所などが書かれているiノード番号
iノードを識別するための番号リンク
iノード番号とファイル名の対応付けハードリンク
1つのiノードに複数のファイル名をリンクさせる仕組みシンボリックリンク
ファイルに別名をつける仕組み
ハードリンク
ファイルとそのファイルのハードリンクを作成↓
# echo hello > text //"hello"と書き込んだ textという名前のファイルを作成
# ln text text.hard //testファイルのハードリンクをtest.hardという名前で作成
# ls
text text.hard //textとtext.hardができていることを確認
catコマンドで中身を確認↓
# cat text //textファイルの中身を確認
hello
# cat text.hard //text.hardファイルの中身を確認
hello
ls -iでiノード番号を確認すると同じiノード番号が対応付けられていることがわかる↓
# ls -i
1331910 text 1331910 text.hard
statコマンドでファイルの属性を確認すると全く同じ↓
※ハードリンクのtext.hardの方も「regular file」となっている
# stat text
File: 'text'
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 6dh/109d Inode: 1331910 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-11-15 02:59:31.305456000 +0000
Modify: 2020-11-15 02:57:30.713465000 +0000
Change: 2020-11-15 02:58:14.329159000 +0000
Birth: -
# stat text.hard
File: 'text.hard'
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 6dh/109d Inode: 1331910 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-11-15 02:59:31.305456000 +0000
Modify: 2020-11-15 02:57:30.713465000 +0000
Change: 2020-11-15 02:58:14.329159000 +0000
Birth: -
ハードリンクでは元のファイルを削除しても問題なし↓
# ls
text text.hard //ファイルが2つあることを確認
# rm text
rm: remove regular file 'text'? y //元のファイルtextを削除
# ls
text.hard //textが削除されたことを確認
# cat text.hard //text.hardの中を確認
hello
シンボリックリンク
ファイルとそのファイルのシンボリックリンクを作成↓
# echo hello2 > text2 //"hello"と書き込んだ text2という名前のファイルを作成
# ln -s text2 text.sym //testファイルのシンボリックリンクをtest.symという名前で作成
# ls
text.sym text2 //textとtext.symができていることを確認
catコマンドで中身を確認↓
# cat text2
hello2
# cat text.sym
hello2
ls -iでiノード番号を確認すると異なるiノード番号が対応付けられていることがわかる↓
# ls -i
1331913 text.sym 1331912 text2
statコマンドでファイルの属性を確認すると異なる結果が表示される↓
※シンボリックリンクのtext. symの方は「File: 'text.sym' -> 'text2'」「symbolic link」となっている
# stat text2
File: 'text2'
Size: 7 Blocks: 8 IO Block: 4096 regular file
Device: 6dh/109d Inode: 1331912 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-11-15 05:29:34.474558000 +0000
Modify: 2020-11-15 05:26:48.352110000 +0000
Change: 2020-11-15 05:26:48.352110000 +0000
Birth: -
# stat text.sym
File: 'text.sym' -> 'text2'
Size: 5 Blocks: 0 IO Block: 4096 symbolic link
Device: 6dh/109d Inode: 1331913 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-11-15 05:27:06.504110000 +0000
Modify: 2020-11-15 05:27:04.357110000 +0000
Change: 2020-11-15 05:27:04.357110000 +0000
Birth: -
シンボリックリンクでは元のファイルが消えるとダメ↓
# ls
text.sym text2 //ファイルが2つあることを確認
# rm text2
rm: remove regular file 'text2'? y //元のファイルtext2を削除
# ls
text.sym //text2が削除されたことを確認
# cat text.sym
cat: text.sym: No such file or directory //text.hardの中を確認しようとするとファイルがないと言われる
//statコマンドで見ると削除したtext2を探しにいってファイルがないなっていたことがわかる「File: 'text.sym' -> 'text2'」
# stat text.sym
File: 'text.sym' -> 'text2'
Size: 5 Blocks: 0 IO Block: 4096 symbolic link
Device: 6dh/109d Inode: 1331913 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-11-15 05:27:06.504110000 +0000
Modify: 2020-11-15 05:27:04.357110000 +0000
Change: 2020-11-15 05:27:04.357110000 +0000
Birth: -