이 코드는 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
.star
libarchive-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
첫 번째 경우에는 파일로 간주되지 않기를 원하십니까 ?