分页: 1 / 1

ubuntu关于文件重定向的bug

发表于 : 2007-06-10 4:43
janker2lonely
用redhat那么多年,最近半年被ubuntu吸引住了,用了几个月发现了一个非常有趣的问题,就是文件重定向的问题,以前用redhat的时候从未遇过。看,大家可以在命令行下输入以下命令:
ls -al > /etc/ls.txt
哈,会得到一个pemission denied的提示,对,由于权限不够,忘了,这是基于debian的,于是sudo ls -al > /etc/ls.txt,但是结果还是一样,于是将/etc/ls.txt换成/tmp/ls.txt,OK,成功。恩,于是再试,几乎将所有的命令重定向为/etc目录下的文件时,都出现了pemission denied的提示,失败。后来查看/tmp下生成的文件,发现属主为xxx(xxx是我的当前用户),看到了吧?!虽然用了sudo执行命令然后重定向,但是重定向的时候依然以当前用户来重定向。这样的话在/etc目录下生成文件当然是失败的了,因为该目录的权限只有root才有写入权,只要重定向的目录有写入权就不会出现这个问题了,如/tmp。尽管查出了原因,但是还是有些不爽,毕竟有些软件的配置文件是保存于etc目录的,如vsftpd,这样的你想用重定向命令>>来追加内容,比如新增加ftp用户,这样写SHELL脚本的时候就不得不先把文件重定向到/tmp,然后再cp到/etc目录了。大家可以试试,有解决的好办法记得回帖通知兄弟我哦!先在此谢过!
对了,忘了说,兄弟我用的是7.04,因为我以前没用过debian,不知道debian和以前的ubuntu版本会不会有这个问题。

发表于 : 2007-06-10 11:11
thword
可以用tee
ls -al |sudo tee /etc/ls.txt
追加的话
ls -al |sudo tee -a /etc/ls.txt

发表于 : 2007-06-10 15:03
janker2lonely
thword 写了:可以用tee
ls -al |sudo tee /etc/ls.txt
追加的话
ls -al |sudo tee -a /etc/ls.txt

多谢这位兄弟。ubuntu真好,但愿能保持下去。

发表于 : 2007-06-10 15:14
bones7456
恩,我也已经发现这个问题了,个人理解是
sudo ls -al > /etc/ls.txt
这个命令的sudo只影响到了红色部分,而不会对重定向符后面部分产生影响,这就好比 sudo command1 && command2 只有command1会以root运行一样。

发表于 : 2007-06-10 15:16
BigSnake.NET
echo 'ls -al > /etc/ls.txt ' |sudo sh

发表于 : 2007-06-11 2:07
janker2lonely
BigSnake.NET 写了:echo 'ls -al > /etc/ls.txt ' |sudo sh
这位兄弟的写法够绝的,强,谢谢。

Re:

发表于 : 2009-10-21 9:12
gzbao9999
janker2lonely 写了:
BigSnake.NET 写了:echo 'ls -al > /etc/ls.txt ' |sudo sh
这位兄弟的写法够绝的,强,谢谢。
:em06 认同下

Re: ubuntu关于文件重定向的bug

发表于 : 2009-10-22 20:46
aerofox
这不是 BUG。

也可以这么解决:

sudo sh -c "ls -l > /etc/ls.txt"

Re: ubuntu关于文件重定向的bug

发表于 : 2009-10-24 1:49
lululau
sudo 使得ls 进程具有root的uid
而文件是shell进程产生的

Re: ubuntu关于文件重定向的bug

发表于 : 2009-10-25 18:07
O_O_BOT
lululau 写了:sudo 使得ls 进程具有root的uid
而文件是shell进程产生的
> 由当前用户shell解析

Re: ubuntu关于文件重定向的bug

发表于 : 2009-10-30 14:32
flying_pine
跳进万年老坑