Linuxのシンボリックリンクとハードリンクの違いは何ですか?
Linuxにおけるソフトリンク(symbolic link)とハードリンク(hard link)は、異なるファイルリンクの方法です。
- ソフトリンクは、別のファイルやディレクトリを指す特殊なファイルです。ソフトリンクはファイルパスを使用して対象ファイルを参照し、Windowsオペレーティングシステムのショートカットと同様です。ソフトリンクは異なるファイルシステムを横断し、存在しないファイルやディレクトリにリンクすることができます。元のファイルやディレクトリが削除されても、ソフトリンクは存在し続けますが、指定された対象ファイルが存在しない場合、そのソフトリンクは「切れている」と呼ばれます。ソフトリンクのファイルサイズは、1つのディスクブロックにしか使用されません。
- ハードリンク:ハードリンクは、ファイルのinodeを使用して元のファイルやディレクトリを参照し、両方が同じデータブロックを指す。ハードリンクは同じファイルシステム内のファイルにしかリンクできず、ディレクトリにはリンクできません。元のファイルやディレクトリが削除されても、対応するハードリンクは引き続きアクセスできます。すべてのハードリンクと元のファイルが削除されると、システムはファイルのストレージスペースを本当に開放します。ハードリンクのファイルサイズは元のファイルと同じです。
要紐帯において、シンボリックリンクとハードリンクの主な違いは次のとおりです:
- ソフトリンクはファイルのパスを指すポインタであり、ハードリンクは元のファイルをファイルのインデックスノードを介して参照する。
- ソフトリンクはファイルシステムを超えてリンクすることができますが、ハードリンクは同じファイルシステム内のファイルにのみリンクできます。
- ソフトリンクは存在しないファイルやディレクトリにリンクすることができますが、ハードリンクは既に存在するファイルにリンクする必要があります。
- プライマリファイルが削除されると、シンボリックリンクは存在し続けますが、指し示すファイルが存在しなくなります。一方、ハードリンクは元のファイルの内容にアクセスできます。
- ハードリンクは元のファイルと同じサイズを占有しますが、ソフトリンクはディスクブロック1つを占めます。