1 问题描述
开发修改线上日志文件xxx.log,该文件由tomcat实时在写入,执行:
$ sudo sed -i 's/十一月/Nov/g' xxx.log
这行脚本的目的是将日志中的“十一月”替换为“Nov”,执行结束后导致java应用没有再持续写追加任何日志。
2 What happened
2.1 sed in place edit原理
查看sed manpage:
$ man sed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied). The default operation mode is to break
symbolic and hard links. This can be changed with --follow-symlinks and --copy.
从中可以得知 sed -i 命令会破坏硬链接和软链接,可以自己测试一下:
$ cat f.txt
aaaaabbbbbb
$ stat f.txt
File: `f.txt'
Size: 12 Blocks: 8