在 Linux 中使用 sudo 授予输出重定向的权限

在 Linux 中使用 sudo 授予输出重定向的权限

我尝试将值“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

相关内容