Linuxのソフトリンクとハードリンクの違いとは?作成方法と使い分けを徹底解説
作業中のLinuxシステムで、複数階層のディレクトリの奥深くにファイルが保存されているとします。そのファイルに手軽にアクセスするために、デスクトップ上にショートカットを作りたいと思ったことはありませんか?そんなときに便利なのがシンボリックリンク(ソフトリンク)です。さらに、ソフトリンクとは別に「ハードリンク」と呼ばれるリンク方式も存在します。本記事では、ソフトリンクとハードリンクの違いを詳しく解説し、それぞれどんな場面で使うべきかを紹介します。
ソフトリンクとハードリンクの違い
ソフトリンク(シンボリックリンク)は、リンク先のファイルパスを指し示す単なる参照ポインタです。パス上にファイルやフォルダが実際に存在しているかどうかは関知しません。もし参照先が存在しなければ、リンクは壊れた(broken)状態になるだけです。また、ソフトリンク自体を編集したり削除したりしても、元のファイルには一切影響しません。
一方、ハードリンクは、対象ファイルに「もう一つの名前」を与えるようなイメージです。片方のファイルの内容を編集すると、もう片方にも同じ変更が反映されます。端的に言えば、ソフトリンクはファイルパスへの参照であるのに対し、ハードリンクはファイルのデータ本体への直接のリンクだと言えます。
それでは、実際にソフトリンクとハードリンクがどのように動作するのか、順番に見ていきましょう。
ソフトリンクの実際の動作
4行のテキストが書かれた「first_file.txt」というファイルを例に考えます。
まず、ホームディレクトリにソフトリンクを作成します。
ln -s first_file.txt ~/sl-firstfile.txt
GNOMEデスクトップ環境では、ファイルを右クリックして「リンクを作成(Create Link)」を選ぶだけでソフトリンクを作成できます。この場合、「Link to
「sl-firstfile.txt」の中身を表示してみると、「first_file.txt」とまったく同じ内容であることが確認できます。
ファイルマネージャーで2つのファイルを見比べると、ソフトリンクは元ファイルへのショートカットとして表示されます。アイコンに付いた黒い矢印がそれを示しています。
ls -lコマンドで現在のディレクトリの一覧を表示すると、ソフトリンクがどのファイルを指しているのかを確認できます。「sl-firstfile.txt」の権限文字列の先頭が「l」になっているのは、このエントリがリンクであることを意味します。
ソフトリンクの削除時の挙動
元のファイルを削除しても、ソフトリンク自体はそのまま残ります。
しかし、この状態ではリンクは「壊れた(dangling/broken)」状態となり、何の役にも立ちません。
ここで、同じ名前の新しくファイル「first_file.txt」を作成すると、ソフトリンクは再び有効になります。
補足: ソフトリンクの参照先ファイルの絶対パスを調べたいときは、以下のようにreadlinkコマンドを使います。
このコマンドの出力結果として、元ファイルの絶対パスが表示されます。
ハードリンクの実際の動作
続いて、同じファイルのハードリンクをホームディレクトリに作成してみましょう。使用するコマンドは以下の通りです。
ln first_file.txt hl-first-file.txt
補足: ソフトリンクとハードリンクの作成には、どちらもlnコマンドを使います。両者の違いは、シンボリックリンクを指定する-sオプションを付けるかどうかだけです。
ハードリンクを作成するもう一つの方法として、linkコマンドを使うこともできます。
link hl-firstfile.txt hl2-firstfile.txt
両方のファイルを確認すると、内容が同一であることがわかります。
GUIでは、2つのファイルはそれぞれ独立したファイルとして表示され、ハードリンクが存在することを示す記号などは現れません。
試しに、ハードリンクファイル「hl-firstfile.txt」に新しい行を追加してみます。
echo "hello" >> hl-first-file.txt
追加したデータは、両方のファイルで確認できます。
ハードリンクを作成すると、あたかも2つの別々のファイルが存在するように見えますが、実際にはそのデータは密接に結び付いています。片方への変更は、必ずもう片方にも反映されるのです。
ワンポイントアドバイス: ソフトリンクやハードリンクを作成する際は、リンク元のファイルと同じ拡張子を付けておくと管理しやすくなります。
ハードリンクの削除時の挙動
ハードリンクの場合、元のファイルやハードリンクを削除しても心配はいりません。最初に保存されていたデータは、残ったハードリンク経由で引き続きアクセスできます。
ソフトリンクが役立つ場面
ソフトリンクは、いわばファイルのショートカットとして機能します。複数階層のディレクトリの奥に埋もれたファイルに頻繁にアクセスしたい場合、ソフトリンクを作ってアクセスしやすい場所に置いておくのが良い選択肢です。
ハードリンクが役立つ場面
ハードリンクを作成すると、元ファイルとリンク先のどちらに加えた変更も、両方に反映されることを確認しました。
たとえば、バックアップサーバーを運用しているとしましょう。増分バックアップ方式を採用しており、前回のバックアップ以降の変更分だけを反映する仕組みです。サーバー上のファイルとPC上の対応するコピーの間にハードリンクを張っておけば、バックアップ実行時にPC側ファイルへの変更が自動的にサーバー上のハードリンク済みファイルへ反映されます。ファイル名が変更された場合でも同様に機能します。
まとめ
ソフトリンクとハードリンクにはそれぞれ得意な用途があり、状況に応じて使い分けることが大切です。両者の違いを正しく理解していれば、リンクを作成する際に最適な判断ができるようになります。なお、ディレクトリに対してはソフトリンクを自由に作成できますが、ハードリンクは通常、ディレクトリには作成できません(システムが内部的に使う「.」「..」などを除く)。また、ソフトリンクは異なるファイルシステム間でも作成できる一方、ハードリンクは同一ファイルシステム内でのみしか作成できないという制約があります。
-
Rubyのputs・print・pの違いとは?出力メソッドの使い分けを徹底解説
Rubyには、画面に何かを出力するための方法がいくつかあります。中でも特によく使われるのが、以下の3つのメソッドです。 puts print p しかし、これらは一体どう違うのでしょうか?そしてどんな場面でどれを使えばよいのか?この記事では、それぞれの特徴と使い分けのポイントを詳しく解説します。 改行なしで出力する方法 ユーザーに見せるために画面へ何かを出力したいときは、通常putsを使用します。 例: puts Hello there! putsは、実行するたびにメッセージの末尾へ自動的に改行を追加します。 もし改行したくない場合は、printを使いましょう。 例: print 1
-
Windows 10とWindows 11の違いを徹底比較!アップグレードすべきか判断するポイント
Microsoft(マイクロソフト)は、数々の新機能と改善点を盛り込んだ最新OS「Windows 11」をリリースしました。一方で、これまで数多くのパッチやアップデートが適用されてきたWindows 10は、新しいWindows 11よりも安定したOSと言えます。Microsoftによると、Windows 10のサポートは2025年以降に終了する予定のため、Windows 11へアップグレードするか、Windows 10を使い続けるかを検討する時間は十分にあります。この記事では、Windows 10とWindows 11の性能・機能・改善点を比較し、新しいOSへ移行すべきか、それともWindo