sed –i修改文件报couldn't open temporary file

先说结论:sed修改文件需要在当前目录有写权限,因为sed原理是在当前目录创建一个临时文件,修改临时文件,然后用修改好的临时文件替换源文件,然后删除临时文件。

1、  在/home/test下面有文件test.xml

Home文件权限:root/root755

Test文件权限: root/root 755

Test.xml文件:  root/root 777

2、  切换到另外一个用户执行sed命令,这里test.xml里面文件内容为property=123,

执行命令sed-i "s/property/properties/g" /home/test/test.ini报错如下sed: couldn't open temporary file/home/test/sedOz9B43: Permission denied,

3、  用strace跟踪系统调用:

发现里面有一行报错信息:

open("/home/test/sedNhOOc5",O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)

O_RDWR 以可读写方式打开文件,O_CREAT若欲打开的文件不存在则自动建立该文件,O_EXCL表示的是:如果使用O_CREAT时文件存在,就返回错误信息,

600表示制定文件权限

4、  解决方案:

sed "s/property/properties/g"/home/test/test.ini > /tmp/tmpfile420

cat /tmp/tmpfile420 >/home/test/test.ini

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值