ハードリンクにcp -lを使用することとlnを使用することに違いはありますか?

ハードリンクにcp -lを使用することとlnを使用することに違いはありますか?

私はrsyncとハードリンクを使ってバックアップシナリオを実装しています。私はrsyncでlink-destを使用してハードリンクを実行できることを知っていますが、rsyncで "link-dest"を実装する前に "cp -l"を使用することに注意してください。私が知っているもう一つのハードリンク方法は「ln」です。

だから私の質問は好奇心からのものです。 「ln」を使用する場合と比較してハードリンクを生成するために「cp -l」を使用することに違いはありますか?

答え1

元のファイルへのハードリンクが作成されるため、両方の結果は同じでなければなりません。

違いは、目的と各コマンドで使用できるオプションにあります。たとえば、cp再帰を使用できますが、ln次は使用できません。

cp -lr <src> <target>

<target>のすべてのファイルへのハードリンクを作成します<src>。 (リンクではなく新しいディレクトリを作成します。)結果として、下のディレクトリツリー構造は<target>下のディレクトリツリー構造と同じように見えます<src>cp -r <src> <target>後者を使用すると、すべてのファイルとフォルダをコピーしてそれぞれに新しいファイルを提供しますが、前者inodeはファイルのハードリンクのみを使用するため、ファイルの数だけが増加するという点で異なりますLinks

あなたの例のように単一のファイルをコピーするために使用される場合、結果は同じです。

答え2

協会最も少ないシステムコールを使用してからなぜならついにCP:

$ strace link f.txt g.txt | wc --lines
282

$ strace ln --symbolic f.txt g.txt | wc --lines
311

$ strace ln f.txt g.txt | wc --lines
334

$ strace cp --symbolic f.txt g.txt | wc --lines
394

$ strace cp --link f.txt g.txt | wc --lines
410

関連情報