私は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