데비안 8.5와 8.7에서 tar czf에 차이점이 있는 이유는 무엇입니까?

데비안 8.5와 8.7에서 tar czf에 차이점이 있는 이유는 무엇입니까?

이 코드는 Debian 8.5에서는 작동하지만 Debian 8.7에서는 작동하지 않습니다.

 root@masi:/home/masi# nice tar --keep-directory-symlink czf /media/masi/masiDisc/backup_home_27.2.2017.tar.gz /home/masi/

Debian 8.7에서는 GNU tar 1.27.1을 사용합니다.

tar: You must specify one of the '-Acdtrux', '--delete' or '--test-label' options
Try 'tar --help' or 'tar --usage' for more information.

추가하여 수정할 수 있지만 동일한지 확실하지 않습니다 -.czf

 root@masi:/home/masi# nice tar --keep-directory-symlink -czf /media/masi/masiDisc/backup_home_27.2.2017.tar.gz /home/masi/

운영 체제: 데비안 8.7

답변1

BusyBox 에서 볼 수 있다고 주장하는 동작을 재현할 수 없는지 정말 궁금합니다 tar.starlibarchive-bsdtar


(이전 게시물) 질문은 어떤 tar를 사용하고 있습니까? 8.5/8.7의 GNU tar는 거의 동일하며 둘 다 동일한 오류를 유발합니다. 원인이 되지 않는 것은 데비안 대안을 통하거나 다른 tar를 사용하는 것일 수도 dpkg-divert있고 경로의 다른 곳에 있을 수도 있습니다.

Debian FTP의 ISO 목록에 표시된 대로 각 릴리스와 함께 제공되는 GNU tar 버전은 다음과 같습니다.

debian-8.5.0-amd64-CD-1.list.gz:tar_1.27.1-2+b1_amd64.deb
debian-8.7.0-amd64-CD-1.list.gz:tar_1.27.1-2+deb8u1_amd64.deb

매우 유사하며 CVE-2016-6321에 대한 패치만 포함되어 있습니다. 여기에서 데비안이 어떻게 처리하는지 볼 수 있습니다:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=842339 이 패치는 tarball의 경로 항목 처리를 처리 /../하며 매개변수 처리에는 영향을 주지 않습니다.

두 debs(제 경우에는 netinst iso에서 추출했습니다)를 모두 얻고 tar 바이너리를 추출하면 동작을 테스트할 수 있습니다.

$ tar_1.27.1-2+b1_amd64 tar_1.27.1-2+deb8u1_amd64의 경우 \
  ls -la ${i}.deb && \
  deb2targz ${i}.deb && \
  mkdir -p $i && \
  tar -xf ${i}.tar.xz -C $i && \
  $i -name tar -type f -perm /111 -ls \ 찾기
  ;완성된 ;
# 첫 번째 데비안 패키지
-r--r--r-- 1 루트 루트 675968 3월 24일, 21:31 tar_1.27.1-2+b1_amd64.deb
# 압축을 풀기 위해 tarball로 변환합니다.
deb2targz: 'tar_1.27.1-2+b1_amd64.deb' 변환...
deb2targz: "debian-binary" 부분을 건너뜁니다.
deb2targz: "control.tar.gz" 부분을 건너뜁니다.
deb2targz: "tar_1.27.1-2+b1_amd64.tar.xz" 쓰기
# 첫 번째 데비안 패키지의 Tar 바이너리:
108669076 352 -rwxr-xr-x 1 루트 358072 2014년 11월 8일 tar_1.27.1-2+b1_amd64/bin/tar

# 두 번째 데비안 패키지
-r--r--r-- 1 루트 루트 676278 3월 24일, 21:32 tar_1.27.1-2+deb8u1_amd64.deb

# 압축을 풀기 위해 tarball로 변환합니다.
deb2targz: "tar_1.27.1-2+deb8u1_amd64.deb" 변환...
deb2targz: "debian-binary" 부분을 건너뜁니다.
deb2targz: "control.tar.gz" 부분을 건너뜁니다.
deb2targz: "tar_1.27.1-2+deb8u1_amd64.tar.xz" 쓰기
# 첫 번째 데비안 패키지의 Tar 바이너리:
543129777 352 -rwxr-xr-x 1 루트 358072 10월 31일, 14:37 tar_1.27.1-2+deb8u1_amd64/bin/tar

이제 두 버전을 모두 추출했으므로 테스트 명령의 변형과 비교할 수 있습니다.

# 우리가 어떤 것을 사용하고 있는지 명확히 하기 위한 변수:
$ tar1=./tar_1.27.1-2+b1_amd64/bin/tar
$ tar2=./tar_1.27.1-2+deb8u1_amd64/bin/tar

#첫 번째
$ $tar1 --keep-directory-symlink czf /tmp/foo.tar.gz /tmp/foo
./tar_1.27.1-2+b1_amd64/bin/tar: "-Acdtrux", "--delete" 또는 "--test-label" 옵션 중 하나를 지정해야 합니다.
"./tar_1.27.1-2+b1_amd64/bin/tar --help"를 시도하거나
자세한 내용은 './tar_1.27.1-2+b1_amd64/bin/tar --usage'를 참조하세요.

# 두번째
$ $tar2 --keep-directory-symlink czf /tmp/foo.tar.gz /tmp/foo
./tar_1.27.1-2+deb8u1_amd64/bin/tar: "-Acdtrux", "--delete" 또는 "--test-label" 옵션 중 하나를 지정해야 합니다.
"./tar_1.27.1-2+deb8u1_amd64/bin/tar --help"를 시도하거나
자세한 내용은 './tar_1.27.1-2+deb8u1_amd64/bin/tar --usage'를 참조하세요.

다른 tar 구현에 대한 논의는 tar 구현 간의 차이점에 대한 질문에 대한 답변을 참조하세요.https://unix.stackexchange.com/a/104172/54009

답변2

-czf를 추가하여 문제를 해결할 수 있지만 동일한지 확실하지 않습니다.

이것은. 맨페이지에서는 이 작업을 수행하는 데 많은 시간이 걸립니다.

기본적으로 긴 옵션 세트에는 짧은 작동 모드 옵션에 대한 별칭이 포함되어 있기 때문에 tar에서는 다소 이상한 동작을 예상할 수 있습니다.

tar --keep-directory-symlink czf b e

tar --create b e

tar --create zf b e

예를 들어, 위의 마지막 명령으로 무엇을 하시겠습니까? zf마지막 경우에는 파일로 간주되지만 czf첫 번째 경우에는 파일로 간주되지 않기를 원하십니까 ?

관련 정보