LoginSignup
1
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-11-15

ハードリンクとシンボリックリンクについて勉強したメモ

環境: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: -
1
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
1
0