如何根据日期范围过滤日志条目?[CLI]

大家好,在本文中,我们将了解如何根据日期范围过滤日志条目。 一般可以通过cat命令查看日志文件,但是系统日志文件中的条目较多,通过cat命令很难查看。 我们可以使用 journalctl、grep、sed 和 awk 等命令过滤日期范围内的日志文件。 我们将在下面详细讨论所有这些:

根据日期范围过滤日志条目

现在让我们看看使用多种不同方法根据日期范围过滤日志条目。

1.journalctl

Journalctl 命令用于查询系统日志。 使用此命令和一些参数将按日期范围向我们显示日志文件条目。 按打开终端 Ctrl+Alt+T 并执行以下命令:

journalctl 

如果我们使用不带参数的 journalctl,它将显示从开始的所有条目。 要检查过去两天的条目,请执行以下命令:

journalctl --since "2 days ago" 

--since--until 选项用于分别指定开始和结束日期。 如果要检查特定日期范围的条目,请执行以下命令:

journalctl --since "yyyy-mm-dd hh:mm" --until "yyyy-mm-dd hh:mm" journalctl --since "2022-02-18" --until "2022-02-21 04:00" 
过滤日志文件 3

2.awk 命令

awk 是一个非常强大的命令,用于数据操作、文本检索和处理。 要按日期过滤日志条目,请执行以下命令:

sudo awk -vDate=`date -d’now-2 hours’ +[%d/%b/%Y:%H:%M:%S` ‘ { if ($4 > Date) print Date FS $4}’ /home/sid/.cache/protonvpn/logs/protonvpn.log 
过滤日志文件 4

-v 用于给变量赋值,例如如下图,Date和Date2是两个变量,表示两个日期范围。 要过滤指定日期范围的日志条目,请执行以下命令:

sudo awk -vDate=`date -d 'YYYY-MM-DD' +[%d/%b/%Y:%H:%M:%S` -vDate2='date -d 'YYYY-MM-DD' +[%d/%b/%Y:%H:%M:%S' ' { if ($4 > Date && $4 < Date2) print $0}' <file_name.log> 
sudo awk -vDate=`date -d '2022-02-17' +[%d/%b/%Y:%H:%M:%S` -vDate2='date -d'2022-02-26' +[%d/%b/%Y:%H:%M:%S' ' { if ($4 > Date && $4 < Date2) print $0}' /home/sid/.cache/protonvpn/logs/protonvpn.log 
过滤日志文件 5

3. grep 命令

grep 是一种流行且最常用的命令,用于根据模式打印线条。 -E 用于将模式解释为正则表达式。 执行以下命令按日期过滤日志条目:

sudo grep -E "pattern" <file_name.log> 
sudo grep -E "2022-02-19" protonvpn.log 
过滤日志文件 6

要过滤指定日期范围的日志条目,请执行以下命令:

sudo grep -E "pattern1 | pattern2" <file_name.log> 
sudo grep -E "2022-02-19 | 2022-02-21" protonvpn.log 
过滤日志文件 7

4.sed命令

sed 是另一个类似于 grep 命令但效率更高的命令。 它用于过滤和转换文本。 让我们看看如何使用 sed 命令过滤日志条目。 执行以下命令以获取指定日期之间的条目:

sed -n '/pattern1/,/pattern2/p' <file_name.log> 
sudo sed -n '/2022-02-19/,/2022-02-21/p' protonvpn.log 
过滤日志文件 8

要了解有关这些命令的更多信息,您可以参考官方手册页。要打开手册页,请打开终端并输入 后跟命令名称,例如,

man sed 
过滤日志文件 9

结论

因此,我们讨论了如何根据特定日期/时间或日期之间过滤日志条目。 我们讨论了许多命令,所有命令都易于使用,即使对于初学者也是如此。 我希望这个对你有用。 感谢您的阅读!