关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。
我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 on-topic对于堆栈溢出。
去年关闭。
Improve this question
我在我们的一个开发 RedHat linux 机器上获得了 sudo 访问权限,我似乎发现自己经常需要将输出重定向到我通常没有写入权限的位置。
问题是,这个人为的例子不起作用:
sudo ls -hal /root/ > /root/test.out
我刚收到回复:
-bash: /root/test.out: Permission denied
我怎样才能让它工作?
最佳答案
您的命令不起作用,因为重定向是由您的 shell 执行的,它没有写入 /root/test.out
的权限。 .输出重定向不是 由 sudo 执行。
有多种解决方案:
-c
向它发出命令选项:sudo sh -c 'ls -hal /root/ > /root/test.out'
#!/bin/sh
ls -hal /root/ > /root/test.out
运行
sudo ls.sh
.参见史蒂夫·贝内特的 answer如果您不想创建临时文件。 sudo -s
启动 shell然后运行你的命令:[nobody@so]$ sudo -s
[root@so]# ls -hal /root/ > /root/test.out
[root@so]# ^D
[nobody@so]$
sudo tee
(如果您在使用 -c
选项时必须逃避很多):sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null
重定向到
/dev/null
需要停止tee从输出到屏幕。追加而不是覆盖输出文件(
>>
),使用 tee -a
或 tee --append
(最后一个特定于 GNU coreutils )。 感谢转至Jd , Adam J. Forster和 Johnathan对于第二、第三和第四个解决方案。
关于linux - 如何使用 sudo 将输出重定向到我无权写入的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72193562/