
linux文本处理工具的几个小实例应用
1.统计出/etc/passwd文件中其默认shell为非/s bin/nologin的用户个数,并将用户都显示出来
思路:
1.用grep取反筛选出默认shell非/sbin/nologin的用户,wc -l统计其个数
2.用awk将用户名取出即可
代码:
1 | [root@centos8 ~]#echo "/etc/passwd文件中默认shell为非/sbin/nologin的个数是$(getent passwd|grep -v "nologin$"|wc -l),分别是:"; getent passwd|grep -v "nologin$"|awk -F: '{print $1}' |
执行结果:
1 | /etc/passwd文件中默认shell为非/sbin/nologin的个数是7,分别是: |
2.查出用户UID最大值的用户名、UID及shell类型
思路:
1.用sort针对UID字段从大到小进行排序
2.排序完成后,用head取第一行
3.取出第一行后,用awk取出用户名、UID及shell类型即可
代码:
1 | [root@centos8 ~]#getent passwd | sort -t: -k3 -nr | head -1 | awk -F: '{ printf "用户名:%s UID:%s shell类型:%s\n", $1,$3,$NF}' |
执行结果:
1 | 用户名:nobody UID:65534 shell类型:/sbin/nologin |
3.统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
该问题可以有两种思路进行解决:
思路一:
1.用ss -nt得到当前连接情况
2.用awk取出远程主机的ip
3.用sort进行排序,这步的排序主要是为了整理数据;排完序后用uniq -c去重并统计个数,然后再用sort由大到小排序
代码:
1 | [root@centos8 ~]#ss -nt | awk -F"[[:space:]]+|:" 'NR!=1{print $(NF-2)}' | sort | uniq -c | sort -nr |
执行结果:
1 | 3 10.0.0.5 |
思路二:
1.用ss -nt得到当前连接情况
2.用awk取出远程主机的ip,存入awk的数组并打印输出
3.用sort进行排序
代码:
1 | [root@centos8 ~]#ss -nt | awk -F"[[:space:]]+|:" 'NR!=1{ip[$(NF-2)]++}END{ for(i in ip){print ip[i],i}}' | sort -nr |
执行结果:
1 | 3 10.0.0.5 |
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自北落师门's Blog