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