Monday, August 4, 2008

关于sudo的一个必须注意的point

今天在往一个只有600权限的文件中写入内容时发现了一点小问题:

iveney@iveney-laptop:~$ ll /var/run/xl2tpd/l2tp-control
prw------- 1 root root 0 2008-08-04 11:21 /var/run/xl2tpd/l2tp-control

iveney@iveney-laptop:~$ sudo echo "d ResNet" > /var/run/xl2tpd/l2tp-control
bash: /var/run/xl2tpd/l2tp-control: Permission denied

非常奇怪,为什么用了sudo还是permission denied了呢?难道一定要先chmod后再echo?
岂不是非常不符合逻辑?

后来查阅了一下发现原来是这样的:
echo,ls等是bash的built-in命令,echo时实际是shell自己往文件里头写东西,而我是以普通用户身份运行的shell。

因此只要在命令前再加上生成一个子shell的命令即可。

sudo sh -c 'echo "c ResNet" > /var/run/xl2tpd/l2tp-control'


No comments: