sed 原地替换和符号连接的一个小坑

💡 原文中文,约2600字,阅读约需7分钟。
📝

内容提要

本文介绍了使用 sed 命令替换符号连接时的问题及解决方法,使用 --follow-symlinks 选项可以直接替换符号连接指向的目标文件。通过使用 strace 命令追踪 sed 命令的执行过程,可以验证这一点。

🎯

关键要点

  • 使用 sed 命令替换符号连接时,可能会将符号连接变为常规文件。
  • 实验中,使用 sed -i"" 's/foo/bar/g' 对符号连接进行替换,导致 link-1 变为常规文件。
  • sed 不能同时打开文件进行读写,避免文件被清空,因此需要使用临时文件进行处理。
  • 可以使用 strace 命令验证 sed 的执行过程,发现 sed 会打开临时文件进行读-处理-写。
  • 使用 --follow-symlinks 选项可以在处理时跟随符号连接,避免改变文件性质。
➡️

继续阅读