コンテンツにスキップ

「ハードリンク」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m fix: link, interlang
出典の一部追加
 
(33人の利用者による、間の41版が非表示)
1行目: 1行目:
[[Image:Hard_Link_Illustration.png|right|frame|ハードリンクにはリンク先・リンク元の区別が無く両者は全く対等である]]
[[Image:Hard_Link_Illustration.svg|right|frame|ふたつのハードリンクによって参照されファイル]]{{出典の明記| date = 2024年2月}}
'''ハードリンク'''は、[[コンピュータ]]の[[ファイルシステム]]上の[[ファイル (コンピュータ)|ファイル]]や[[ディレクトリ]]等の資源とその資源につけられた名前を結びつけること、もしくは、その結びつきのことである<ref name=":0">{{Cite web |title=ハードリンクとは - IT用語辞典 |url=https://e-words.jp/w/%E3%83%8F%E3%83%BC%E3%83%89%E3%83%AA%E3%83%B3%E3%82%AF.html |website=IT用語辞典 e-Words |access-date=2024-03-13 |language=ja}}</ref>。
'''ハードリンク'''とは[[コンピュータ]]の[[ファイルシステム]]上の[[ファイル]]・[[ディレクトリ]]等の資源に対して、オリジナルへのアクセス手段とは別のディレクトリ・ファイルとしてのアクセス手段を提供する機能である。[[ソフトリンク]]がオリジナルのファイルに対する[[ポインタ]](オリジナルファイルの位置等の参照に必要な情報)のみを保持しているリンクであるのに対し、ハードリンクには参照先という概念が存在せず、オリジナルのファイルと全く同様に同じデータにアクセスする別のアクセス方法を提供する。一方のファイルが消去された場合でも別のハードリンクされているファイルが存在している限りはファイルの内容は消去されず残る。


==概要==
ハードリンクはその性質上[[ファイルシステム]]そのものの機能に強く依存しており、異なったファイルシステム間をまたがったリンクを作成するのは原理的に不可能である。
名前によってアクセスできるファイルは少なくともひとつのハードリンクを持っている。ファイルは複数のハードリンクを持つこともある。この場合、そのファイルは複数の異なった名前でアクセスできる<ref name=":1">{{Cite web |title=Windowsのシンボリックリンクとジャンクションとハードリンクの違い |url=https://atmarkit.itmedia.co.jp/ait/articles/1306/07/news111.html |website=@IT |access-date=2024-03-13 |language=ja}}</ref>。[[UNIX]]を例に言えば、すべてのファイル、ディレクトリには[[inode]]と呼ばれる固有のIDが割り当てられている。ハードリンクとは同じID(iノード)にアクセスするファイル(ディレクトリ)のことであり、新しくハードリンクを張れば、同じ実体(右図のActual Data on Disk)へアクセスする方法が複数あると言うことになる<ref name=":0" />。そのいずれから変更を加えても、対象となる実体やiノードは同一であるため、見かけ上すべてのファイルに変更が反映される。これにより、あたかも[[ソフトリンク]]であるかのように機能する。[[ソフトリンク]](UNIXではシンボリックリンク)では、リンク対象(オリジナル)が改名されたり、ディレクトリを移動したりするとリンクが無効になってしまう。一方ハードリンクでは、オリジナルは単に先に張られたハードリンクというだけであり、後から張られたハードリンクとの差はない。したがって、オリジナルを改名したり、どこかに移動したりしてもリンクが切れることはない(右図の"LINK A.TXT"をたとえば"LINK C.TXT"のように改名しても、"LINK B.TXT"には影響しない)。


ソフトリンクが名前とファイルへのアクセス方法を結びつけるのに対し、ハードリンクは名前をファイルの実体に直接結びつけるものであるため、ファイルの実体へのアクセスはどの名前からハードリンクをたどっても同じ処理方法となる。ファイルに複数のハードリンクを作ることができるファイルシステムでは、ファイルを削除するというのはハードリンクを削除するという意味で使われる。そのようなシステムではファイルはハードリンクによる[[参照カウント]](リンクカウント)を記録しており、1つのハードリンクが削除された場合でも、別のハードリンクが存在している限り、固有のiノードを持つファイルの実体は削除されずに残る。参照するハードリンクがなくなった時点でファイルが削除される。
ハードリンクの機能は主にソフトリンク(UNIXではシンボリックリンク)が実装されていなかった時の[[UNIX]]で用いられた。ハードリンクの機能は[[NT File System|NTFS]]や[[HFS|HFS+]]にも実装されており今日利用されている多くの[[オペレーティングシステム]]に備わっているがリンクの扱いやすさに比べて仕様直感的でないためあまり用いられない。


なお、ハードリンクはその性質上[[ファイルシステム]]の機能に強く依存しているため、異なったボリューム間をまたがったリンクを作成するのは原理的に不可能である<ref name=":1" />
{{comp-stub}}


ファイルに別名をつける機能としてのハードリンクは主にソフトリンクが実装されていなかった時のUNIXで用いられた。最近では[[NT File System|NTFS]]や[[HFS|HFS+]]にも実装されており今日利用されている多くの[[オペレーティングシステム]]に備わっているがァイルに別名をつける目的には、ボリューム間でもリンクを作ることができ、管理も簡単ソフトリンクを用いることが多い。
[[Category:オペレーティングシステム]]

UNIXにおいては、各ディレクトリが3種類のハードリンクで参照されているのが特徴的である。tmpディレクトリに対して
* 親ディレクトリからそのディレクトリを参照するためにつけられた「tmp」という名前
* そのディレクトリから自身を参照するためにつけられた「.」という名前
* 子ディレクトリからそのディレクトリを参照するためにつけられた「..」という名前
なお、ハードリンク「..」はそのディレクトリが持つ子ディレクトリと同数が存在する。

[[Microsoft Windows|Windows]]においては、[[Microsoft Windows NT|Windows NT 3.1]]から[[ファイル (コンピュータ)|ファイル]]に対するハードリンクをサポートした。その方法は[[Microsoft Windows XP|Windows XP]]以降ではコマンドプロントにて

fsutil hardlink create "新しく作られるファイルのパス" "元データとなるファイルのパス"

と入力する。

また、複数のハードリンクを持つファイルを何らかのプログラムで開いている時、ハードリンクに対するファイル操作はロックされる。すなわち、ディレクトリA及びディレクトリBという二つのハードリンクを持つファイルXを開いている間は、たとえディレクトリAから参照して開いていたとしても、ディレクトリBに存在するファイルXの削除や名前の変更などのファイル操作はできない。

== 脚注 ==
<references />

== 関連項目 ==

* [[ソフトリンク]]
{{ファイル (コンピュータ)}}
{{DEFAULTSORT:はとりんく}}
[[Category:OSのファイルシステム]]
[[Category:UNIX]]
[[Category:UNIX]]
[[Category:Microsoft Windows]]
[[en:Harter Link]]
[[de:Hard link]]
[[Category:Mac OS]]
{{Computer-stub}}
[[pl:Dowi&#261;zanie twarde]]

2024年3月13日 (水) 06:34時点における最新版

ふたつのハードリンクによって参照されるファイル

ハードリンクは、コンピュータファイルシステム上のファイルディレクトリ等の資源とその資源につけられた名前を結びつけること、もしくは、その結びつきのことである[1]

概要

[編集]

名前によってアクセスできるファイルは少なくともひとつのハードリンクを持っている。ファイルは複数のハードリンクを持つこともある。この場合、そのファイルは複数の異なった名前でアクセスできる[2]UNIXを例に言えば、すべてのファイル、ディレクトリにはinodeと呼ばれる固有のIDが割り当てられている。ハードリンクとは同じID(iノード)にアクセスするファイル(ディレクトリ)のことであり、新しくハードリンクを張れば、同じ実体(右図のActual Data on Disk)へアクセスする方法が複数あると言うことになる[1]。そのいずれから変更を加えても、対象となる実体やiノードは同一であるため、見かけ上すべてのファイルに変更が反映される。これにより、あたかもソフトリンクであるかのように機能する。ソフトリンク(UNIXではシンボリックリンク)では、リンク対象(オリジナル)が改名されたり、ディレクトリを移動したりするとリンクが無効になってしまう。一方ハードリンクでは、オリジナルは単に先に張られたハードリンクというだけであり、後から張られたハードリンクとの差はない。したがって、オリジナルを改名したり、どこかに移動したりしてもリンクが切れることはない(右図の"LINK A.TXT"をたとえば"LINK C.TXT"のように改名しても、"LINK B.TXT"には影響しない)。

ソフトリンクが名前とファイルへのアクセス方法を結びつけるのに対し、ハードリンクは名前をファイルの実体に直接結びつけるものであるため、ファイルの実体へのアクセスはどの名前からハードリンクをたどっても同じ処理方法となる。ファイルに複数のハードリンクを作ることができるファイルシステムでは、ファイルを削除するというのはハードリンクを削除するという意味で使われる。そのようなシステムではファイルはハードリンクによる参照カウント(リンクカウント)を記録しており、1つのハードリンクが削除された場合でも、別のハードリンクが存在している限り、固有のiノードを持つファイルの実体は削除されずに残る。参照するハードリンクがなくなった時点でファイルが削除される。

なお、ハードリンクはその性質上ファイルシステムの機能に強く依存しているため、異なったボリューム間をまたがったリンクを作成するのは原理的に不可能である[2]

ファイルに別名をつける機能としてのハードリンクは、主にソフトリンクが実装されていなかった時代のUNIXで用いられた。最近ではNTFSHFS+にも実装されており、今日利用されている多くのオペレーティングシステムに備わっているが、ファイルに別名をつける目的には、ボリューム間でもリンクを作ることができ、管理も簡単なソフトリンクを用いることが多い。

UNIXにおいては、各ディレクトリが3種類のハードリンクで参照されているのが特徴的である。tmpディレクトリに対して

  • 親ディレクトリからそのディレクトリを参照するためにつけられた「tmp」という名前
  • そのディレクトリから自身を参照するためにつけられた「.」という名前
  • 子ディレクトリからそのディレクトリを参照するためにつけられた「..」という名前

なお、ハードリンク「..」はそのディレクトリが持つ子ディレクトリと同数が存在する。

Windowsにおいては、Windows NT 3.1からファイルに対するハードリンクをサポートした。その方法はWindows XP以降ではコマンドプロントにて

fsutil hardlink create "新しく作られるファイルのパス" "元データとなるファイルのパス"

と入力する。

また、複数のハードリンクを持つファイルを何らかのプログラムで開いている時、ハードリンクに対するファイル操作はロックされる。すなわち、ディレクトリA及びディレクトリBという二つのハードリンクを持つファイルXを開いている間は、たとえディレクトリAから参照して開いていたとしても、ディレクトリBに存在するファイルXの削除や名前の変更などのファイル操作はできない。

脚注

[編集]
  1. ^ a b ハードリンクとは - IT用語辞典”. IT用語辞典 e-Words. 2024年3月13日閲覧。
  2. ^ a b Windowsのシンボリックリンクとジャンクションとハードリンクの違い”. @IT. 2024年3月13日閲覧。

関連項目

[編集]