sed 中的 -i 选项在哪里存储与正则表达式匹配的行?

sed 中的 -i 选项在哪里存储与正则表达式匹配的行?

我正在尝试释放服务器硬盘中的空间,因此我将日志文件中的旧日期与 sed 进行匹配,并且它正在减少,但我的根分区现在使用了 98% 的空间,而不是我调用之前使用的 91% sed。我这样做了sed -i '/^Jan/ d' file.log,我的日志文件从 6G 减少到 400M。我正在find / -size +1G尝试搜索临时文件或类似的文件,但它与新文件不匹配。 编辑:我这样做是echo -n > file.log为了避免服务崩溃,但这只是暂时的,因为问题仍然存在

答案1

sed 的选项--in-place无法真正就地编辑文件,因此它实际上相当于:

if sed ... input > /tmp/output$$ ; then
    mv /tmp/output$$ input
else
    rm /tmp/output$$
fi

这意味着在执行该mv命令之前,您可以将磁盘上输入文件的大小加倍(或更糟)。当文件系统接近满时,它们的效率就会变得非常低。

听起来更大的问题是您的磁盘空间不足,或者您将 /var/log 和 /tmp 安装在与 / 相同的分区上,并且如果 / 位于小分区上,那么您现在和下一个都会将其填满一周以及之后的一周等等。

查看mountdf /tmpdf /var/log了解您的磁盘是如何设置的。您需要:

  1. 修复磁盘安装
  2. 获取更大的磁盘
  3. 调查logrotate
  4. 停止记录这么多
  5. 或以上的某种组合

答案2

在 sed -i 上运行 strace 应该可以清楚地看出临时文件的位置。但最简单的方法是不使用 -i。将输出重定向到有空间的分区上的文件。

相关内容