一尘不染

如何使用sudo将输出重定向到我没有写权限的位置?

linux

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

麻烦的是,这个人为的例子不起作用:

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

我刚收到回复:

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

我该如何工作?


阅读 310

收藏
2020-06-02

共1个答案

一尘不染

您的命令无效,因为重定向是由您的外壳执行的,该外壳没有写权限/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

  • 使用启动一个shell,sudo -s然后运行您的命令:

    [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 -atee --append(最后一个特定于GNU
coreutils
)。

2020-06-02