Linuxでは、他のオペレーティングシステムと同じように、ディレクトリやファイルに別名を付けて、異なる名前で同一のファイルにアクセスできる仕組みとして、ハードリンクとシンボリックリンクがありますが、違いや使い方がイマイチよく分からないという方もいらっしゃるでしょう。
そこでここでは、ハードリンクとシンボリックリンクの違いや、RedHat系Linux(AlmaLinux9)を例に、ハードリンクとシンボリックリンクを作成する方法を紹介します。
目次
ハードリンクとシンボリックリンクの違い
ハードリンクは、一つのファイルの実体に対して複数の実名を付ける処理を表しており、一つのファイルの実体に対して複数のハードリンクを作成した場合、それぞれのハードリンクは対等なもの(iノード番号が同じ)となります。
シンボリックリンクは、ファイルの実名に対して別名を付ける処理を表しており、シンボリックリンクには、ファイルの実名やパスが保存されています。
ハードリンクとシンボリックリンクの違いを図に表すと、以下のようになります。
ハードリンクの作成方法
ハードリンクは、lnコマンドを使って作成します。
# ln [リンク元ファイル] [リンクファイル]
たとえば、file.orgのハードリンク「file1」を作成するときは、以下のようにコマンドを実行します。
# ln file.org file1
ファイルに作成されているハードリンクの数やiノード番号を確認したいときは「ls -li」コマンドで確認できます。
上の画面では一つのファイルに対してハードリンクが一つ作成されているので「2」と表示されています。一つのファイルに対してハードリンクを二つ作成すれば「3」と表示されます。
また、リンク元のファイルとハードリンクのiノード番号が同一であることも確認できます。
なお、ハードリンクは同一のファイルシステム上にのみ作成でき、ディレクトリのハードリンクは作成できません。
また、一つのファイルの実体に対して複数のハードリンクを作成した場合、一方のハードリンクで変更した内容は他方のハードリンクにも反映されます。
シンボリックリンクの作成方法
シンボリックリンクは、lnコマンドに「-s」オプションを付けて作成します。
# ln -s [リンク元ファイル] [リンクファイル]
たとえば、file.orgのシンボリックリンク「file2.link」を作成するときは、以下のようにコマンドを実行します。
# ln -s file.org file2.link
作成したシンボリックリンクの情報やiノード番号を確認したいときは「ls -li」コマンドで確認できます。
なお、シンボリックリンクはファイルシステムをまたいで作成でき、ディレクトリのシンボリックリンクを作成することもできます。
また、cpコマンドでシンボリックリンクをコピーするときには注意が必要で、デフォルトではリンク元のファイルがコピーされてしまうので、シンボリックリンク自体をコピーしたいときは、cpコマンドに「-d」オプションを付けて実行します。
あとがき
ハードリンクやシンボリックリンクを使えば、単純にファイルをコピーして共有するのに比べて、より効率よくファイルを共有でき、ディスク領域の節約にもつながるでしょう。