当前位置: 首页 > 面试题库 >

如何使用sudo将输出重定向到我没有写权限的位置?

呼延弘方
2023-03-14
问题内容

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

麻烦的是,这个人为的例子不起作用:

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

我刚收到回复:

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

我该如何工作?


问题答案:

您的命令无效,因为重定向是由您的外壳执行的,该外壳没有写权限/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

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



 类似资料:
  • 问题内容: 我知道在Linux中,要将输出从屏幕重定向到文件,可以使用或。但是,我不确定为什么部分输出仍会输出到屏幕上而不写入文件。 有没有办法将所有输出重定向到文件? 问题答案: 该部分已写入stderr,用于重定向它。例如: 或者,如果您要在同一文件中: 注意:这在(ba)sh中有效,请检查您的shell语法是否正确

  • 问题内容: 我想使用python将打印重定向到.txt文件。我有一个“ for”循环,当我要将所有这些输出重定向到一个文件时,它将“打印”每个文件的输出。所以我试着把 在我的脚本的开头。但是,.txt文件中什么也没有。我的脚本是: 所以有什么问题?除了此sys.stdout以外,还有其他方法吗? 我需要我的结果看起来像: 问题答案: 最明显的方法是打印到文件对象: 但是,重定向标准输出对我也有效。

  • 问题内容: 在bash中,调用将在stdout上显示该命令的任何输出。 调用会将该命令的任何输出重定向到指定的文件(在本例中为“输出”)。 有没有一种方法可以将输出重定向到文件 并 在stdout上显示? 问题答案: 您想要的命令名为 : 例如,如果您只关心标准输出: 如果要包括stderr,请执行以下操作: 将通道2(stderr /标准错误)重定向到通道1(stdout /标准输出),以便将两

  • 问题内容: 我正在尝试使curl遵循重定向,但无法完全正常工作。我有一个字符串,我想将它作为GET参数发送到服务器并获取结果URL。 例: 字符串= Kobold害虫 网址= _www.wowhead.com/search?q=Kobold+Worker_ 如果您转到该URL,它将把您重定向到“ www.wowhead.com/npc=257”。我希望curl将此URL返回到我的PHP代码,以便我

  • 问题内容: 我有一个cron作业,现在将其输出重定向到文件中。看起来如下 有人可以帮助我将其输出重新分配到stdout吗? 问题答案: 在任何终端上输入,我们将获得该特定终端窗口的设备文件,例如。将cron作业重新命名为该文件

  • 问题内容: 我正在尝试将服务的输出重定向到文件,但它似乎不起作用: 请更正我的方法。 问题答案: 我认为有一种解决问题的更优雅的方法:将stdout / stderr发送给具有标识符的syslog,并指示syslog管理器按程序名称拆分其输出。 在您的systemd服务单元文件中使用以下属性: 然后,假设您的发行版正在使用rsyslog管理syslog,请在其中创建一个包含以下内容的文件: 现在,