ハードリンクが存在するのはなぜですか?

ハードリンクが存在するのはなぜですか?

ハードリンクが何であるかを知っていますしかし、なぜ使用すべきですか?ハードリンクの用途は何ですか?

答え1

ハードリンクの最大の利点は、ソフトリンクと比較してサイズや速度の低下がないことです。ソフトリンクは、一般的なファイルアクセスの上に追加される間接層です。ファイルを開くと、カーネルはリンクを逆参照する必要があり、これには少し時間がかかります。さらに、リンクは、リンクテキストを保存するためにディスク上のわずかなスペースを占有します。これらの罰はファイルシステム構造に組み込まれているため、ハードリンクには存在しません。

私が知っている限り、これを見るための最良の方法は次のとおりです。

$ ls -id .
1069765 ./
$ mkdir tmp ; cd tmp
$ ls -id ..
1069765 ../

この-iオプションを使用すると使用できlsますアイノード番号ファイル。上記の例を用意したシステムでは、偶然にinode番号が1069765のディレクトリにありましたが、正確な値は重要ではありません。これは特定のファイル/ディレクトリを識別する固有の値にすぎません。

これが意味するのはサブディレクトリに行き、次を見るとその他ファイルシステムエントリは、..以前に取得したのと同じinode番号を持つと呼ばれます。これは、..MS-DOSやWindowsで発生するのと同様に、シェルがそれを解釈するためには発生しません。 Unixファイルシステムでは、..実際のディレクトリエントリがあり、これは古いディレクトリへのハードリンクです。

ハードリンクは、ファイルシステムのディレクトリを一緒に接続するリンクです。昔々、Unixにはハードリンクはありませんでした。 Unixの元のバージョンを変更するために追加されました。フラットファイルシステム階層ファイルシステムを入力します。

(これについて詳しくは、以下を参照してください。)「/」に「..」エントリがあるのはなぜですか?.)

Unixシステムでは、同じ実行ファイルが複数の異なるコマンドを実装するのが一般的です。 Linux ではこれ以上そうでないようですが過去に使用していたシステムでは、cpmvrmすべて同じ実行ファイルでした。考えてみると、これは意味があります。ボリューム間でファイルを移動すると、実際にはコピーして削除するため、mv他の2つのコマンドの機能はすでに実装する必要があります。実行可能ファイルにはそれを呼び出す名前が渡されるので、どのタスクを提供するかを決定できます。

組み込みLinuxでよく見られるもう1つの例は次のとおりです。忙しい箱、単一の実行可能ファイルの実装たくさん注文する。

ほとんどのファイルシステムでは、ユーザーがディレクトリへのハードリンクを作成することは許可されていないことを指摘したいと思います。.エントリは..通常、カーネルの一部であるファイルシステムコードによって自動的に管理されます。誤ってディレクトリハードリンクを作成して使用する場合、重大なファイルシステムの問題が発生する可能性があるため、これらの制限があります。これは、ソフトリンクが同じリスクを抱えて存在する多くの理由の1つです。

答え2

増分バックアップのためにrsyncでハードリンクを非常に便利に使用します。多くのスペースを節約し、回復プロセスを非常に簡単にします。サーバーのバックアップにはこの方法を使用します。

時間をかけて読むこの説明

答え3

用途が多いです。私はこれを使ってファイルベースのロックを作成します。他のほとんどのシステムコールとは異なり、link(2)システムコールはアトミックです。

もう1つの用途は、ハードリンクを使用して時間の経過とともにバックアップを作成してディスク容量を減らすrsnapshotです。ファイルが変更されていない場合は、ファイルの以前のインスタンスにハードリンクされ、変更されたファイルが再びコピーされます。

また、それを使用してサーバーの構成ファイルを交換します。rm file.cfg && ln ~/tmp/file.cfg file.cfgこれで ~/tmp/* ファイルを安全に削除できます。

答え4

このウィキペディアのページを読んだ後、「私はなぜそれを使用するのですか?」という質問があれば、ハードリンクが何であるかを理解できませんでした。

協会ディスクのブロックを指すディレクトリエントリです。つまり、システム内のすべてのファイルに少なくとも1つのリンクがあります。ファイルを生成すると、rm実際のシステムコールはunlink()ディレクトリエントリを削除します。ディスクのブロックは変更されていませんが、リンクは消え、ファイルはディレクトリリストから消えます。

ハードリンクを個人的に使用することはできませんが、システム全体にわたっています。たとえば、

$ ls -li /bin | grep 53119771
53119771 -rwxr-xr-x 3 root root  26292 2010-08-18 10:15 bunzip2
53119771 -rwxr-xr-x 3 root root  26292 2010-08-18 10:15 bzcat
53119771 -rwxr-xr-x 3 root root  26292 2010-08-18 10:15 bzip2

ご覧のとおり、bunzip2どちらbzcatbzip同じ inode を使用します。デフォルトでは3つの名前のファイルです。あなたできるこの文書のコピーが3つありますが、その理由は何ですか?不必要にディスク容量のみを消費します。

関連情報