关于 sudo 的两个错误

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
bash: /proc/sys/net/ipv4/ip_forward: Permission denied

权限问题,但是使用了 sudo 了,为什么权限还是不行?
G 了之后发现,">"/">>" 也就是重定向的这两个符号也是 bash 的命令,sudo 之后只有 echo 有了 root 权限,> 并没有 root 权限。几种解决方式。

1.转变为 root 之后执行

$ su -

2.通过 sh -c 执行

$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
-c:Read commands from the command_string operand. Set the value of special parameter 0 (see  Special  Parameters  )  from  the value of the command_name operand and the positional parameters ($1, $2, and so on) in sequence from the remaining argument operands. No commands shall be read from the standard input.

3.pipe + tee

$ echo "1 " | sudo tee /proc/sys/net/ipv4/ip_forward

注意:tee 还有个 -a 选项,append 的意思,等同于 ">>",不加参数即 ">"


有关 cd 的错误:

$ cd /root/
bash: cd: /root/: Permission denied
$ sudo !!
sudo cd /root/
sudo: cd: command not found

cd 是一个 built-in 命令,sudo 只能执行外部的命令。
"cd" is a shell built-in command, you can't run it as a command since a child process (sudo) cannot affect the current working directory of the parent (your shell).

解决的办法只能切换到 root 再执行。

  • http://www.klausme.info twobit

    博客写的不错,思路清晰,排版整洁。赞一个!

  • http://www.freetstar.com freetstar

    佩服,2个困扰我很久的问题,一直直接su – root,没有追根究地过