How do I use redirection with sudo
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.
Related videos on Youtube
xenoterracide
Former Linux System Administrator, now full time Java Software Engineer.
Updated on September 17, 2022Comments
-
xenoterracide almost 2 years
Possible Duplicate:
Redirecting stdout to a file you don't have write permission onYeah 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 over 13 yearsI remember an old question asking how to use sudo just like this...
-
Admin over 13 yearshere it is unix.stackexchange.com/q/1416/250
-
Admin over 13 years@phunhehe++ I didn't know this had been asked
-
-
xenoterracide over 13 yearsno I meant that I haven't restricted its ability to run commands, which
sudo
is capable of. -
xenoterracide over 13 yearsUser xenoterracide may run the following commands on this host: (ALL) NOPASSWD: ALL # waits for lynchmob