cp -lまたはlnとのハードリンクに違いはありますか?


15

rsyncとハードリンクを使用してバックアップスキームを実装しています。rsyncでlink-destを使用してハードリンクを実行できることはわかっていますが、rsyncで「link-dest」を実装する前に「cp -l」を使用するという記述を見ました。私が知っているハードリンクの別の方法は「ln」です。

私の質問は、好奇心からです:「ln」を使用する場合と「cp -l」を使用する場合のハードリンクの作成に違いはありますか?


リンクは区別できません。
リチ14

違いはないと言うつもりですか?それらは互換的に使用できますか?
twan163 14

私は自分で少しテストを実行しましたが、一目で両者の違いを見ることはできませんでした。
twan163 14

cp: illegal option -- lcpにはlオプションがありますか?
トム

回答:


16

ハードリンクが元のファイルに作成されるという点で、両方の結果は同じである必要があります。

違いは、意図された使用法、したがって各コマンドで使用可能なオプションにあります。たとえば、cp再帰は使用できますが、次のlnことはできません。

cp -lr <src> <target>

内の<target>すべてのファイルへのハードリンクを作成します<src>。(リンクではなく、新しいディレクトリを作成します)結果は、下のディレクトリツリー構造がの下のディレクトリツリー構造<target>と同じになります<src>。それは異なりますcp -r <src> <target>後者を使用すると、各ファイルやフォルダをコピーし、それぞれに新しいを与えるという点でinode、前者は単にファイルのハードリンクを使用していますので、単に彼らの増加に対し、Linksカウント。

例のように単一のファイルをコピーするために使用すると、結果は同じになります。


正しく理解すれば、「cp -lr」はすべてのファイルのハードリンクを作成しますが、<target>に欠落しているディレクトリがある場合、これらは新規として作成されます(つまり、<target>のディレクトリへのハードリンクはありません)?
twan163

それは正解です。ディレクトリへのハードリンクを作成することはできません。したがって、ファイル/ディレクトリ構造を維持するために、「実際の」ディレクトリ内のファイルのハードリンクになります。
garethTheRed 14

「cp -lr」の動作に関して:ファイルのハードリンク...ディレクトリの新しいディレクトリ。少し奇妙に思えますが、この「奇妙な」動作は制約の副作用です(ディレクトリのハードリンクを持つことはできません)。||| 参考までに、参考のために、askubuntuからのref1とunix.stackexchangeからのref2の directoreiに許可されていないハードリンクに関する情報へのリンクをいくつか紹介します。
トレバーボイドスミス

2

linkは最小のシステムコールを使用し、その後にln、最後に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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.