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

标签 linux bash permissions sudo io-redirection

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 on-topic对于堆栈溢出。


去年关闭。







Improve this question




我在我们的一个开发 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 .参见史蒂夫·贝内特的 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/72193562/

    相关文章:

    linux - 如何让我的一个类轮脚本根据条件打印颜色?

    bash - 通过 shell 变量传递包含空格的参数

    permissions - 为什么在 onRequestPermissionsResult 之后调用 onResume?

    shell - 如何获取错误输出并将其存储在变量或文件中

    php - gnupg 与 php 抛出 "could not init keylist"

    linux - PGP/GPG无法解密

    linux - 使用命令输入的 Bash 别名

    linux - 在 Bash 中将进程限制为 0.5 秒

    linux - Oracle Linux (RHEL) 6.6 性能非常糟糕 - 发生了什么事?

    c++ - 如何附加到带有命令行参数的进程?