为了方便点进来句走的同学,我直接把组合合命令放到这里了。

要求最多的ip前20个cat access_log.2023-08-19.log | awk '{print }' | sort | uniq -c | sort -nr | head -n 20要求最多的网址前20个cat access_log.2023-08-19.log | awk '{print }' | sort | uniq -c | sort -nr | head -n 20

用到了Linux的几个很常用的命令,但组合起来就威力强大了。

linuxphp访问日志linux中应用bash统计web拜访日记解决计划 Webpack

本日利用命令有cat、grep、|、awk、sort、wc ,下面逐一先容。

cat命令

cat 命令在 Linux 中用于查看文件的内容,它可以在终端窗口中显示文件的内容。
除了直接查看文件,cat 还可以合并文件,创建新文件,以及从标准输入设备中读取数据。

以下是 cat 命令的一些常用选项和用法:

查看文件内容:cat filename从多个文件合并内容到一个文件:cat file1 file2 > file创建新文件并写入内容:cat > filename将标准输入设备中的内容附加到文件中:cat filename - > anotherfile对输出内容进行编号:cat -n filename从文件的第 n 行开始输出:cat filename | tail -n +n

须要把稳的是,cat 命令常日与其他命令结合利用,如 grep, sort, less, head, tail 等,以实现更繁芜的操作。

grep

grep 命令在 Linux 中用于在文件中搜索指定的字符串或模式,并将匹配的行输出到终端或输出文件中。
它是一个非常强大的文本搜索工具,可以处理正则表达式,以便精确匹配繁芜的模式。

grep 命令的基本语法如下:

grep [选项] 模式 [文件...]

个中,选项可以指定不同的搜索行为,模式是要搜索的字符串或模式,文件是要搜索的文件列表。
如果省略文件列表,grep 将在标准输入中读取数据。

以下是一些 grep 命令的常用选项和 bash 示例:

1、如何在文件中查找指定字符串:

grep "search_string" filename

这将输出所有包含 "search_string" 的行。

2、怎么忽略大小写进行搜索:

grep -i "search_string" filename

这将忽略大小写,输出所有包含 "search_string"(不区分大小写)的行。

3、如何在多个文件中搜索:

grep "search_string" file1 file2 file3 ...

可以在多个文件中搜索包含 "search_string" 的行。

4、如何将搜索结果输出到文件:

grep "search_string" filename > outputfile

将搜索结果输出到名为 "outputfile" 的文件中。

5、如何仅显示匹配字符串的位置:

grep -o "search_string" filename

这将只输出包含 "search_string" 的行,并在每个匹配字符串之前显示其在行中的位置。

6、搜索时忽略指定目录:

grep -vE '/(dir1|dir2)/' filename

这将搜索文件,但忽略名为 "dir1" 和 "dir2" 的目录。

以上这只是 grep 命令的一些基本用法和示例,它还有更多的选项和功能,可以根据详细需求进行更繁芜的搜索操作。

管道符(|)

管道符(|)是 Linux 中的一个主要特性,它许可将一个命令的输出作为另一个命令的输入,从而将多个命令组合在一起,实现更繁芜的操作。

管道符的一样平常用法是 command1 | command2,个中 command1 的输出会被作为 command2 的输入。

以下是一些常见的利用管道符的 bash 示例:

利用 grep 命令在文本中查找特定字符串:

command | grep "pattern"

例如,查找文件中包含某个字符串的行:

cat file.txt | grep "pattern"利用 sort 命令对输出进行排序:

command | sort

例如,对文件中的行按字母顺序排序:

cat file.txt | sort利用 uniq 命令去除重复的行:

command | uniq

例如,去除文件中的重复行:

cat file.txt | uniq利用 wc 命令统计行数、字数和字符数:

command | wc -lcommand | wc -wcommand | wc -c

例如,统计文件中行数、单词数和字符数:

cat file.txt | wc -lcat file.txt | wc -wcat file.txt | wc -c将多个命令的输出合并到一个文件中:

command1 > filename || command2 > filename

例如,将命令的输出写入一个文件,如果文件不存在则创建新文件:

ls > file.txt || echo "File not found" > file.txt

awk的利用和示例

awk是一个强大的文本处理工具,它能够对文本文件进行搜索、提取、排序和打算等操作。
awk常日用于在文本文件中搜索匹配某个模式的行,并实行相应的操作。

awk的命令格式为awk ‘pattern + action’ filename,个中pattern是一个正则表达式,用于匹配要处理的行,action是在匹配时实行的操作,filename是要处理的文件名。

awk的常用选项包括:

-F:指定字段分隔符。
-v:定义一个变量,可以在程序中利用。
-f:从文件中加载awk程序。

awk的常用变量包括:

$0:整行文本。
$1, $2, …:第1、2、…个字段。
NF:当前行的字段数。

下面是一些利用awk命令的bash示例:

统计文件中每个单词涌现的次数:

awk '{words[$1]++} END {for (word in words) print word, words[word]}' filename提取文件中每行的第二个字段并排序:

awk '{print $2}' filename | sort提取文件中包含某个字符串的行:

awk '/pattern/' filename打算文件中每个单词的均匀长度:

awk '{words[$1]++; total += length($1)} END {for (word in words) print word, words[word], total - words[word]}' filename

head

head命令在Linux中用于查看文件的前几行或者前几千行。
常日我们利用head命令来快速查看文件的内容,以便确定是否须要进一步处理这个文件。

head命令的语法如下:

head [options] [file...]

个中,options是可选的参数,file...是要查看的文件名。

下面是一些常用的head命令的选项:

-n NUM:显示前 NUM 行,例如 head -n 10 filename 会显示文件的前10行。
-c NUM:显示前 NUM 个字节而不是行,例如 head -c 100 filename 会显示文件的前100个字节。
-q:静默模式,不显示标题信息。
-v:显示标题信息。

下面是一些利用head命令的示例:

1、查看文件的前10行:

head filename2、查看文件的前20行:

head -n 20 filename3、查看文件的前100个字节:

head -c 100 filename4、查看多个文件的前10行:

head filename1 filename25、与其他命令结合利用,例如查找某个文件的名称并查看该文件的前10行:

find . -name ".txt" | xargs head -n 10

2. 利用 `sort` 命令对输出进行排序:

sort命令在Linux中用于对文本文件进行排序。
它可以按照指定的字段或字符进行排序,并将结果输出到屏幕或写入到新文件中。

sort命令的语法如下:

sort [options] [file...]

个中,options是可选的参数,file...是要排序的文件名。

下面是一些常用的sort命令的选项:

-r:按照相反的顺序排序。
-n:按照数值进行排序而不是按照字符串。
-k:指定一个字段进行排序,例如 -k 2 表示按照第二字段进行排序。
-t:指定一个字符作为排序的字段分隔符,默认为制表符。
-o:将排序后的结果输出到指定的文件,默认为屏幕输出。

下面是一些利用sort命令的示例:

1、对文件进行默认排序:

sort filename2、对文件按照数字进行排序:

sort -n filename3、对文件按照第二字段进行排序:

sort -k 2 filename4、对文件按照自定义分隔符进行排序:

sort -t , -k 2 filename5、将排序后的结果输出到新文件:

sort filename > sorted_filename

我的tomca配置信息

protocolHeader: X-Forwarded-Proto portHeader: X-Forwarded-Port pattern: '%{X-Forwarded-For}i %l %a %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %D'

得到的日志示例

1.1.1.1 - 0.0.0.0 - [18/Aug/2023:13:01:27 +0800] "POST 1.php HTTP/1.1" 200 65 "https://www.a.com/1.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203" 51.1.1.1 - 0.0.0.0 - [18/Aug/2023:13:01:27 +0800] "POST 1.php HTTP/1.1" 200 65 "https://www.a.com/1.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203" 51.1.1.1 - 0.0.0.0 - [18/Aug/2023:13:01:27 +0800] "POST 1.php HTTP/1.1" 200 65 "https://www.a.com/1.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203" 51.1.1.1 - 0.0.0.0 - [18/Aug/2023:13:01:27 +0800] "POST 1.php HTTP/1.1" 200 65 "https://www.a.com/1.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203" 5

组合利用

要求最多的ip前20个

cat access_log.2023-08-19.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 20

要求最多的网站前20个

cat access_log.2023-08-19.log | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 20

结果涉及隐私就不贴出图片了。

下面是每个IT工程师必备的Linux命令思维导图。

往后我会持续分享大家须要的办理方案,关注博主不迷路。