如何使用sudo将输出重定向到没有写入权限的位置?[闭门]

关闭。此问题不符合堆栈溢出准则。它目前不接受答案。

<hr class=“my12大纲无baw0 bb bc-POWER-400”/

想改进此问题吗?更新问题,使其成为堆栈溢出的主题。

已于4个月前关闭

改进这个问题

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

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

sudo ls-hal/root/&gt;/root/test.out

我刚刚收到答复:

-bash:/root/test.out:权限被拒绝

我怎样才能让它工作

您的命令不起作用,因为重定向是由您的shell执行的,它没有写入/root/test.out的权限。输出的重定向不是由sudo执行的

有多种解决方案:

  • 使用sudo运行shell,并使用-c选项向其发出命令:

    sudo sh-c'ls-hal/root/&gt;/root/test.out'
    
  • 使用命令创建脚本,并使用sudo运行该脚本:

    #!/bin/sh
    ls-hal/root/&gt;/root/test.out
    

    运行sudo ls.sh。如果不想创建临时文件,请参阅Steve Bennett的答案

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

    [[email protected]]$sudo-s
    [[email protected]]#ls-hal/root/&gt;/root/test.out
    [[email protected]]#^D
    [[email protected]]$
    
  • 使用sudo-tee(如果您在使用-c选项时不得不逃避很多):

    sudo ls-hal/root/| sudo-tee/root/test.out&gt;/dev/null
    

    需要重定向到/dev/null,以停止tee输出到屏幕。到追加,而不是覆盖输出文件
    &gt;),使用tee-atee-append(最后一个特定于GNU coreutils)

感谢Jd、Adam J.Forster和Johnathan提供第二、第三和第四种解决方案

发表评论