with与输出重定向或管道一起使用时如何使用Sudo

在本教程中,我将向您展示与重定向或管道(|符号)一起使用时如何使用sudo命令。

当将sudo与输出重定向(>)或管道(|)一起使用时,bash将显示“权限被拒绝”错误消息。

接下来,我将向您展示解决此问题的不同方法。

在树上使用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启动外壳

另一种流行的方法是使用-c选项以root身份启动另一个shell。

例:

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

用sudo -s启动外壳

另一种方法是使用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

结论

我们研究了将sudo与输出重定向或管道结合使用并避免权限被拒绝的错误的几种方法。

如果您知道执行此操作的另一种方式,或有任何疑问,请在下面的评论部分中发布。

本文赞助- 网页设计工作室

Sidebar