ln(LPIC)


ln

ファイルへのリンクを作成するコマンドです。

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

複数の実名を付ける処理がハードリンクです。 ハードリンクの場合、複数あるファイル名はどれも対等なものとなります。 ただしハードリンクは異なるディレクトリ間で作成することはできません。 シンボリックリンクは別名を付けることに相当します。 シンボリックリンクを作成すると新たにファイルが生成され、リンク先のファイル名とパスが保持されます。

具体例で説明します。 まずはファイルを作成します。

$ touch file.txt

ファイルの詳細を確認します。

$ ls -li file.txt
393491 -rw-r--r-- 1 root root 0 Aug  8 01:38 file.txt

ハードリンクを作成します。

$ ln file.txt file-hard.txt

2つのファイルの詳細を確認します。

$ ls -li file.txt
$ ls -li file-hard.txt
393491 -rw-r--r-- 2 root root 0 Aug  8 01:38 file.txt
393491 -rw-r--r-- 2 root root 0 Aug  8 01:38 file-hard.txt

ハードリンクではiノードの値が共に 393491 であることがわかります。 またハードリンクを作成したことで、リンク数が1から2へと増えていることがわかります。

次にシンボリックリンクを作成します。

$ ln -s file.txt file-symbolic.txt

2つのファイルの詳細を確認します。

$ ls -li file.txt
$ ls -li file-symbolic.txt
83849756 -rw-r--r--  3 snorlax  staff  0  8  4 11:41 file.txt
83850154 lrwxr-xr-x  1 snorlax  staff  8  8  4 11:46 file-symbolic.txt -> file.txt

このようにシンボリックリンクはオリジナルファイルの位置情報を保管している別ファイルとして作成されるため、iノード番号も別に割り当てられます。 またパーミッションの先頭は、ファイルタイプとしてシンボリックリンクを表す「l」が表示されています。

サンプル

ハードリンクを作成する

$ ln file.txt file.txt-link
$ echo "snorlax" > file.txt
$ cat file.txt-link
snorlax

シンボリックリンクを作成する

$ ln -s file.txt file.txt-link
$ echo "snorlax" > file.txt
$ cat file.txt-link
snorlax