您的命令不工作,因为重定向由您的shell执行,它没有写入/root/test.out的权限。输出的重定向不是由sudo执行的。
有多种解决方案:
>使用sudo运行shell,并使用-c选项向其提供命令:
sudo sh -c 'ls -hal /root/ > /root/test.out'
>使用命令创建脚本并使用sudo运行该脚本:
#!/bin/sh
ls -hal /root/ > /root/test.out
运行sudo ls.sh.如果您不想创建一个临时文件,请参见Steve Bennett的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)。