在Ubunutu 16

时间:2017-09-17 11:15:18

标签: ubuntu-16.04 tar

tar无法写入Ubuntu 16上的标准输出:

prod ~    $ cat /etc/os-release  | grep -i version
VERSION="16.04.2 LTS (Xenial Xerus)"
VERSION_ID="16.04"
VERSION_CODENAME=xenial

prod ~    $ tar -cf - tmp
tar: Refusing to write archive contents to terminal (missing -f option?)
tar: Error is not recoverable: exiting now

让我们试试CentOS7:

[root@drft068 ~]# tar -cf - /tmp
tar: Removing leading `/' from member names
tar: /tmp/mongodb-27018.sock: socket ignored
tar: /tmp/mongodb-27017.sock: socket ignored
tmp/00017770000000000000000000000000131574472010

我做错了什么?

1 个答案:

答案 0 :(得分:5)

要在这里有一个正确的SO答案,我将@Kamajii和@Cyrus的评论浓缩为问题(请考虑自己做……)。

tar注意到stdout将最终在终端上。除了输出是二进制的,因此对于人类来说并不是真正的可读性,它也是security risk

在重定向tar进程的标准输出后,它将立即起作用。给定的一个示例涉及cat,它不关心是否给它一个二进制blob。因此

tar -cf - tmp | cat

将显示二进制内容。否则,tar -cf - tmp > mytmp.tar可能比您想使用的要近(尽管在本例中,tar -cf mytmp.tar tmp应该是典型的调用)。