我的服务器完全没有磁盘空间。我有一个非常大的日志文件,我需要保存日志文件的最后10000行。 我知道tune2fs有空间但是日志文件填满了相当快,我不希望空间用完,因为这可能会导致问题。
注意:最新的日志非常重要,但95%的文件都是无用的信息。我正在修复,apache日志报告的信息超出了我的需要。
我不想创建新文件然后再移回日志。我想从文件中保存最后X个日志,并删除其余日志而不先移动到新文件。
命令我使用了哪些不起作用:
cat test | tail -10000 | tee test
tail -n 10000 test | tee test
tail -n 10000 test > test
我还没有尝试sed
,这可能有用吗?
请,任何建议将不胜感激。此时我正在测试一个单独的文档文件,因为我现在意外删除了所有日志。到目前为止所有命令都失败了。 谢谢你的帮助
附加说明:现在这完全是假设,因为我使用上述命令之一意外破坏了我的文件。
答案 0 :(得分:1)
您可以使用dd
快退来覆盖文件
搜索指针返回到输出文件的开头。例如
保持/ tmp / a的最后5行:
$ len=$(tail -5 /tmp/a | wc -c)
$ tail -5 /tmp/a | dd conv=notrunc of=/tmp/a
$ truncate -s $len /tmp/a
以下是一个示例测试:
$ cat /var/log/messages >/tmp/a
$ wc -l /tmp/a
13160 /tmp/a
$ head -1 /tmp/a
Sep 2 03:34:11 pure-ftpd: [INFO] Timeout (no operation for 1800 seconds)
$ len=$(tail -5 /tmp/a | wc -c)
$ tail -5 /tmp/a | dd conv=notrunc of=/tmp/a ; truncate -s $len /tmp/a
$ wc -l /tmp/a
5 /tmp/a
$ cat /tmp/a
Sep 9 17:05:02 systemd: Started Session 7209 of user meuh.
Sep 9 17:10:01 systemd: Starting Session 7210 of user meuh.
Sep 9 17:10:01 systemd: Started Session 7210 of user meuh.
Sep 9 17:15:01 systemd: Starting Session 7211 of user meuh.
Sep 9 17:15:01 systemd: Started Session 7211 of user meuh.
答案 1 :(得分:0)
只需使用
using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceProcess;
namespace NetworkAuthIssue
{
class Program
{
static void Main(string[] args)
{
string result;
try
{
using (new Impersonation.Network.SoddingNetworkAuth("Invalid User", "localhost", "InvalidPassword"))
{
var serviceController = new ServiceController("Power", "localhost");
if (serviceController.Status == ServiceControllerStatus.Running)
{
result = "Authenticated, service running";
}
else
{
result = "Authenticated, service not running";
}
}
}
catch (Exception e)
{
result = "Authentication Failed";
}
Console.WriteLine(result);
Console.Read();
}
}
}
这将打印10k最后一行FILENAME。 您可以将最后一行保存到另一个文件,然后通过键入
删除原始的大型FILENAME文件[]() -> Type { }
or
[]() -> QString { }
答案 2 :(得分:0)
如果您的系统使用systemd,则使用journalctl
命令过滤掉您需要的消息。
一些例子:
仅显示来自httpd守护程序的日志消息:
journalctl -u httpd.service
仅显示来自httpd守护程序的日志消息以获取给定时间范围:
journalctl -u httpd.service --since today
journalctl --since="2015-09-21 09:00:00" --until="2015-09-22 13:59:59"
显示最后100个对数行(对于所有/ httpd /给定的pid):
journalctl -n 100
journalctl -u httpd.service -n 100
journalctl _PID=2100 -n 100
您可以通过附加> log.txt
将所有命令的输出保存到文件log.txt中。 journalctl -u httpd.service --since today > log.txt
在某些发行版中,如果日记未被保留或您的用户不在sudo
组中,则可能需要在命令前添加systemd-journal
。