Chinaunix首页 | 论坛 | 博客
  • 博客访问: 494754
  • 博文数量: 102
  • 博客积分: 4001
  • 博客等级: 上校
  • 技术积分: 756
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-21 16:01
文章分类

全部博文(102)

文章存档

2011年(1)

2010年(1)

2009年(56)

2008年(44)

我的朋友

分类: LINUX

2009-03-09 21:07:38

$sudo echo ‘1′ > ip_forward
bash: ip_forward: Permission denied

而以root身份就可以?

# echo ‘1′ > ip_forward

一开始没有看出原因来,后来仔细一琢磨,其实原因很简单,shell对‘>’解释干扰了对这个命令含义的判断。我们本想应该是这样的意思:让 sudo执行后面的这些“echo ‘1′ > ip_forward”,而实际上是:sudo echo ‘1′ ,执行到这里,shell再把它的执行结果重定向到ip_forward里去!当然是无权限,因为流本身不会随echo那样被sudo“感染”上suid 权限!

解决方法是什么?也很简单,就让后面那一串东西搁一起执行:

$sudo sh -c ‘echo 1 > ip_forward’

等等,还有没有更好的解决方法?有!刘洋同学认真思考了一下,觉得应该有这么个东西XX: echo ‘1′ | sudo XX ip_forward。我擦亮眼睛一看,我靠,这不就是tee(1)么!!没错,另一种解决方法就是:

$echo ‘1′ | sudo tee ip_forward

或者:

$echo ‘1′ | sudo tee ip_forward | cat > /dev/null

刘洋问tee(1)是不是和tea有关系?不是!tee其实取自大写字母T的发音,而T不正是最后一个命令中流的流向么?!多么形象的名字啊!

阅读(3416) | 评论(1) | 转发(0) |
0

上一篇:继续学习git

下一篇:共享上网和NFS

给主人留下些什么吧!~~

chinaunix网友2009-03-09 21:09:34

这个解释确实不错,我以前也遇到过,不过解决了后并没有思考过,说的还挺有道理的,呵呵