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

ディレクトリとは? iノードとは?

ディレクトリとは? iノードとは?

ディレクトリは、ディレクトリに所属するファイルの

  • ファイル名
  • iノード番号

を記録したファイル。

ディレクトリもファイルの一種なのらしい。

 

iノードは

  • iノード番号
  • ファイル種別
  • ファイルサイズ
  • アクセス権
  • 所有者
  • 所有グループ
  • 実体の保存場所

などの情報のこと。Linux上のファイルはすべてiノードで管理されているらしい。

 

つまり

  • ディレクトリ:
    →「こんな名前のファイルがありますよ!詳しい情報はここに書いてますよ!」な情報を保存するファイル
  • iノード:
    →ファイル名を除く、ファイルについての全ての情報のこと。

みたいな感じ。

ハードリンクとは?

ハードリンクとは?

図のとおり。

シンボリックリンクとは?

シンボリックリンクとは?

図のとおり。

違い、共通点

ハードリンク シンボリックリンク
作り方 ln hoge1.txt hoge2.txt ln -s hoge1.txt hoge2.txt
ファイルへの作成はできる?
ディレクトリへの作成はできる?
別のパーティションへの作成はできる?
アクセス権は? それぞれ別々のアクセス権が適用される リンク元のアクセス権が適用される
元ファイルを消してもリンクからアクセスできる? できる できない
リンクを消すと元ファイルはどうなる?

残る

ファイルの種類は?

-と表示される

lと表示される

基本的にシンボリックリンクを使っておけばOKらしい。

 

というかハードリンクって逆にどういう場合に使えばいいんだろう?

・・と思って調べてみたら以下のようなケースで有効活用されてるらしい。

私が知っている中で、ハードリンクを最も効果的に使っているのは Cyrus IMAP Server と呼ばれる IMAP サーバのソフトで、このソフトの場合、基本的にはメール1通が1ファイルで保存されるのですが、複数の人に同じメールを送った場合、保存されるのは1通分で、各ユーザのメールボックスのファイルとしてハードリンクを作ります。

こうすると、人数分のファイルを作らないので、それだけディスクの節約になるのと同時に、誰かがメールを削除しても、全く問題ありません。もし、これをシンボリックリンクにしようとすると、ユーザのメールボックスとは無関係にファイルを作って、ユーザのメールボックスにはシンボリックリンクを置く、といったことになると思いますが、じゃぁ、全員が削除したときに、この本物のファイルを削除するのはどうするか? という問題が残ります。

ハードリンクであれば、全員が削除して本当に必要が無くなったときには、本体も削除されていることになるので、その点でもシンボリックリンクよりスマートです。

引用:Linuxのシンボリックリンクとハードリンクはどう使い分けますか… – 人力検索はてな

 

おわり

Linux
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました