Debian 8.5と8.7でtar czfに違いがあるのはなぜですか?

Debian 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/

オペレーティングシステム:Debian 8.7

答え1

BusyBoxで見ることができると主張する動作を再現できないかどうか本当に疑問に思いますtarstarlibarchive-bsdtar


(以前の投稿)質問はどのtarを使用していますか? 8.5/8.7 の GNU tar はほぼ同じで、どちらも同じエラーを引き起こします。原因にならないのは、Debian の代替手段を使用したり、他の 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のパッチのみが含まれています。ここで Debian がどのように扱うかを見ることができます: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 \ 検索
  ;完成した;
#最初の Debian パッケージ
-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" 書き込み
#最初のDebianパッケージのTarバイナリ:
108669076 352 -rwxr-xr-x 1 ルート 358072 2014 年 11 月 8 日 tar_1.27.1-2+b1_amd64/bin/tar

#second Debian パッケージ
-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" 書き込み
#最初のDebianパッケージのTarバイナリ:
543129777 352 -rwxr-xr-x 1 root 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」を参照してください。

#second
$$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最初の場合はファイルとは見なされませんか?

関連情報