これまで、lnコマンドを使っていて、なぜ「-s」オプションを付けて、シンボリックリンクとするのか、今までよく分かっていなかった。
そもそもシンボリックリンクしか使っておらず、lnコマンドのデフォルトでのリンクファイルは、一体何のために存在するのかよく分かっていなかったが、少しだけ理解できてきたので、分かった事を分かった時に分かったまま書いておく事で、自分の理解を残しておこうと思う。
シンボリックリンクとハードリンクの違い
この内容は、ググってみると、たくさんのページで説明されている事がよくわかる。
どのページを見ても大体の説明は同じで、以下の通りだ。
■シンボリックリンク
元ファイルに対してのインスタンスファイル
■ハードリンク
i-node番号が同じで別の場所、別のファイル名に存在するファイル
どちらも、リンクファイルであることには違いないのですが、以下のような特製の違いがあります。
■シンボリックリンク
フォルダのリンクが作成できる。
元ファイルを消すとシンボリックリンクは残るが参照するデータが消える
■ハードリンク
フォルダのリンクが作成できない
ファイル自体にリンク数という属性が付随する
リンク数が2つ以上のファイルは、どちらかを削除しても、リンク数が減るだけでデータはリンク数0にならない限り削除されない
これでわかる人はいいのですが、読んだだけではわからない人は次の使い方サンプルを見て理解してください。
リンクの使い方サンプル
シンボリックリンク
特定のディレクトリをシンボリックリンクにする事で、WEBサービスのデプロイを簡易に行う事が可能になる。
階層イメージ
/dir
┝ public_html -> /dir/001
┝ 001/
┗ 002/
# 下記コマンドで内容を一式変更できる
$ ln -s 002 public_html
ハードリンク
正直、ハードリンクはあまり使い道が無く、大きな動画ファイルなどを、ディスク内のデータを増やさずに、複数ディレクトリに配置するような場合に有効です。
ただし、データコピーではなく、どちらか片方のデータを修正してしまうと、もう片方も変更されてしまうので、もしかすると使いづらいかもしれません。
WEBサーバーなどの場合は、排他処理などをして細かなファイルの上書きも徹底的に同時書き込みを禁止しなくてはいけないので、ハードリンクは、「極力書き換えをしないデータファイル」に対して設置するのが最適でしょう。
ジャンクションリンクもあるよ
「ハードリンク」に対して、それ以外は「ソフトリンク」と呼びますが、「シンボリックリンク」と「ジャンクションリンク」です。
ジャンクションリンクは、フォルダ専用のシンボリックリンクだと考えると分かりやすいでしょう。
細かな違いはありますが、ハードとソフトの違いは、ハードウェアとしてのi-nodeに影響すると覚えておくといいでしょう。
でも、これらを使う事を強いられる事ってそんなに現場ではないでしょう。
どちらかと言うと、効率的なデータ階層を構築したい時に、これらの仕様を理解してデータ活用できるようにするのがいいでしょう。
0 件のコメント:
コメントを投稿