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
我做错了什么?
最佳答案
为了在这里有一个适当的SO答案,我将@Kamajii和@Cyrus的评论浓缩为问题(请考虑自己做……)。tar
注意到stdout将最终在终端上。除了输出是二进制的,因此对于人类来说并不是真正的可读性,它也是security risk。
一旦您重定向了tar
进程的标准输出,它将立即起作用。给出的一个示例涉及cat
,它不管您是否给它一个二进制blob。因此tar -cf - tmp | cat
将显示二进制内容。否则,tar -cf - tmp > mytmp.tar
可能比您要使用的代码更近(尽管对于本示例来说,tar -cf mytmp.tar tmp
将是典型的调用)。