通过重定向或者管道的Sudo权限被拒绝
时间:2020-03-05 15:30:04 来源:igfitidea点击:
在本教程中,将介绍将sudo命令与重定向或者管道一起使用时的用法。
当将sudo与重定向(>)或者管道(|)一起使用时,我们将在bash输出中获得Permission拒绝错误消息。
在此进一步,将介绍解决此问题的不同方法。
与tee一起使用sudo
例如,要将“ echo 1”命令的输出重定向到“ ip_forward”文件,请运行:
$sudo echo 1 > /proc/sys/net/ipv4/ip_forward bash: /proc/sys/net/ipv4/ip_forward: Permission denied
上面的sudo命令导致权限被拒绝,因为重定向是由没有写权限的shell完成的。
我们可以将sudo命令与tee命令一起使用来解决此错误:
$echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
使用上述方法,在管道之前执行的命令将不会以root身份运行(回显1)。
如果我们只需要程序的输出,而该程序不需要root特权,则这很有用。
如果管道之前的命令需要root用户,我们可以在每个命令之前使用sudo,如下所示:
$sudo echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null
像前面的示例一样,我们可以使用类似的方法将“ 1”写入“ ip_forward”文件,这将提高写入文件的过程。
一个例子如下:
$sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null << EOF 1 EOF
使用sudo -c运行shell
另一种流行的方法是使用'-c'选项以root身份运行另一个shell。
例子:
$sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
使用sudo -s运行shell
另一种方法是使用“ sudo -s”启动shell,然后运行以下命令:
$sudo -s # echo 1 > /proc/sys/net/ipv4/ip_forward # ^D $
通过使用Bash脚本
还有另一种通过重定向或者管道运行sudo的方法,它是使用所有命令创建一个bash脚本,然后使用sudo运行该脚本。
让我们看看如何做到这一点。
首先,我们需要使用任何文本编辑器(例如nano,vim,gedit或者其他任何文件)创建一个新文件。
我们将其命名为“ myscript.sh”。
然后将以下命令粘贴到myscript.sh并保存文件:
#!/bin/sh echo 1 > /proc/sys/net/ipv4/ip_forward
现在,我们只需要使用sudo命令运行myscript.sh文件:
$sudo myscript.sh