我已经在我们开发的一个RedHat linux机器上获得了sudo访问权,我似乎发现自己经常需要将输出重定向到一个我通常没有写访问权的位置。

问题是,这个人为的例子不起作用:

sudo ls -hal /root/ > /root/test.out

我刚刚收到回复:

-bash: /root/test.out: Permission denied

我怎样才能让它工作呢?


当前回答

每当我要做这样的事情时,我就变成root:

# sudo -s
# ls -hal /root/ > /root/test.out
# exit

这可能不是最好的方法,但确实有效。

其他回答

也许你只被授予sudo访问一些程序/路径?那就没办法做你想做的事了。(除非你能破解)

如果不是这样,那么也许你可以编写bash脚本:

cat > myscript.sh
#!/bin/sh
ls -hal /root/ > /root/test.out 

按ctrl + d:

chmod a+x myscript.sh
sudo myscript.sh

希望能有所帮助。

我对这个问题的看法是:

如果您需要写入/替换文件:

echo "some text" | sudo tee /path/to/file

如果你需要追加到文件:

echo "some text" | sudo tee -a /path/to/file

这个主题还有另一个变体:

sudo bash <<EOF
ls -hal /root/ > /root/test.out
EOF

或者当然:

echo 'ls -hal /root/ > /root/test.out' | sudo bash

它们有一个(微小的)优势,即您不需要记住sudo或sh/bash的任何参数

写一个脚本怎么样?

Filename: myscript

#!/bin/sh

/bin/ls -lah /root > /root/test.out

# end script

然后使用sudo运行脚本:

sudo ./myscript

每当我要做这样的事情时,我就变成root:

# sudo -s
# ls -hal /root/ > /root/test.out
# exit

这可能不是最好的方法,但确实有效。