Linux之三剑客
LINUX之三剑客
本篇主要介绍linux下常用的增删改查工具:
- grep
- sed
- awk
grep是linux下一个强大的搜索工具,几乎操作linux的用户每天都会或多或少的用到grep命令,单一个功能再强大,也存在短板,grep最明显的短板就是不能对已知结果进行更改,因此sed和awk工具就弥补了grep的短板,有人习惯称grep,sed和awk并称为linux下三剑客,是体现了三个工具一个计算机工作者不可缺少的必备技能之一
♣grep的语法:
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
grep参数使用:
因参数过多,个人将列举部分常用的参数
[root@aly-centos7 /]# ps -ef | grep nginx
root : pts/ :: grep --color=auto nginx
[root@aly-centos7 /]# ps -ef | grep -c nginx
1:查找指定进程和个数
文件内容:
[root@aly-centos7 /]# cat passwd1
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-bus-proxy:x:::systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#cat passwd3
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
过滤结果:
[root@aly-centos7 /]# cat passwd1 | grep -f passwd2 | grep -f passwd3
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#
最后结果显示三个文件相同的部分
查看多个文件相同的部分
[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# cat passwd3
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root,root
root123
[root@aly-centos7 /]# grep -n "root" passwd2
:root:x:::root:/root:/bin/bash
:operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# grep -n "root" passwd2 passwd3
passwd2::root:x:::root:/root:/bin/bash
passwd2::operator:x:::operator:/root:/sbin/nologin
passwd3::root:x:::root:/root:/bin/bash
passwd3::operator:x:::operator:/root:/sbin/nologin
passwd3::root,root
passwd3::root123
[root@aly-centos7 /]#
从单个和多个文件查找指定内容并显示行号
[root@aly-centos7 /]# grep "^r" passwd3 #查找指定字符开头
root:x:::root:/root:/bin/bash
root,root
root123
[root@aly-centos7 /]# grep "^[^r]" passwd3 #查找非指定字符开头
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# grep "n$" passwd3 #查找指定结尾
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#
指定字符查找开头,非开头,结尾的内容
[root@aly-centos7 /]#cat qq.log | grep -c "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
过滤指定日志里面的ip个数
[root@aly-centos7 /]# grep -r -n "root" /etc/
/etc/logrotate.d/ppp:: create root root
/etc/logrotate.d/mysql::# In case the root user has a password, then you
/etc/logrotate.d/mysql::# have to create a /root/.my.cnf configuration file
/etc/logrotate.d/mysql::# user= root
/etc/logrotate.d/mysql::# ATTENTION: The /root/.my.cnf file should be readable
/etc/logrotate.d/mysql::# _ONLY_ by root !
/etc/logrotate.d/mysql-mmm:: create root adm
/etc/logrotate.d/wpa_supplicant:: create root root
/etc/logrotate.d/yum:: create root root
/etc/rsyncd.conf::# use chroot = yes
/etc/statetab::# See $STATE_LABEL in /etc/sysconfig/readonly-root
/etc/statetab::# /root
/etc/group::root:x::
/etc/group::dockerroot:x::
/etc/passwd-::root:x:::root:/root:/bin/bash
/etc/passwd-::operator:x:::operator:/root:/sbin/nologin
Binary file /etc/aliases.db matches
/etc/mime.types::application/vnd.cyan.dean.root+xml
/etc/mime.types::application/vnd.dvb.notif-aggregate-root+xml
过滤指定路径下所以文件里面包含指定字符内容
grep用于常规的查询操作固然方便,但是最大的弊端就是查出来不能增删改,导致如果是写一些脚本就会很不方便,这个时候就需要sed和awk这样的工具来实现。
♣sed的使用:
因参数过多,个人将列举部分常用的参数
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g
sed的工作流程:
1:sed默认不编辑原文件,而是逐行操作,复制一份到指定内存(pattern space,模式空间)
2:pattern space内进行模式匹配,即和指定条件做匹配
不满足模式:输出到标准输出STDOUT
满足模式:进行指定的模式操作,再输出到STDOUT
3:第二个特殊的内存空间 :保持空间(hold space),临时保存操作在另一处内存
4:当执行pattern space和 hold space相关选项时候会进行之间的数据流编辑操作
5:最后根据操作执行hold space空间操作,选择性显示到STDOUT
查询:
[root@aly-centos7 /]# sed -n '1,5{/^root/p}' passwd2
root:x:::root:/root:/bin/bash
[root@aly-centos7 /]#
指定行区间查找以root开头的内容
[root@aly-centos7 /]# cat passwd3
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root,root
root123
[root@aly-centos7 /]# sed -n '/3/,$p' passwd3 #显示第一次匹配到的3到最行一行输出
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root,root
root123
[root@aly-centos7 /]# sed -n '/3/,+1p' passwd3#显示第一次匹配到的3到向下1行输出
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root123
[root@aly-centos7 /]#
匹配行之后增加显示内容
[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# sed '1!G;h;$!d' passwd2 #逆向排序
operator:x:::operator:/root:/sbin/nologin
mail:x:::mail:/var/spool/mail:/sbin/nologin
halt:x:::halt:/sbin:/sbin/halt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
sync:x:::sync:/sbin:/bin/sync
lp:x:::lp:/var/spool/lpd:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
bin:x:::bin:/bin:/sbin/nologin
root:x:::root:/root:/bin/bash
[root@aly-centos7 /]#
文本逆向排序输出
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#
[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# sed '=' passwd2 #不屏蔽空行 root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x:::daemon:/sbin:/sbin/nologin adm:x:::adm:/var/adm:/sbin/nologin lp:x:::lp:/var/spool/lpd:/sbin/nologin sync:x:::sync:/sbin:/bin/sync shutdown:x:::shutdown:/sbin:/sbin/shutdown halt:x:::halt:/sbin:/sbin/halt mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# sed '/./=' passwd2 #屏蔽空行 root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x:::daemon:/sbin:/sbin/nologin adm:x:::adm:/var/adm:/sbin/nologin lp:x:::lp:/var/spool/lpd:/sbin/nologin sync:x:::sync:/sbin:/bin/sync shutdown:x:::shutdown:/sbin:/sbin/shutdown halt:x:::halt:/sbin:/sbin/halt mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin
显示行号(空行也显示)或(空行不显示行号)
[root@aly-centos7 /]# grep -n "" passwd3
:root:x:::root:/root:/bin/bash
:bin:x:::bin:/bin:/sbin/nologin
:daemon:x:::daemon:/sbin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:operator:x:::operator:/root:/sbin/nologin
:root,root
:root123
[root@aly-centos7 /]# sed -n '$=' passwd3 [root@aly-centos7 /]#
显示文件总行数
[root@aly-centos7 /]# grep -n "" passwd3
:root:x:::root:/root:/bin/bash
:bin:x:::bin:/bin:/sbin/nologin
:daemon:x:::daemon:/sbin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:operator:x:::operator:/root:/sbin/nologin
:root,root
:root123
[root@aly-centos7 /]# sed -n 'p;n' passwd3 #奇数行
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/sbin:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root123
[root@aly-centos7 /]# sed -n '1~2p' passwd3 #奇数行
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/sbin:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root123
[root@aly-centos7 /]# sed -n 'n;p' passwd3 #偶数行
bin:x:::bin:/bin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
root,root
[root@aly-centos7 /]# sed -n '2~2p' passwd3 #偶数行
bin:x:::bin:/bin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
root,root
[root@aly-centos7 /]#
显示偶数和奇数行
[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
%shutdown:x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin [root@aly-centos7 /]# sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' passwd2
hsab/nib/:toor/:toor:::x:toor
nigolon/nibs/:nib/:nib:::x:nib
nigolon/nibs/:nibs/:nomead:::x:nomead
nigolon/nibs/:mda/rav/:mda:::x:mda
nigolon/nibs/:dpl/loops/rav/:pl:::x:pl
cnys/nib/:nibs/:cnys:::x:cnys
nwodtuhs/nibs/:nibs/:nwodtuhs:::x:nwodtuhs%
tlah/nibs/:nibs/:tlah:::x:tlah$
nigolon/nibs/:liam/loops/rav/:liam:::x:liam$# nigolon/nibs/:toor/:rotarepo:::x:rotarepo [root@aly-centos7 /]#
文件中每行内容逆向显示
[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
%shutdown:x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin [root@aly-centos7 /]# sed ':a;s/\B[0-9]\{3\}\>/,&/;ta' passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
%shutdown:x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin
,,,
,,,
[root@aly-centos7 /]#
将数字按照“个十百”显示
删除:
删除1-5行内容
[root@aly-centos7 /]# grep -n "" passwd2 | sed '1,5d'
:sync:x:::sync:/sbin:/bin/sync
:%shutdown:x:::shutdown:/sbin:/sbin/shutdown
:$halt:x:::halt:/sbin:/sbin/halt
:#$mail:x:::mail:/var/spool/mail:/sbin/nologin
:
:
:operator:x:::operator:/root:/sbin/nologin
:
:
删除奇数行:
[root@aly-centos7 /]# grep -n "" passwd2 | sed '1~2d'
:bin:x:::bin:/bin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:sync:x:::sync:/sbin:/bin/sync
:$halt:x:::halt:/sbin:/sbin/halt
:
:operator:x:::operator:/root:/sbin/nologin
:
删除空行
[root@aly-centos7 /]# grep -n "" passwd2
:root:x:::root:/root:/bin/bash
:bin:x:::bin:/bin:/sbin/nologin
:daemon:x:::daemon:/sbin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:lp:x:::lp:/var/spool/lpd:/sbin/nologin
:sync:x:::sync:/sbin:/bin/sync
:%shutdown:x:::shutdown:/sbin:/sbin/shutdown
:$halt:x:::halt:/sbin:/sbin/halt
:#$mail:x:::mail:/var/spool/mail:/sbin/nologin
:
:
:operator:x:::operator:/root:/sbin/nologin
:
:
[root@aly-centos7 /]# grep "" passwd2 | sed '/^$/d'
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
%shutdown:x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin [root@aly-centos7 /]#
删除指定内容
修改:
将root全部替换成mysql
[root@aly-centos7 /]# grep -n "" passwd3
:root:x:::root:/root:/bin/bash
:bin:x:::bin:/bin:/sbin/nologin
:daemon:x:::daemon:/sbin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:operator:x:::operator:/root:/sbin/nologin
:root,root
:root123
[root@aly-centos7 /]# sed 's/root/mysql/g' passwd3
mysql:x:::mysql:/mysql:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/mysql:/sbin/nologin
mysql,mysql
mysql123
把数字1全部替换成9
[root@aly-centos7 /]# sed 's/1/9/g' passwd3
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root,root
root923
只替换行中未出现“sbin”字符的时候,将”root“替换成”nginx“
[root@aly-centos7 /]# sed '/sbin/!s/root/nginx/g' passwd3
nginx:x:::nginx:/nginx:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
nginx,nginx
nginx123
root:x:::operator:/root:/sbin/nologin
root1:x:::operator:/root:/sbin/nologin
root2:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#
指定内容进行替换
awk的使用:
在某些场景下,我们需要过滤方式希望是列来匹配,而不是sed的行来匹配,而且awk还可以嵌套for等循环去使用,拓展性强,当然awk也是最难的。
awk的常用命令选项:
- -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
- -v var=value 赋值一个用户定义变量,将外部变量传递给awk
- -f scripfile 从脚本文件中读取awk命令
- -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
awk内置变量:
- FS 保存或设置分隔符,例如FS=",";
- $N 指定分隔符的第N个字段,例如$1,$5代表第一列和第三列;
- $0 当前读入整行的文本内容;
- NF 记录当前处理行的字段个(列)数;
- NR 记录当前处理行的数量;
- FNR 保存当前处理行在原文本内的行号;
- FILENAME 当前处理的文本名;
- ENVIRON 调用shell环境变量。
查询:
[root@aly-centos7 /]# awk '{print $0}' passwd4 #$0代表整列
root x:::root:/root:/bin/bash
bin x:::bin:/bin:/sbin/nologin
daemon x:::daemon:/sbin:/sbin/nologin
adm x:::adm:/var/adm:/sbin/nologin
lp x:::lp:/var/spool/lpd:/sbin/nologin
sync x:::sync:/sbin:/bin/sync
%shutdown x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail x:::mail:/var/spool/mail:/sbin/nologin
operator x:::operator:/root:/sbin/nologin [root@aly-centos7 /]# awk '{print $1}' passwd4 #$1代表第一列
root
bin
daemon
adm
lp
sync
%shutdown
$halt:x:::halt:/sbin:/sbin/halt
operator [root@aly-centos7 /]#
列基本查询
首先要查看剩余内存是那个字段标记,然后标记的这一行用grep取出来,最后用awk把这一行的列取出来在加上一个可读性语句即可
[root@aly-centos7 /]# free | grep Mem | awk '{print"当前剩余内存:\n",$7}'
当前剩余内存: [root@aly-centos7 /]#
当前内存过滤
/var/log/secure是用于记录访问的信息,可以通过这个日志来看出来是否遭受到恶意攻击
[root@aly-centos7 /]# grep "Accepted" /var/log/secure | awk '{print $11}'
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
[root@aly-centos7 /]#
通过过滤我就知道那些ip访问了,不过访问的ip数量很多,而生产服务器访问的ip都是固定的,一般都会有一个文件记录,这样可以写一个脚本和你过滤的ip比对,那些没有登记的就可以处理掉。
访问ip过滤
[root@aly-centos7 /]# awk '{print NF}' passwd4 [root@aly-centos7 /]# cat passwd4
root x:::root:/root:/bin/bash
bin x:::bin:/bin:/sbin/nologin
daemon x:::daemon:/sbin:/sbin/nologin
adm x:::adm:/var/adm:/sbin/nologin
lp x:::lp:/var/spool/lpd:/sbin/nologin
sync x:::sync:/sbin:/bin/sync
%shutdown x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail x:::mail:/var/spool/mail:/sbin/nologin
operator x:::operator:/root:/sbin/nologin [root@aly-centos7 /]#
统计每行有多少列(NF)
[root@aly-centos7 /]# awk '{print FNR}' passwd3 passwd4 [root@aly-centos7 /]#
分别统计多个文件有多少行(NFR)
[root@aly-centos7 /]# awk -F: 'BEGIN{i=0;j=0}{if($3<=30){i++}else{j++}}END{print "<=30:"i,"\n",">=30:"j}' /etc/passwd
<=:
>=:
[root@aly-centos7 /]#
统计uid小于30的用户有多少和大于30的余户有多少(判断)
[root@aly-centos7 /]# grep --color root /etc/passwd
root:x:::root:/root:/bin/bash
operator:x:::operator:/root:/sbin/nologin
dockerroot:x:::Docker User:/var/lib/docker:/sbin/nologin
[root@aly-centos7 /]# awk -F[:/] '{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}' /etc/passwd [root@aly-centos7 /]#
统计指定字段出现的个数(while循环)
[root@aly-centos7 httpd]# tail - access_log
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
[root@aly-centos7 httpd]# awk '{ip[$1]++} END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log
172.16.163.69
[root@aly-centos7 httpd]#
统计ip出现的次数
后续将不断完善awk使用案例
Linux之三剑客的更多相关文章
- Shell之三剑客
目录 Shell之三剑客 参考 Grep Sed Awk Shell之三剑客
- linux四剑客-grep/find/sed/awk/详解-技术流ken
四剑客简介 相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手.参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望 ...
- Linux 命令之 linux 四剑客
Linux命令-- 四剑客 一:Linux命令 之 AWK 符号:^ 开头 $ 结尾 awk 是一种处理文本的语言,一个强大的文本分析命令! 1:提取文件中的每行的第二个 提取前文本中内容为 命令: ...
- Linux四剑客find/grep/awk/sed
find ./ -name "*txt" -maxdepth 1 -type f -mtime -2 -exec mv {} ./bbb.txt \; 这条命令表示找当前目录(-m ...
- Linux四剑客之awk命令
AWK详解 awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语 ...
- django之三剑客、静态文件配置、请求响应对象、数据库操作
三剑客 from django.shortcuts import render,HttpResponse,redirect HttpResponse # 返回字符串 render(response, ...
- linux 运维必备150个命令
线上查询及帮助命令(1个) man 目录操作命令(6个) ls tree pwd mkdir rmdir cd 文件操作命令(7个) touch cp mv rm ln find rename 文件查 ...
- 运维必须掌握的150个Linux命令
线上查询及帮助命令(1个)man 目录操作命令(6个)ls tree pwd mkdir rmdir cd 文件操作命令(7个)touch cp mv rm ln find rename 文件查看及处 ...
- Linux常用的200个命令总结分类
●目录操作命令(6 个) ls tree pwd mkdir rmdir cd ●文件操作命令(7 个) touch cp mv rm ln find rename ●文件查看及处理命令(21 ...
随机推荐
- mvc视图双下拉框联动
html部分的代码 <tr class="trs"> <td class="item1"><div class="ite ...
- Ipfs基础入门
Ipfs介绍 Ipfs(Inter-Planetary File System!),中文译为星际网络文件系统,是基于默克尔有向无环图(merkle dag)的全球性p2p文件系统. 是一个面向全球的, ...
- English--音标拼读
English|音标拼读 音标拼读主要内容是,如何使用音标进行单词的拼读,并且会有相应的语音现象,最关键的还是自己多加练习,多听~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识 ...
- [转]localhost、127.0.0.1和0.0.0.0和本机IP的区别
一.IP地址是什么 首先,我们要知道网络中的相互访问其实就是在进行两者间的数据传递.就如同送快递一样,快递发出只有知道你的住址信息,才能将快递送到你的手中.而在网络访问时,只有知道你在网络中的地址信息 ...
- .net web mvc 权限验证
这里分享MVC的权限验证,内容中可能存在一些,莫名其妙的方法,那些是以前封装好的,大致可以根据方法名称知道他的意思. using Game.Entity; using Game.Entity.Plat ...
- pip install报错:RuntimeError: Python version >= 3.5 required
由于pip官方的不作为,现如今python2(以及某些低版本python3)配套的pip,已经没法正常的安装pypi包了. 例如需要用到的一套PyCaffe的代码,是基于Python2的,于是用min ...
- Mysql数据库之备份还原(mysqldump,LVM快照,select备份,xtrabackup)
备份类型: 热备份:读写不受影响 温备份:仅可执行读备份 冷备份:离线备份,读写均不能执行,关机备份 物理备份和逻辑备份 物理备份:复制数据文件,速度快. 逻辑备份:将数据导出之文本文件中,必要时候, ...
- 【Tomcat】使用Eclipse绑定Tomcat 发布应用&&常见错误
创建时间:6.14 一.Eclipse绑定Tomcat 步骤1:获得服务器运行环境配置,Window/Preferences/Server/Runtime Environment 步骤2:添加服务器 ...
- 【转】Pandas学习笔记(七)plot画图
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- isaster(Comet OJ - Contest #11D题+kruskal重构树+线段树+倍增)
目录 题目链接 思路 代码 题目链接 传送门 思路 \(kruskal\)重构树\(+\)线段树\(+\)倍增 代码 #include <set> #include <map> ...