Как использовать перенаправление с помощью sudo

Возможный дубликат:
Перенаправление stdout в файл, на который у вас нет разрешения на запись

Да, я мог (и, вероятно, будет) просто перерасти в корне, но я хотел бы знать, почему это не работает?

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

sudo настроен на выполнение любой команды, я не налагал на нее никаких ограничений.

3 Solutions collect form web for “Как использовать перенаправление с помощью sudo”

Как уже было сказано msw раньше , это происходит потому, что >> происходит до фактического выполнения команды и не запускается с повышенными привилегиями sudo .

Альтернативный способ сделать это – обернуть всю команду в другую командную оболочку bash:

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

Это запустит новую оболочку bash с привилегиями sudo и закроет ее после выполнения команды.

Это не удается, потому что перенаправление >> всегда выполняется до выполнения команды независимо от команды.

В этом случае оболочка работает как вы (не root) и пытается добавить в файл .../config используя ваши текущие разрешения, а не root, и не удается до запуска sudo.

Общей метафорой для выполнения вашей команды является:

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

(при условии, что у вас есть разрешение на чтение для .mplayer/config ). Поскольку /home/griff/... открывается tee в корневом контексте sudo, у него есть права root для записи этого файла.

Я не .mplayer/config этом подходе, так как он копирует содержимое .mplayer/config в стандартный вывод – вместе с добавлением его в файл griff, но он действительно работает.

От

sudo способен выполнять любую команду

вы имеете в виду, что концептуально sudo может быть настроен на выполнение любой команды или что вы настроили sudo на рассматриваемую систему, как, грубо говоря, <user> <host(s)>=<opt(s)> ALL ?

Вы пробовали sudo -u 0 cat ... ? Это заставит sudo выполнить команду как root, при условии, что ваш идентификатор пользователя разрешен.

Что делает sudo -l печать?

Linux и Unix - лучшая ОС в мире.