Linuxでショートカットを作成する方法(ハードリンクとシンボリックリンク)

Linuxでショートカットを作成する方法(ハードリンクとシンボリックリンク)

Linuxでは、他のオペレーティングシステムと同じように、ディレクトリやファイルに別名を付けて、異なる名前で同一のファイルにアクセスできる仕組みとして、ハードリンクとシンボリックリンクがありますが、違いや使い方がイマイチよく分からないという方もいらっしゃるでしょう。

そこでここでは、ハードリンクとシンボリックリンクの違いや、AlmaLinux9を例にLinuxでハードリンクとシンボリックリンクを作成する方法を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
AlmaLinux9.0

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

ハードリンクは、一つのファイルの実体に対して複数の実名を付ける処理を表しており、一つのファイルの実体に対して複数のハードリンクを作成した場合、それぞれのハードリンクは対等なもの(iノード番号が同じ)となります。

シンボリックリンクは、ファイルの実名に対して別名を付ける処理を表しており、シンボリックリンクには、ファイルの実名やパスが保存されています。

ハードリンクとシンボリックリンクの違いを図に表すと、以下のようになります。

Linuxでショートカットを作成する方法(ハードリンクとシンボリックリンク)

ハードリンクの作成方法

ハードリンクは、lnコマンドを使って作成します。

# ln [リンク元ファイル] [リンクファイル]

たとえば、file.orgのハードリンク「file1」を作成するときは、以下のようにコマンドを実行します。

# ln file.org file1

ファイルに作成されているハードリンクの数やiノード番号を確認したいときは「ls -li」コマンドで確認できます。

Linuxでショートカットを作成する方法(ハードリンクとシンボリックリンク)

上の画面では一つのファイルに対してハードリンクが一つ作成されているので「2」と表示されています。一つのファイルに対してハードリンクを二つ作成すれば「3」と表示されます。

また、リンク元のファイルとハードリンクのiノード番号が同一であることも確認できます。

Linuxでショートカットを作成する方法(ハードリンクとシンボリックリンク)

なお、ハードリンクは同一のファイルシステム上にのみ作成でき、ディレクトリのハードリンクは作成できません。

また、一つのファイルの実体に対して複数のハードリンクを作成した場合、一方のハードリンクで変更した内容は他方のハードリンクにも反映されます。

シンボリックリンクの作成方法

シンボリックリンクは、lnコマンドに「-s」オプションを付けて作成します。

# ln -s [リンク元ファイル] [リンクファイル]

たとえば、file.orgのシンボリックリンク「file2.link」を作成するときは、以下のようにコマンドを実行します。

# ln -s file.org file2.link

作成したシンボリックリンクの情報やiノード番号を確認したいときは「ls -li」コマンドで確認できます。

Linuxでショートカットを作成する方法(ハードリンクとシンボリックリンク)

なお、シンボリックリンクはファイルシステムをまたいで作成でき、ディレクトリのシンボリックリンクを作成することもできます。

また、cpコマンドでシンボリックリンクをコピーするときには注意が必要で、デフォルトではリンク元のファイルがコピーされてしまうので、シンボリックリンク自体をコピーしたいときは、cpコマンドに「-d」オプションを付けて実行します。

Linuxでショートカットを作成する方法(ハードリンクとシンボリックリンク)

あとがき

ハードリンクやシンボリックリンクを使えば、単純にファイルをコピーして共有するのに比べて、より効率よくファイルを共有でき、ディスク領域の節約にもつながるでしょう。