尝试使用sudo将文件附加到root拥有的文件时,权限被拒绝

Des*_*ume 43 linux bash shell command-line sudo

当我尝试使用sudo将文件中的数据附加到另一个文件时,这是导致"权限被拒绝"的shell命令:

sudo cat add_file >> /etc/file
Run Code Online (Sandbox Code Playgroud)

文件at /etc/fileroot(即我)拥有,其权限是rw-r--r--.我应该root暂时让它成功还是有解决方法sudo

Chr*_*our 64

运行bash方式sudo:

$ sudo bash -c "cat add_file >> /etc/file"

$ whoami;sudo bash -c "whoami";whoami
iiSeymour
root
iiSeymour
Run Code Online (Sandbox Code Playgroud)


Gil*_*not 26

尝试这样做:

sudo tee -a /etc/file < add_file
Run Code Online (Sandbox Code Playgroud)

它比运行bash还要轻 sh -c command

  • 您可能希望使用`sudo tee -a/etc/file <add_file>/dev/null`将输出静音到终端(如果要添加的文件很大或非文本,则特别有用) (3认同)
  • 这个方法的问题(与其他方法相比)是文件`add_file`需要用户可读.但是如果用户可以读取文件,则启动全新的"bash"或"sh"会更短,更有效. (2认同)

gni*_*urf 9

一个有趣的可能性是使用ed(标准编辑器):

sudo ed -s /etc/file <<< $'r add_file\nwq'
Run Code Online (Sandbox Code Playgroud)

我知道我不会因为这个美妙的答案而被投票,但我想把它包含在这里(因为它很有趣).完成!


Max*_*amy 5

您正在尝试将命令的结果写入sudo cat add_file文件/ etc/file.显然你没有这个权利.

man sudo 举个例子:

   To make a usage listing of the directories in the /home partition.  Note
   that this runs the commands in a sub-shell to make the cd and file
   redirection work.

    $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
Run Code Online (Sandbox Code Playgroud)

所以你应该尝试:

sudo sh -c "cat add_file >> /etc/file"

  • 什么都没有,sudo_O已经说过了. (2认同)
  • 我认为另一个答案缺乏解释,它只是提供了一个解决方案.首先,我想添加我的第一句作为评论,但是对于男人引用它太长了. (2认同)