하드 링크에 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

관련 정보