在Ubunutu 16上将tar创建到stdout

rli*_*lib 5 tar ubuntu-16.04

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
Run Code Online (Sandbox Code Playgroud)

让我们尝试一下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
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Fel*_*lix 6

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

tar注意stdout将最终在终端上。除了输出是二进制的,因此对于人类来说不是真正可读的,这也是安全隐患

重定向该tar过程的标准输出后,它将立即起作用。给出的一个示例涉及cat,如果您给它提供二进制blob,则不在乎。从而

tar -cf - tmp | cat

将显示二进制内容。否则tar -cf - tmp > mytmp.tar可能比您要使用的要近(尽管对于本例tar -cf mytmp.tar tmp来说,这将是典型的调用)。