lnコマンドでシンボリックリンクとハードリンクを設定する

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

Linuxにてlnコマンドでリンクを設定する

今回はLinuxのlnコマンドに関するコマンドのお話です。
Windowsにてファイルのショートカットを作成する機能がありますが、linuxにもショートカットを作成する命令lnコマンドがあります。lnコマンドにはシンボリックリンクとハードリンクの2種類のリンクがあり、少し性質が異なるため違いを確認してみましょう。

 

lnコマンドによるリンクの設定

今回は実体のあるファイルとして「file01.txt」を用意します。「file01.txt」のシンボリックリンクとして「link01.txt」を作成して、「file01.txt」のハードリンクとして「link2.txt」を作成します。

作成するフォルダ構成図

(root)
 ┣ file01.txt 実体のファイル
 ┣ link01.txt シンボリックリンク(file01.txtのリンク)
 ┗ link02.txt ハードリンク(file01.txtのリンク)

 

シンボリックリンクの設定方法

ln -s (対象となるファイル名) (リンク名)

シンボリックリンクを作成するサンプル

root@hostname:# ln -s file01.txt link01.txt
root@hostname:# ls -li
total 12
drwxr-xr-x 2 root   root   4096 Sep 22 01:42 .
drwxr-xr-x 5 ubuntu ubuntu 4096 Sep 22 01:41 ..
274934 -rw-r--r-- 1 root   root     11 Sep 22 01:42 file01.txt
274935 lrwxrwxrwx 1 root   root     10 Sep 22 01:42 link01.txt -> file01.txt

 

ハードリンクの設定方法

ln (対象となるファイル名) (リンク名)
・ハードリンクはroot権限を持つユーザーでなければ作成できません。
・ハードリンクはリンク元と同じパーテーション内でしか作れません。

ハードリンクを作成するサンプル

root@hostname:# ln file01.txt link02.txt
root@hostname:# ls -li
total 16
drwxr-xr-x 2 root   root   4096 Sep 22 01:42 .
drwxr-xr-x 5 ubuntu ubuntu 4096 Sep 22 01:41 ..
274934 -rw-r--r-- 2 root   root     11 Sep 22 01:42 file01.txt
274935 lrwxrwxrwx 1 root   root     10 Sep 22 01:42 link01.txt -> file01.txt
274934 -rw-r--r-- 2 root   root     11 Sep 22 01:42 link02.txt

 

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

上記のサンプルにあるファイルの先頭には数字があり、「file01.txt」と「link02.txt」は 274934 で、「link01.txt」は 274935 です。この数字はinode(アイノード)といい、簡単に言えばデータの格納している場所を指し示します。

ハードリンクである「file01.txt」と「link02.txt」は同じinode(アイノード)を指し示しているため、ファイル名が違うが同じものです。例えるなら「file01.txt」は本名で「link02.txt」はあだ名のようなものです。

シンボリックリンクである「file01.txt」と「link01.txt」は別のinode(アイノード)を指し示しているため、全く別のファイルです。シンボリックリンクはWindowsやMacのショートカットと同じ機能であると考えると分かり易いと思います。

 

さいごに

シンボリックリンクの使い方を把握していると便利なときがあります。
例えばレンタルサーバーでPHPやRubyのフレームワークを使うとき、フレームワークの公開用フォルダをレンタルサーバーの指定するドキュメントルートとシンボリックリンクを設定しますと、フレームワークが提供するフォルダ構成を変更しなくても良くなります。
何かと便利な使い方があるため、シンボリックリンクとハードリンクを使ってみてください。