シンボリックリンクとハードリンクの違い【lnコマンド解説】

シンボリックリンクとハードリンクの違い【lnコマンド解説】

当ページのリンクには広告が含まれています。

記事の文字数:3062

Linuxなどのファイルシステムで使われる「シンボリックリンク」と「ハードリンク」。本記事では、それぞれの仕組みや特徴、使用上の注意点を実例付きでわかりやすく解説します。どちらを使えばよいか迷ったときの判断材料として、比較表や活用シーンも紹介しています。


スポンサーリンク

LinuxやUnix系OSを扱っていると頻繁に登場する「シンボリックリンク」と「ハードリンク」という概念。どちらもファイルやディレクトリへのリンク(参照)を作成するための仕組みですが、その構造や用途には根本的な違いがあります。初心者が混乱しやすいポイントの一つですが、システムの運用やプログラムの設計においてリンクの使い分けは非常に重要です。

本記事では、システムエンジニアやプログラマーを対象に、シンボリックリンクとハードリンクの仕組み、実際の使いどころ、注意点までを含めて、具体例や比較表を交えながら詳しく解説していきます。

シンボリックリンクはファイルのショートカット

シンボリックリンク(symbolic link、略してシンボリックリンクまたはソフトリンク)は、別のファイルやディレクトリへのパス名を参照する特殊なファイルです。Windowsの「ショートカット」に近いイメージで、元ファイルの場所をパスとして記録し、それをたどってアクセスします。

シンボリックリンクの特徴

  • シンボリックリンクはリンク元とは別のファイル(パス)として存在
  • 実体を参照せず、文字列のパス情報を保持する
  • 元のファイルが削除または移動された場合、リンクが壊れる(broken link
  • 異なるファイルシステム間でも作成可能
  • ディレクトリにもリンク可能(たとえば設定ファイル用ディレクトリのショートカット)
  • リンク自身にパーミッションやタイムスタンプが存在する

シンボリックリンクの使用例

使用例
$ ln -s original.txt symlink.txt
$ ls -l
-rw-r--r-- 2 test-user test-user 14 Jun 1 06:28 original.txt
lrwxrwxrwx 1 test-user test-user 12 Jun 1 06:35 symlink.txt -> original.txt

この出力から、symlink.txtoriginal.txtを参照するシンボリックリンクであることがわかります。lから始まるファイル種別がシンボリックリンクの印です。

ハードリンクは同一iノードのファイル参照

ハードリンクとは、あるファイルに対して、別の名前で参照できるエントリを作成する仕組みです。Linuxなどのファイルシステムでは、ファイルの実体は「iノード(inode)」と呼ばれるデータ構造で管理されており、ハードリンクはこのiノードを複数のファイル名から参照できるようにするものです。

ハードリンクの特徴

  • 元ファイルとハードリンクは完全に同じiノードを参照しており、内容や属性も共通
  • どちらか一方のファイル名を削除しても、もう一方は生きており、ファイル内容は維持される
  • iノードの参照カウントがゼロになるまで、ファイルの中身は削除されない
  • 同一のファイルシステム内でしか作成できない(異なるマウントポイント間では不可)
  • 通常、ディレクトリへのハードリンクは制限されている(特権ユーザーでも原則禁止)

ハードリンクの使用例

使用例
$ echo "Hello, World!" > original.txt
$ ln original.txt hardlink.txt
$ ls -li
131722 -rw-r--r-- 2 test-user test-user 14 Jun 1 06:28 hardlink.txt
131722 -rw-r--r-- 2 test-user test-user 14 Jun 1 06:28 original.txt

この例では、original.txthardlink.txtの両方が同じiノード番号(131722)を持っており、同じファイル実体を指しています。

シンボリックリンク・ハードリンクの比較表

特徴ハードリンクシンボリックリンク
参照対象iノード(実体)パス名(文字列)
ファイルシステムを越える不可可能
ディレクトリへのリンク通常不可可能
元ファイル削除時の挙動実体は保持されるリンク切れ
パーミッション実ファイルに依存リンクファイル自身に付与
サイズファイルサイズと同じパスの長さ(バイト数)
作成コマンドlnln -s

リンクの選定は用途や環境に応じて適切に行う必要があります。以下に代表的なシナリオを紹介します。

ハードリンクが向いているケース

  • ログファイルや一時ファイルのバックアップ:同じ内容を複数の名前で保持したいとき
  • ファイルを誤って削除してしまうことへの保険:iノードが残っていれば内容は復元可能
  • 容量効率を重視したい場合:複製ではないため、ディスク使用量を増やさずに済む

シンボリックリンクが適しているケース

  • 設定ファイルや共通スクリプトへのアクセスを統一したいとき/etc/myapp/configなどにリンクを貼る
  • 開発環境と本番環境で同じスクリプトを使い回す:リンク先を切り替えるだけで動作環境を変更できる
  • 異なるパーティションにあるファイルを一元管理:マウントポイントをまたぐ構成に対応可能

lnコマンドの基本構文

リンクを作成する際に使用するのがlnコマンドです。構文は以下のとおりです。

ハードリンクの作成
ln [元ファイル] [リンク名]
ハードリンク作成例
ln file.txt file_hardlink.txt
シンボリックリンクの作成
ln -s [元ファイルまたはディレクトリ] [リンク名]
シンボリックリンク作成例
ln -s /path/to/config.conf config_link.conf

ln -s-sオプションは「symbolic(象徴的な)」の意味で、これが付いていないとハードリンクが作成されます。

unlinkでリンクを削除する

リンクを削除するには、通常のrmコマンドのほかに、unlinkコマンドも使用できます。unlinkは、リンク(ファイル名)を1つだけ削除するための単機能コマンドです。

構文
unlink [リンク名]
実行例
unlink symlink.txt

unlinkはシンプルな動作をするため、スクリプト内などで意図しないファイル削除を避けたいときにも利用されます。

なお、リンク元がハードリンクである場合、削除しても実体がまだ他の名前から参照されていれば、ファイル自体は保持されます。iノードの参照数が0になった時点で、実体が削除されます。

シンボリックリンク・ハードリンク違いまとめ

  • 参照対象の違い:

    • ハードリンクは「iノード(実体)」を直接参照
    • シンボリックリンクは「ファイルパス(文字列)」を参照
  • リンク先のファイルシステムに関する制限:

    • ハードリンクは同一ファイルシステム内でのみ作成可能
    • シンボリックリンクは異なるファイルシステムでも作成可能
  • ディレクトリへのリンク:

    • ハードリンクは通常ディレクトリに対して作成不可(制限あり)
    • シンボリックリンクはディレクトリにもリンク可能
  • 元ファイル削除時の挙動:

    • ハードリンク:他のリンクが存在すれば実体は削除されない
    • シンボリックリンク:リンク切れ(broken link)となる
  • パーミッションの適用先:

    • ハードリンク:実体ファイルに依存
    • シンボリックリンク:リンクファイル自体にパーミッションが存在
  • リンクファイルのサイズ:

    • ハードリンク:実体ファイルと同じ
    • シンボリックリンク:リンク先パスの文字数(バイト数)分
  • 作成方法:

    • ハードリンク:ln [元ファイル] [リンク名]
    • シンボリックリンク:ln -s [元ファイルまたはディレクトリ] [リンク名]

シンボリックリンクとハードリンクは、いずれもファイルシステムにおける柔軟な参照方法を提供します。しかし、それぞれの動作原理や挙動は大きく異なるため、誤って使うと予期しない動作やトラブルの原因になりかねません。

適切なリンク種別を選ぶには、ファイルシステムの構成、対象のライフサイクル、更新頻度、参照関係の明瞭さなどを考慮する必要があります。

日々の業務やスクリプト開発、サーバー運用などにおいて、リンクの仕組みを正しく理解し、賢く使いこなすことで、より安全で効率的なシステム運用が実現できるでしょう。

Linuxユーザにお勧めの本

新しいLinuxの教科書 第2版

新品価格
¥2,970 から
(2025/5/24 10:23時点)

ゼロからわかる
Linuxコマンド200本ノック?
基礎知識と頻出コマンドを
無理なく記憶に焼きつけよう!

新品価格
¥2,587 から
(2025/4/22 20:54時点)

エンジニア1年生のための
世界一わかりやすい
Linuxコマンドの教科書

新品価格
¥2,475 から
(2025/4/22 21:13時点)


以上で本記事の解説を終わります。
よいITライフを!
Scroll to Top