GNU tar의 --dereference 옵션으로 인해 기호 링크가 역참조되지 않는 이유는 무엇입니까?

GNU tar의 --dereference 옵션으로 인해 기호 링크가 역참조되지 않는 이유는 무엇입니까?

나는 GNU tar -h(일명 )의 작동 --dereference방식을 알고 있다고 생각했는데 지금은 혼란스럽습니다.

고려하다:

$ tree dir/
dir/
├── file
└── link -> file

1 directory, 2 files

이것을 tar 명령에 추가하면 -h두 개의 파일 항목이 있는 아카이브를 얻어야 합니까? 하나는 name file이고 다른 하나는 name 이고 link각각 ​​동일한 내용을 가지고 있습니까? 대신 file예상대로 아카이브했지만 아카이브의 심볼릭 링크 항목은 link다음을 가리킵니다 file.

$ tar cf archive -h dir
$ tar tvf archive
drwxr-xr-x bspencer/bspencer 0 2024-01-12 15:36 dir/
-rw-r--r-- bspencer/bspencer 13 2024-01-12 15:41 dir/file
hrw-r--r-- bspencer/bspencer  0 2024-01-12 15:41 dir/link link to dir/file

-h이 옵션은 아카이브에 심볼릭 링크 항목이 생성되는 것을 방지하도록 되어 있지 않습니까 ?

$ man tar |grep -A1 -- --dereference 
       -h, --dereference
              Follow symlinks; archive and dump the files they point to.

전통적인 문자 대신 --dereference사용하는 경우를 포함하여 매개 변수에 긴 이름을 사용하면 동일한 결과를 얻습니다 .--create

$ tar --version |head -1
tar (GNU tar) 1.34

답변1

다음 출력에도 불구하고 Tar는 링크가 아닌 개별 파일을 포함하도록 이러한 아카이브를 올바르게 확장합니다 tar tvf.

$ tree dir
dir
├── file
└── link -> file

1 directory, 2 files
$ tar cf archive -h dir
$ tar tvf archive
drwxr-xr-x bspencer/bspencer 0 2024-01-16 12:26 dir/
-rw-r--r-- bspencer/bspencer 9 2024-01-16 12:26 dir/file
hrw-r--r-- bspencer/bspencer 0 2024-01-16 12:26 dir/link link to dir/file
$ mkdir out
$ cd out && tar xvf ../archive
dir/
dir/file
dir/link
$ tree
.
└── dir
    ├── file
    └── link

2 directories, 2 files
$ ls -l dir
total 8
-rw-r--r-- 2 bspencer bspencer 9 Jan 16 12:26 file
-rw-r--r-- 2 bspencer bspencer 9 Jan 16 12:26 link

따라서 tar는 잘 작동합니다.

나는 이것이 tar tvf아카이브의 내용을 확실하게 보여줄 것이라고 잘못 생각했습니다. 대신 아카이브가 실제 개별 파일을 포함하도록 확장되더라도 "링크됨"으로 표시됩니다.

그런데, tar tvf출력이 링크에 대해 말하는 이유에 대한 제 생각에는 tar가 공간을 절약하기 위해 파일 내용을 링크로 저장하고 확장 시 별도의 파일로 생성되는 것으로 표시한다는 것입니다. 그러나 어떤 이유로 인해 tar tvf이는 표시되지 않고 실제 내부 저장소만 표시됩니다.

관련 정보