0 标准输入
1 标准输出
2 错误输出
3 - $(ulimit -n)
command <&n 把文件描述符n作为输入
command >&n 输出重定向到文件描述符n
exec n<&- 关闭文件描述符

正则表达式 (regular expression, RE)
一种工具,所有的编程语言都支持正则
[:alnum:] 0-9 A-Z a-z
[:alpha:] A-Z a-z
[:lower:] a-z
[:upper:] A-Z
[:digit:] 0-9
grep 查询 可查看多个文件 查找每个要找的字符串
-v 取反(行) -n 显示行号
^word 以word为开头
word'空白行
. 表示一定有一个且仅有一个
\ 跳脱字符,将特殊符号的特殊意义去除
重复零个到无穷个前一个字符
[] 仅表示其中一个字符
[^ ] 取反
{ n,m } 连续n到m个的 表示数量(前一个字符)出现的次数
grep -o 只显示匹配的字符串
-n 显示在文件中的行数
-c 统计数量(行)
-B 2 前两行 -A 3 后三行
显示目标行的前后各 3 行
-C 3 前后三行
-l 只要文件名
-r 递归查找



扩展正则
egrep / grep -E
- 重复一个或以上的前一个字符
? 零个或一个前一个字符
| 或
() 群组字符 'g(la|oo)d' glad或good
()+ 一个以上的这个组里的字符
grep -E 'root|sshd' /etc/passwd
grep -e 'root' -e 'sshd' /etc/passwd
shell运行
bash 开启子进程运行
直接用路径执行文件 子进程
source或者 . 直接放到父进程进行,参数保留
默认变量
@ 所有位置变量
1 位置变量1
统计访问IP次数:
awk '{a[$1]++}END{for(v in a)print v,a[v]}' access.log
统计访问访问大于100次的IP:
awk '{a[$1]++}END{for(v ina){if(a[v]>100)print v,a[v]}}' access.log
统计访问IP次数并排序取前10:
awk '{a[$1]++}END{for(v in a)print v,a[v]|"sort -k2 -nr |head -10"}' access.log
统计时间段访问最多的IP:
awk'
4<="[02/Jan/2017:00:03:00"{a[$1]++}END{for(v in a)print v,a[v]}'access.log
统计上一分钟访问量:
date=$(date -d '-1 minute'+%d/%d/%Y:%H:%M)
awk -vdate=
4~date{c++}END{printc}' access.log
统计访问最多的10个页面:
awk '{a[$7]++}END{for(vin a)print v,a[v]|"sort -k1 -nr|head -n10"}' access.log
统计每个URL数量和返回内容总大小:
awk '{a[
7]+=$10}END{for(v ina)print a[v],v,size[v]}' access.log
统计每个IP访问状态码数量:
awk '{a[
9]++}END{for(v ina)print v,a[v]}' access.log
统计访问IP是404状态次数:
网友评论