sudo 和 echo 一起使用时提示 Permition denied.

这样一条命令:

sudo echo "something" >> /etc/sudoer

看上去感觉应该没有问题,使用sudo提权执行echo,重定向输入到文件中,但是在实际执行的时候会提示”Permission denied”(没有权限)。

为什么会这样?很简单,真正执行重定向的是 shell,也就是说 “>> /etc/sudoer” 这块是有当前输入命令的shell来执行的,并不是 sudo 或者 echo 命令,而当前shell并没有root权限。

两种方法来解决这个问题。

第一种:

sudo sh -c "echo 'something' >> /etc/sudoer"

这种方法直接重新启用一个shell来执行 “echo ‘something’ >> /etc/sudoer”命令,并通过sudo给sh赋权限。

第二种:

echo "something" | sudo tee --append /etc/sudoer

这种方法是使用管道(’|’)和 tee 命令来接管原来由shell执行的重定向功能,并通过sudo给tee命令赋予权限。

至于tee命令,可以查看其 man page。

tee – read from standard input and write to standard output and files

参考链接:

  1. https://stackoverflow.com/questions/84882/sudo-echo-something-etc-privilegedfile-doesnt-work-is-there-an-alterna

Leave a Reply

Your email address will not be published. Required fields are marked *