![在 unix 中,减少正在写入的大量日志文件的大小的最佳方法是什么?](https://linux22.com/image/544046/%E5%9C%A8%20unix%20%E4%B8%AD%EF%BC%8C%E5%87%8F%E5%B0%91%E6%AD%A3%E5%9C%A8%E5%86%99%E5%85%A5%E7%9A%84%E5%A4%A7%E9%87%8F%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%9A%84%E5%A4%A7%E5%B0%8F%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
在 Linux 服务器上,我想减小一个几 GB 大的日志文件的大小。截掉前半部分,或者前一百万行也许可行。
答案1
这在采访中经常出现...
您是否希望在不中断进程的情况下截断文件?日志文件中的任何信息是否有价值?如果是,我通常会使用简单的 bash 字符串将文件“清零”。
: > /var/log/badlogfile
这种情况发生在您可能拥有无法以受控方式重新启动的应用程序的情况下。假设它是一个金融交易应用程序,并且该程序在交易日期间无法停止或重新启动。但是,由于应用程序错误,日志文件以某种惊人的速度增长。使用上面或下面的方法截断日志文件可以保持系统运行。
另请参阅:http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/
答案2
你可以把它放在logrotate中,这样它就不会那么容易失控了
答案3
如果正在主动写入,您实际上无法通过截断来做很多事情。您唯一的选择是清空文件(您可以先将其复制到其他地方。)
echo "" >/var/log/fileYouWantToEmpty
这样,文件最终会变成空,但仍然是相同的文件/inode,因此不会破坏正在记录的程序。
答案4
您也可以尝试 cat /dev/null > /var/log/。但是,我必须警告您,/dev/null 在某些旧版本中未实现...