Tag List for ハードリンク

ハードリンク

ファイルには必ずファイル名が付けられており、ファイル名とパスによって一意のファイルを区別します。 通常、ひとつのファイルに対して、ファイル名はひとつだけ存在するように思えますが、Linuxではひとつのファイルに2つ以上の名前を付けることができます。 そして、ファイルに名前をつけ、ファイルの実体と関連付ける概念のことをハードリンクと言います。 例えば、「A」という名前のついたファイルがあり、そのファイルに新しく「B」という名前を付けたとします。 この操作を「ファイルAを指すハードリンクBを作る」と表現します。 以降、「A」と「B」は同じファイルを指していることになります。 つまり、ファイルAを変更すれば、Bも変更されます。 ファイルは少なくともひとつのハードリンクを持っている必要があります。 そうでなければ、ファイルシステムは一意のファイルを識別することができません。

シンボリックリンク

シンボリックリンクはハードリンクと同様にファイルの実体に新しい名前を付ける仕組みです。 シンボリックリンクを作成すると、ファイルシステム上にはリンク情報が格納された0バイトのファイルが作成されます。 その0バイトのファイルを通して、通常のファイルと同じように扱ってファイルの実体を編集することができます。 では、ハードリンクとは何が違うのでしょう。 ハードリンクはファイルの名前と実体を関連付ける仕組みです。 そしてシンボリックリンクは、名前に名前を関連付けます。 シンボリックリンクはWindowsでのショートカットに似ています。 例えば、デスクトップにインターネットエクスプローラーのショットカットを置いておく方は多いと思いますが、インターネットエクスプローラーの実体はデスクトップにはなく、通常「C:\Program Files\Internet Explorer\iexplore.exe」などに保存されています。 このように、本来の位置にファイルを残しつつそれとは別の場所に置いたり別名を付けてアクセスする手段がWindowsで言うショートカットです。 ただし、ショートカットはリンク先のファイルを実体と同じようには扱えないため、シンボリックリンクとは実装や機能の面では大きく異なります。 シンボリックリンクの主な利用方法は、ファイルやディレクトリに別名をつけることです。 ディレクトリに別名をつける場合の活用例としては下記のようなものがあります。 Linuxと言ってもディストリビューションは様々に存在しますし、歴史も古く、幾度となくバージョンアップが繰り返されています。 そのため、同じLinuxでもディストリビューションやバージョンごとに様々な違いが存在しています。 例えば、ログファイルは「/var/log」ディレクトリに置くのが一般的ですが、中には「/var/adm」ディレクトリに置く場合もあります。 そのような環境で開発されたプログラムは、ログファイルが「/var/adm」ディレクトリに作成されると仮定していることもあり、「/var/log」ディレクトリにログファイルを作成している環境では、うまく動作できません。 そこでシンボリックリンクが役に立ちます。 「/var/adm」ディレクトリ以下へのアクセスを「/var/log」ディレクトリへのアクセスだと関連付けさえすれば、プログラムはどちらの環境でも問題なく動作します。