我尝试将值“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 权限才能运行,但重定向 ( >
) 可能不需要吗?我可以用 root 权限运行它们吗?
答案1
在这种情况下,sudo
将仅适用于echo
,正如您所说。
相反,你可以像这样运行提升的 shell:
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
问题是重定向是由你的 shell 而不是 完成的sudo
。通常你运行的程序exec()
在重定向后被 ed。由于你没有写入文件的权限,重定向会失败。如上所述,推荐的方法是使用tee
,如下所示
echo stuff | sudo tee /some/file/path