하드 링크 역참조

하드 링크 역참조

명령의 매뉴얼 페이지에는 tar다음 하드 링크에 대한 옵션이 나열되어 있습니다.

-h, --dereference
      follow symlinks; archive and dump the files they point to

--hard-dereference
      follow hard links; archive and dump the files they refer to

tar파일이 하드 링크인지 어떻게 알 수 있나요 ? 어떻게 해야 할까요?따르다그것?

이 옵션을 선택하지 않으면 어떻게 되나요? 어떻게 해야 할까요?아니요하드 역참조?

답변1

기본적으로 하드 링크가 있는 파일을 보관하도록 요청 tar하고 보관할 파일에 이러한 링크가 여러 개 포함되어 있는 경우 파일을 한 번만 보관하고 두 번째(및 다른 이름)를 하드 링크로 기록합니다. 이는 아카이브를 추출하면 하드 링크가 복원된다는 의미입니다.

--hard-dereference이 옵션을 사용 tar하면아니요하드 링크를 유지하세요. 대신, 동일한 콘텐츠와 메타데이터를 갖는 별도의 파일로 처리합니다. 아카이브를 추출하면 파일은 독립적이 됩니다.

참고: 먼저 파일의 링크 수를 확인하여 하드 링크를 식별합니다. 여러 링크가 있는 각 파일의 장치 번호와 inode를 기록하고 이를 사용하여 동일한 파일이 다시 아카이브되는 시기를 감지합니다. ( 를 사용할 때는 --hard-dereference이 작업을 수행하지 않습니다 .)

답변2

링크 수를 사용하여 하드 링크가 있는 파일과 하드 링크가 아닌 파일을 구별할 수 있습니다. 명령줄에서 이 정보를 얻는 방법에는 두 가지가 있습니다.

% stat original
  File: ‘original’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d      Inode: 932815      Links: 2
Access: (0644/-rw-r--r--)  Uid: (  500/ bediger)   Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
 Birth: -

또는

1010 % ls -li 
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary

"bediger" 앞에 있는 "2"만 링크 수입니다. 두 파일 이름 모두 동일한 inode 번호 932815를 갖습니다.

나는 두 명령 모두 시스템 호출에 의해 채워지는 struct stat의 st_nlink 필드에서 링크 수를 얻는다고 확신합니다 stat().

내가 아는 한, tarwith를 실행한다는 --hard-dereference것은 위의 예에서와 같이 두 개의 서로 다른 파일 이름을 가진 단일 파일을 얻지 못하지만 각각 파일 이름을 가진 두 개의 파일을 얻는다는 것을 의미합니다. tar각 파일의 링크 수를 확인할 수 있으며 기본적으로 추출 시 두 번째 파일 이름에 하드 링크된 파일 데이터에 대한 하드 링크가 생성됩니다. 아카이브 생성 시 호출되면 --hard-dereference추출 호출이 실행될 때 두 번째 파일 이름에 대해 완전히 새로운 파일을 생성하는 것처럼 보입니다 tar.

관련 정보