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

我在我们的一个开发 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. Forster和 Johnathan用于第二、第三和第四种解决方案。

https://stackoverflow.com/questions/82256/

相关文章:

python - Python 中 % 的结果是什么?

linux - 如何在终端中获取当前日期和时间并在终端中为其设置自定义命令?

python - 为什么列表没有像字典一样的安全 "get"方法?

python - 如何判断 tensorflow 是否从 python shell 内部使用 gpu

linux - 如何使用 SSH 从服务器下载文件?

linux - "POSIX"是什么意思?

python - 如何在 Windows 中同时安装 Python 2.x 和 Python 3.x

python - 创建单独变量字典的更简单方法?

python - 解析命令行参数的最佳方法是什么?

linux - 如何在 Linux/Unix 上永久设置 $PATH