のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

lnコマンド ハードリンクとシンボリックリンク

Sponsored Links

皆さんこんにちは
お元気ですか?い、いかん胃が、胃が…

さて、皆さん色々なものでリンクを作成しています。

リンクとは

Windowsのショートカットみたいなイメージです。
つまり、場所だけ記録してあって、飛ぶことができます。
因みに、リンクの種類には2種類あり、ハードリンクとシンボリックリンクがある。

ハードリンク

ファイルの実体を指し示して共有する。(inodeの共有)

※inode番号
ファイルやディレクトリに割り振られる、重複しない番号
ユーザーID,グループID,更新日時,Permission,ファイル生成時間、更新日時

iノード(inode)とは

シンボリックリンク

ファイルのパスを示す擬似的なファイル。
つまり、元ファイルがなくなると中身を見ることができません。

2つのリンクの違い

現在、以下の様なディレクトリ構造になっているとします。
2つのリンクを実際にやってみましょう。

ls
test.txt

ハードリンク

コマンドの流れはハードリンクを作り、ファイル詳細を確認、元ファイルを消し、内容を見てるか確認する。

ln text.txt hardlink.txt
ls -li
925325541 -rw-r--r--  2 Tereka  staff  8  6 27 10:06 hardlink.txt
925325541 -rw-r--r--  2 Tereka  staff  8  6 27 10:06 text.txt
rm text.txt
cat hardlink.txt

inodeを共有しているので、マスターを壊してもリンクカウントが0にならないので
ファイル自体を閲覧することができます。

シンボリックリンク

コマンドの流れは上記と同様ですが、ハードリンクでなくシンボリックリンクを作る。

ln -s text.txt symbolic_link.txt
ls -li
925332357 lrwxr-xr-x  1 Tereka  staff  8  6 27 10:12 symbolic_link.txt -> text.txt
925325541 -rw-r--r--  1 Tereka  staff  8  6 27 10:06 text.txt
cat symbolic_link.txt  #中身は見れます。
rm text.txt 
cat symbolic_link.txt 
cat: symbolic_link.txt: No such file or directory

こちらは、ファイルパスを参照しているので、大元のファイルが消されると自動的にリンクも無効になります。

まとめ

端的に言うと、ハードリンク=コピーとシンボリックリンク=リンクの違いです。