小编典典

如何使用 sudo 将输出重定向到我无权写入的位置?

all

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

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

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

我刚收到回复:

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

我怎样才能让它工作?


阅读 109

收藏
2022-02-28

共1个答案

小编典典

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

有多种解决方案:

  • -c使用 sudo 运行 shell 并使用以下选项向它发出命令:

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
  • 使用您的命令创建一个脚本并使用 sudo 运行该脚本:

    #!/bin/sh
    

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

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

  • 启动一个 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 -aor tee --append(最后一个特定于GNU
coreutils
)。

2022-02-28