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

标签 linux bash permissions sudo io-redirection

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

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

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

我刚刚收到回复:

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

我怎样才能让它工作?

最佳答案

您的命令不起作用,因为重定向是由您的 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 -atee --append (最后一个特定于 GNU coreutils )。

感谢 Jd , Adam J. ForsterJohnathan用于第二、第三和第四种解决方案。

关于linux - 如何使用 sudo 将输出重定向到我无权写入的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/82256/

相关文章:

linux - Bash 警告 - 预期参数

bash - 如何将数据输出到文件,同时抑制终端上的输出?

python - Conda 软件包安装 [Errno 13] 安装 conda-forge::protobuf-3.8.0 时权限被拒绝

security - 基于用户或组成员身份的微服务架构中的实体级访问限制

c - 如何编译 POSIX 定时器

python - 如何将Python库卡住到Linux程序中?

linux - 为什么在主机挂载上使用纯数据容器?

linux - 如何在bash中对一系列数字求和

linux - 使 Unix shell 脚本符合 POSIX 标准

java - 如何知道android中使用的权限列表?