【问题标题】:Filter apache files using linux使用linux过滤apache文件
【发布时间】:2011-10-29 17:28:48
【问题描述】:

我正在尝试过滤一堆 apache 日志文件以排除所有具有以下内容的请求:

  • /static/ 模式(这是我要排除的 images/js 文件夹)
  • 10.xxx.xxx.xxx(其中 x 是任意数字 - 我不希望包含内部请求)
  • "GET / HTTP/1.1" 200 以外的任何回复 - 只希望成功

我有一个包含多个 .gz 文件的文件夹。有没有办法运行一个 linux 命令来进行适当的过滤并将结果保存在一个名为 apache_log.txt 的文件中?

我的 linux 知识真的很有限,所以非常感谢任何帮助!

【问题讨论】:

    标签: linux apache logging


    【解决方案1】:

    对于每个 *.gz 文件,解压缩并过滤掉不需要的静态和本地文件,并过滤想要的“GET 200”,并将其附加到结果文件中。

    for f in *.gz ; do zcat $f | grep -v '/static/' | grep -v '10\.[0-9]\+\.\.[0-9]\+\.[0-9]\+' | grep 'GET / HTTP/1.1" 200' >> apache_log.txt ; done
    

    或多行。

    for f in *.gz
    do
        zcat $f \
            | grep -v '/static/' \
            | grep -v '10\.[0-9]\+\.\.[0-9]\+\.[0-9]\+' \
            | grep 'GET / HTTP/1.1" 200' \
            >> apache_log.txt
    done
    

    【讨论】:

    • 感谢您的快速回复。对于目录中的每个文件,我都收到此错误(文件名后似乎附加了一个 .Z)zcat:access_log.2011072803.gz.Z:没有这样的文件或目录
    • 忘记了do,抱歉:尝试for f in *.gz ; do ls -l $f ; done 列出文件。
    • 这工作给了我一份清单(不完整)-rwxr-xr-x 1 chrispaynter 员工 463010049 7 月 12 日 00:01 access_log.2011071103.gz -rwxr-xr-x 1 chrispaynter 员工 502073947 8 月 12 日10:02 access_log.2011071203.gz -rwxr-xr-x 1 chrispaynter 员工 468224970 7 月 14 日 00:01 access_log.2011071303.gz -rwxr-xr-x 1 chrispaynter 员工 464609043 8 月 12 日 10:7103 access_log.zrwgr. -xr-x 1 chrispaynter 员工 483168852 7 月 16 日 00:00 access_log.2011071503.gz
    • 所以for 命令没有理由不能与zcat 命令一起使用,并神奇地将.Z 附加到文件名。
    • 我只是用 zmore 尝试了相同的命令,它起作用了。我应该提到我正在使用 Mac,不确定这是否会有所不同。我能再请求一个帮助吗?如果我只想输出请求的 IP 地址,你能告诉我要添加什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多