
Я пытаюсь поместить значение «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