我在我们的一个开发 RedHat linux 机器上获得了 sudo 访问权限,我似乎发现自己经常需要将输出重定向到我通常没有写入权限的位置。
问题是,这个人为的例子不起作用:
sudo ls -hal /root/ > /root/test.out
我刚收到回复:
-bash: /root/test.out: Permission denied
我怎样才能让它工作?
原文由 Jonathan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在我们的一个开发 RedHat linux 机器上获得了 sudo 访问权限,我似乎发现自己经常需要将输出重定向到我通常没有写入权限的位置。
问题是,这个人为的例子不起作用:
sudo ls -hal /root/ > /root/test.out
我刚收到回复:
-bash: /root/test.out: Permission denied
我怎样才能让它工作?
原文由 Jonathan 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答795 阅读✓ 已解决
2 回答3.2k 阅读
您的命令不起作用,因为重定向是由您的 shell 执行的,它无权写入
/root/test.out
。输出的重定向 不是 由 sudo 执行的。有多种解决方案:
-c
选项向它发出命令:运行
sudo ls.sh
。如果您不想创建临时文件,请参阅 Steve Bennett 的 回答。sudo -s
启动一个 shell,然后运行你的命令:sudo tee
(如果您在使用-c
选项时必须逃避很多):需要重定向到
/dev/null
以阻止 tee 输出到屏幕。要 追加 而不是覆盖输出文件(>>
),请使用tee -a
或tee --append
(最后一个特定于 GNU coreutils )。感谢 Jd 、 Adam J. Forster 和 Johnathan 提供的第二个、第三个和第四个解决方案。