如何使用sudo将输出重定向到我无权写入的位置?
sudo ls -hal /root/ > /root/test.out #此时他会报错
-bash: /root/test.out: Permission denied #没有权限
为什么命令不起作用呢?
因为重定向是由您的 shell 执行的,它是没有写入权限的shell执行/root/test.out
. sudo不执行输出的重定向。
这里有多种解决方案
1.使用 sudo 运行 shell 并使用以下-c
选项向它提供命令:
sudo sh -c 'ls -hal /root/ > /root/test.out'
2.使用您的命令创建一个脚本并使用 sudo 运行该脚本:
#!/bin/sh
ls -hal /root/ > /root/test.out
运行sudo ls.sh
。
3.启动一个 shell,sudo -s
然后运行你的命令:
[nobody@so]$ sudo -s
[root@so]# ls -hal /root/ > /root/test.out
[root@so]# ^D
[nobody@so]$
4.使用sudo tee
(如果您在使用该-c
选项时必须大量转义):
sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null
/dev/null
需要重定向到以阻止tee输出到屏幕。要追加而不是覆盖输出文件 ( >>
),请使用tee -a
or tee --append
5.管道给sudo bash
echo 'echo 66 > /root/11.txt' | sudo bash