Linuxでも、ファイルのリンクに対してリンクを作成することができます。
専門的な観点で言えば、リンクとは「iノードとファイルの対応付け」といえます。
iノードとは?
Linuxのファイルやディレクトリにおいて、情報を保持し、管理する仕組みです。
「iノード」には下記のような情報が保持されています。
iノードで格納している情報
- ファイルサイズ
- 最終更新日時
- アクセス権
- ディスク上のどこにファイル内容が書き込まれているか。
iノードのメリット
「ファイル名」と「iノード番号」の対応表があれば、「ファイル名」を知るだけでそのファイルにアクセスすることができます。
いわば、図書館の本についているバーコードのようなものですね。
iノードの採番方法
同じパーテーション内で、一意に管理されています。
なので、ファイルシステムが異なれば、重複したiノードが作成される可能性があります。
iノードを確認するには?
lsの-iオプションを使えばiノードを確認することができます。
ディレクトリ名の横に出力されている番号が「iノード番号」になります。
Linuxにおけるリンクには2種類があります。
- シンボリックリンク
- ハードリンク
用途
長いパス名を省略することができる。
「/Users/tarou/test.txt」のようにパス階層が長くなった時とかは全部記述するのは正直めんどくさいです。リンクを使えばそういう手間を減らすことが可能です。
バージョンを区別したい場合に使う。
ソフトウェアのバージョンを複数同じOSにインストールする場合もありますが、どっちがどのバージョンか分からなくなってしまいますがリンクを使えば区別することができます。
シンボリックリンクとハードリンクの使い分け
ハードリンクには後述する注意点や制約があるので基本的にシンボリックリンクを使っていることが多いです。
シンボリックリンク
ファイル本体の位置情報を保持しているファイルです。(ファイルに「別名をつける」と呼んだりもします。)
イメージとしては、Windowsで言うところの「お気に入り」や、Macにおける「エイリアス」と同じような概念です。
なので、iノード番号は本体と、シンボリックリンクファイルで異なります。
「iノード番号」ではなく、「iノード内のファイルの場所」を使って本体へアクセスする。
コマンド
1 |
ln -s 元ファイル シンボリックリンクファイル |
削除する場合は?
単なる位置情報なので、シンボリックリンクを残したまま本体のファイルを削除することができてしまいます。
注意点
本体のファイルを残したままシンボリックリンクにアクセスするとエラーになってしまいます。
ハードリンク
ファイルに複数の名前をつけて割り当てる機能です。
複数のハードリンクがある場合は、シンボリックリンクと異なりどのリンクでも同じファイルの扱いになります。
イメージとしては、同じファイルが複数ファイル存在するというイメージです。
専門的な観点で言えば、「ファイル名」は異なるのに全て「iノード番号」が同じになっている状態といえます。
「iノード番号」を使って、本体へアクセスする。
ハードリンクを作成するコマンド
1 |
ln 元ファイル 作成するファイル |
削除する場合は?
全て実体のファイルになるのでハードリンクで紐づけられたファイル全てが消えるまでは、ファイル本体は削除されません。
注意点
iノードは、ディレクトリのパーテーション内で一意に管理されています。
なので、異なるファイルシステム、ディレクトリに対してはハードリンクを作成することができません。
この記事へのコメントはありません。