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
2
3
4
5
6
7
/etc/passwd文件中默认shell为非/sbin/nologin的个数是7,分别是:
root
sync
shutdown
halt
named
python

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
2
3
3 10.0.0.5
2 10.0.0.2
1 10.0.0.3

思路二:
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
2
3
3 10.0.0.5
2 10.0.0.2
1 10.0.0.3