可能的重复:
将标准输出重定向到您没有写入权限的文件
是的,我可以(并且可能会)升级到 root,但我想知道为什么这不起作用?
sudo cat .mplayer/config >> /home/griff/.mplayer/config
zsh: permission denied: /home/griff/.mplayer/config
sudo
配置为能够运行任何命令,我对其没有施加任何限制。
答案1
答案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
?