当您尝试在没有写入权限的情况下修改文件时,您会收到错误消息:
> touch /tmp/foo && sudo chown root /tmp/foo
> echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)
Sudoing 没有帮助,因为它以 root 身份运行命令,但 shell 处理重定向 stdout 并以您的方式打开文件:
> sudo echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)
除了以root身份打开shell并以这种方式操作文件之外,是否有一种简单的方法可以将stdout重定向到您无权写入的文件?
> sudo su
# echo test > /tmp/foo
Run Code Online (Sandbox Code Playgroud) 如果我想让 的内容file2
匹配 的内容file1
,我显然可以直接运行cp file1 file2
.
但是,如果我想保留一切有关file2
除了内容所有者,权限,扩展属性,ACL的,硬链接,等等等等,那么我就不会想运行cp
。*在这种情况下,我只是想在扑通file1
into 的内容file2
。
似乎以下内容可以做到:
< file1 > file2
Run Code Online (Sandbox Code Playgroud)
但它不起作用。 file2
被截断为空且不写入。然而,
cat < file1 > file2
Run Code Online (Sandbox Code Playgroud)
确实有效。
我很惊讶第一个版本不起作用。
第二个版本是UUOC吗?有没有办法在不调用命令的情况下仅通过使用重定向来做到这一点?
注意:我知道 UUOC 与其说是真正的反模式,不如说是一种迂腐的观点。
*正如tniles09 发现的那样,实际上在这种情况下cp
会起作用。