扫码阅读
手机扫码阅读
sed 原地替换文件时遇到的趣事
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-link.png)
![](/theme/default/default/images/main/icon-jing.png)
咸鱼运维杂谈
扫码关注公众号
文章摘要:sed 原地替换文件时的趣事
作者咸鱼在本文中分享了使用 sed
(stream editor)命令进行原地替换文件时遇到的一个有趣现象。他详细介绍了 sed
如何改变了软链接文件的属性,并提供了解决方案。
sed 对软链接文件操作导致属性变更
咸鱼提到,当他尝试使用 sed
命令对软链接文件 link_test.txt
进行修改时,sed
命令不仅改变了文件内容,还意外地将软链接文件转变为普通文件。这是因为 sed
命令在修改时实际上操作的是临时文件,最后通过重命名(rename)将其替换为源文件。
strace 工具分析
为了探究背后的机制,咸鱼使用了 strace
工具来跟踪 sed
命令的系统调用。结果显示,sed
创建了一个临时文件,将修改后的内容写入其中,然后将临时文件重命名为原文件名,这解释了软链接文件属性变更的原因。
解决方案
为了在修改软链接文件时保持其属性不变,并且确保源文件内容同步更新,咸鱼发现 sed
提供了一个 --follow-symlinks
选项。在使用 sed
进行替换时加上这个选项,就可以直接对源文件进行操作,而不影响软链接文件的属性。
总结
咸鱼总结了 sed
替换操作的底层逻辑,并指出如果不使用 --follow-symlinks
选项,软链接文件会变成普通文件。为了正确操作软链接文件,应该使用 --follow-symlinks
选项来指导 sed
直接对源文件进行修改。
其他主题
- 聊一聊 TLS/SSL
- Linux 中如何安全地抹去磁盘数据?
- Linux 网络发包流程
- Linux 网络收包流程
想要了解更多内容?
![](/theme/default/default/images/main/icon-link.png)
![](/theme/default/default/images/main/icon-jing.png)
咸鱼运维杂谈
扫码关注公众号
咸鱼运维杂谈的其他文章
加入社区微信群
与行业大咖零距离交流学习
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
软件研发质量管理体系建设
白皮书上线