如何通过 sudo 使用重定向

如何通过 sudo 使用重定向

可能的重复:
将标准输出重定向到您没有写入权限的文件

是的,我可以(并且可能会)升级到 root,但我想知道为什么这不起作用?

sudo cat .mplayer/config >> /home/griff/.mplayer/config
zsh: permission denied: /home/griff/.mplayer/config

sudo配置为能够运行任何命令,我对其没有施加任何限制。

答案1

正如回答者垃圾处理 ,发生这种情况是因为>> 发生在实际命令执行之前并且不以提升的sudo权限运行。

另一种方法是将整个命令包装在另一个 bash 命令 shell 中:

sudo bash -c "cat .mplayer/config >> /home/griff/.mplayer/config"

这将启动一个具有特权的新 bash shell sudo,并在执行命令后将其关闭。

答案2

这会失败,因为无论命令是什么,重定向>>总是在命令执行之前完成。

在这种情况下,shell 以您(而不是 root)的身份运行,并尝试.../config使用您当前的权限(而不是 root 的权限)附加到文件,并且在 sudo 运行之前失败。

执行命令的一个常见比喻是:

sudo tee --append /home/griff/.mplayer/config < .mplayer/config

(假设您具有 的读取权限.mplayer/config)。因为是在 sudo 的根上下文中/home/griff/...打开的,所以它具有写入该文件的根权限。tee

我对这种方法并不热衷,因为它将内容复制.mplayer/config到标准输出 - 并将其附加到 griff 的文件 - 但它确实有效。

答案3

经过

sudo 能够运行任何命令

您的意思是概念上 sudo 可以配置为运行任何命令,或者您已在相关系统上将 sudo 配置为,粗略地,<user> <host(s)>=<opt(s)> ALL

你有没有尝试过sudo -u 0 cat ...?这将强制 sudo 以 root 身份执行命令,前提是您的用户 ID 被允许这样做。

打印什么sudo -l

相关内容