How do I use redirection with sudo

10,040

Solution 1

As answered by msw before, this happens because >> happens before the actual command execution and does not run with the elevated sudo privileges.

An alternative way to do this, is to wrap the entire command in another bash command shell:

sudo bash -c "cat .mplayer/config >> /home/griff/.mplayer/config"

This will start a new bash shell with sudo privileges and closes it after executing the command.

Solution 2

This fails because the redirection >> is always done before the execution of the command regardless of the command.

In this case, the shell is running as you (not root) and tries to append to the .../config file using your current permissions, not root's, and fails before sudo even runs.

A common metaphor for doing what your command intends is:

sudo tee --append /home/griff/.mplayer/config < .mplayer/config

(assuming that you have read permission for .mplayer/config). Because /home/griff/... is opened by tee in the root context of sudo, it has root permissions to write that file.

I'm not wild about this approach as it copies the contents of .mplayer/config to the standard output - along with appending it to griff's file - but it does work.

Share:
10,040

Related videos on Youtube

xenoterracide
Author by

xenoterracide

Former Linux System Administrator, now full time Java Software Engineer.

Updated on September 17, 2022

Comments

  • xenoterracide
    xenoterracide almost 2 years

    Possible Duplicate:
    Redirecting stdout to a file you don't have write permission on

    Yeah I could (and probably will) just escalate to root, but I'd like to know why this doesn't work?

    sudo cat .mplayer/config >> /home/griff/.mplayer/config
    zsh: permission denied: /home/griff/.mplayer/config
    

    sudo is configured to be able to run any command, I've placed no restrictions on it.

    • Admin
      Admin over 13 years
      I remember an old question asking how to use sudo just like this...
    • Admin
      Admin over 13 years
    • Admin
      Admin over 13 years
      @phunhehe++ I didn't know this had been asked
  • xenoterracide
    xenoterracide over 13 years
    no I meant that I haven't restricted its ability to run commands, which sudo is capable of.
  • xenoterracide
    xenoterracide over 13 years
    User xenoterracide may run the following commands on this host: (ALL) NOPASSWD: ALL # waits for lynchmob