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
我做错了什么?
答案 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
应该是典型的调用)。