相关疑难解决方法(0)

将标准输出重定向到您没有写权限的文件

当您尝试在没有写入权限的情况下修改文件时,您会收到错误消息:

> 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)

shell permissions io sudo io-redirection

125
推荐指数
4
解决办法
2万
查看次数

将一个文件重定向到另一个文件是否是 UUOC(对 cat 的无用使用)?

如果我想让 的内容file2匹配 的内容file1,我显然可以直接运行cp file1 file2.

但是,如果我想保留一切有关file2 除了内容所有者,权限,扩展属性,ACL的,硬链接,等等等等,那么我就不会想运行cp。*在这种情况下,我只是想在扑通file1into 的内容file2

似乎以下内容可以做到:

< file1 > file2
Run Code Online (Sandbox Code Playgroud)

但它不起作用。 file2被截断为空且不写入。然而,

cat < file1 > file2
Run Code Online (Sandbox Code Playgroud)

确实有效。

我很惊讶第一个版本不起作用。

第二个版本是UUOC吗?有没有办法在不调用命令的情况下仅通过使用重定向来做到这一点?

注意:我知道 UUOC 与其说是真正的反模式,不如说是一种迂腐的观点。

*正如tniles09 发现的那样,实际上在这种情况下cp 起作用。

io-redirection file-copy files cat

37
推荐指数
4
解决办法
3983
查看次数

标签 统计

io-redirection ×2

cat ×1

file-copy ×1

files ×1

io ×1

permissions ×1

shell ×1

sudo ×1