这两天一直在想办法共享上网。这其中有关键的一个环节就是在用iptables来作nat,Ubuntu默认是不转发的。所以就要先改/proc/sys/net/ipv4/ip_forward的内容,把它改成’1’。但是用echo ‘1’ > /proc/sys/net/ipv4/ip_forward也不行,用sudo echo ‘1’ > /proc/sys/net/ipv4/ip_forward,也不行。
所以,我怀疑我记错了/proc中的某些内容是可以直接更改的。就问了wangcong,也得到肯定的回答。但是,为什么不可以,就又和他讨论了一下。首先用root是可以实现echo ‘1’ > /proc/sys/net/ipv4/ip_forward的,就证明了,这个是可以修改的。用sudo的时候要么是sudo的问题,要么是shell的问题。实际上,就是sudo管不到’>’重定向所写的文件的权限,这次写文件还是普通权限,所以是不可以写root的文件的。用sudo sh -c ‘echo 1 > ip_forward’是可以的,证明问题就在’>’!
这是一个重定向,shell 把它之前的内容解释成为一个命令,sudo见都见不到它,也就管不着它的权限了。当然因为’>’的本来含义,这个特性是天经地义的。所以要用重定向来更改需要root权限才能更改的文件就比较麻烦了。
不过后来wangcong想起了一个命令──tee,可以用来完成这个工作:
echo ‘1’ | sudo tee /proc/sys/net/ipv4/ip_forward [>/dev/null]
就可以了。
总结一下流水帐:sudo只对一个命令起作用,如果用管道的话,管道后将丢失sudo提升的权限。 tee产生两个相同的输出,一个到标准输出,一个到指定文件,它可以把流进行分叉。
sudo sh -c “echo 0 > /proc/sys/net/ipv4/ip_forward”
to kongove:
你失误了~那是我们班同学,怎么也算是你学姐啊,我和她开玩笑的~
To chenw:
Welcome to join in Xiyou Linux Group.
Don’t worry!Just a interesting group.
to chenw:
孺子可教啊,应该早点把你弄进Linux兴趣小组的,就怕sun同学不同意,哈哈
昨天刚听完你的经验之谈今天就看到这篇文章了。呵呵,刚开始接触linux,慢慢觉得她还是很有意思的。。。
恩,咱们的差不多~~