如何从服务器中提取特定日期的日志文件

时间:2020-04-27 15:44:03

标签: linux

我正在尝试从服务器获取日志文件(仅针对特定日期)。日志文件位于/ var / log / service位置。

例如:ssh centos@Server "ls -lh /var/log/service | grep 'Oct 22'"

它显示了文件名。 但我想把那个文件

1 个答案:

答案 0 :(得分:0)

短篇小说:

$ ssh centos@Server '(cd /var/log/service && find .  -newermt 2020-10-22 -a ! -newermt 2020-10-23 | tar -T - -jcf -)' | tar -C /target/directory -j -x -f -

长话:

继续阅读。

SSH远程命令调用

您使用ssh调用远程命令,

$ ssh centos@Server "ls -lh /var/log/service | grep 'Oct 22'"

在远程端centos@Server,它是连接到您的ssh守护程序的 ssh / login连接执行管道,

$ ls -lh /var/log/service | grep 'Oct 22'

远程ssh仍使用它的标准输出 centos@Server,通过ssh连接传输并输出 local ,在本地标准输出(您的终端)上。

您可能也这么说

$ ssh centos@Server "ls -lh /var/log/service" | grep 'Oct 22'

注意细微的差别:而不是执行整个管道 远程(您的原始远程命令将管道字符|嵌入其中 引号),现在您已将|取消了引号,并通过它连接了两个命令,

  1. ssh centos@Server "ls -lh /var/log/service"。这将执行ls 远程,并通过ssh连接提供其标准输出。
  2. grep 'Oct 22'在本地运行,并像以前一样过滤ssh命令的输出。仅在本地。

findtar

以交互方式登录centos@Server,并执行以下命令:

$ cd /var/log/service
$ find .  -newermt 2020-10-22 -a ! -newermt 2020-10-23

您将看到文件(和目录以及其他条目)的列表 (可能存在))。 man find会告诉您什么 -newermt选项可以做到,以及如何调整选择标准。

此条目列表可与tar一起用作输入列表

$ cd /var/log/service
$ find .  -newermt 2020-10-22 -a ! -newermt 2020-10-23 > /tmp/filelist
$ tar -T /tmp/filelist -c -j -f /tmp/archive.tar.bz2

更好的是,不使用将保留的临时文件,

$ cd /var/log/service
$ find .  -newermt 2020-10-22 -a ! -newermt 2020-10-23 | tar -T - -c -j -f /tmp/archive.tar.bz2

或者更好的是,使用子外壳不更改当前的工作方式 调用外壳的所有目录(从而增加了工作量) 安全),

$ (cd /var/log/service && find .  -newermt 2020-10-22 -a ! -newermt 2020-10-23 | tar -T - -c -j -f /tmp/archive.tar.bz2)

这条命令现在在以下位置创建文件/tmp/archive.tar.bz2: 远程系统。

作为一个变体,为了演示:可以使用另一个命令(仍然 交互式登录)以计算存档的字节数 会-在没有实际创建存档的情况下:

$ (cd /var/log/service && find .  -newermt 2020-10-22 -a ! -newermt 2020-10-23 | tar -T - -c -j -f -) | wc -c

您可以使用-f ...来写入文件,而不是使用-f -来创建文件 改为标准输出; wc -c然后计算来自 标准输入。

将所有内容放在一起

也就是说,命令

$ ssh centos@Server '(cd /var/log/service && find .  -newermt 2020-10-22 -a ! -newermt 2020-10-23 | tar -T - -jcf -)' | tar -C /target/directory -j -x -f -

远程调用我们怪异的管道,目的是编写一个 将bzip2压缩的tar存档压缩到ssh连接中 输出。在本地方面,我们使用tar解包该流/归档 从标准输入。 (在打开包装之前,您告诉tar自行移动 进入/target/directory,不要将一罐污垢倒入您的生活 房间。)