Предоставьте разрешение на перенаправление вывода с помощью sudo в Linux

Предоставьте разрешение на перенаправление вывода с помощью sudo в Linux

Я пытаюсь поместить значение «1» в какой-то виртуальный файл /procи получаю сообщение «отказано в доступе», несмотря на использование sudo:

name@comp-name:/etc/dhcp$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward 
bash: /proc/sys/net/ipv4/ip_forward: Permission denied

Я предполагаю, что эта echoкоманда выполняется с правами root, но redirect ( >) может быть выполняется без них? Могу ли я запустить их обе с правами root?

решение1

В этом случае, как вы сказали , sudoбудет применяться только к .echo

Вместо этого вы можете запустить оболочку с повышенными привилегиями следующим образом:

sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

Или еще короче:

sudo -s 'echo 1 > /proc/sys/net/ipv4/ip_forward'

решение2

рекомендуемый способ сделать это — подключиться к программеtee

echo 1 | tee /proc/sys/net/ipv4/ip_forward

решение3

Проблема в том, что перенаправление выполняется вашей оболочкой, а не sudo. Обычно программа, которую вы запускаете, exec()ed после перенаправления. Поскольку у вас нет прав на запись в файл, перенаправление не выполняется. Как упоминалось выше, рекомендуемый способ — использовать tee, как в

echo stuff | sudo tee /some/file/path

Связанный контент