Linux 三剑客练习题

三剑客练习题

1、找出/proc/meminfo文件中以s开头的行,至少用三种方式忽略大小写

# 第一种方式
[root@localhost ~]# grep -Ei '^s' /proc/meminfo 
SwapCached:            0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Shmem:              5552 kB
Slab:              33204 kB
SReclaimable:      13648 kB
SUnreclaim:        19556 kB
# 第二种方式
[root@localhost ~]# awk  '/^(s|S)/{print $0}' /proc/meminfo 
[root@localhost ~]# awk  '/^s|^S/{print $0}' /proc/meminfo 
[root@localhost ~]# awk '/^[sS]/{print $0}' /proc/meminfo 
SwapCached:            0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Shmem:              5584 kB
Slab:              33536 kB
SReclaimable:      13736 kB
SUnreclaim:        19800 kB
# 第三种方式
[root@localhost ~]# sed -nr '/^(s|^S)/p' /proc/meminfo 
SwapCached:            0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Shmem:              5584 kB
Slab:              33536 kB
SReclaimable:      13736 kB
SUnreclaim:        19800 kB

2、显示当前系统上的root,centos或者use开头的信息

[root@localhost ~]#  grep -Er '^(centos|root|user)' /

3、找出/etc/init.d/function文件下包含小括号的行

[root@localhost etc]# grep -oE '\(|\)'  /etc/init.d/functions

4、输出指定目录的基名

[root@localhost etc]# pwd | awk -F '/' '{print $NF}'

5、找出网卡信息中包含的数字

[root@localhost etc]# ip a | grep -oE '[0-9]+'

6、找出/etc/passwd下每种解析器的用户个数

[root@localhost ~]# awk -F':' '{print $NF}' /etc/passwd | sort | uniq -c |column -t
2   /bin/bash
1   /bin/sync
1   /sbin/halt
18  /sbin/nologin
1   /sbin/shutdown

7、过去网卡中的ip,用三种方式实现

# 第一种
[root@localhost ~]# ip a | grep -oE '([0-9]{1,3}\.+){3}[0-9]{1,3}'
127.0.0.1
192.168.15.100
192.168.15.255
172.16.1.100
172.16.15.255
# 第二种
# 第三种

8、搜索/目录下,所有的.html或.php文件中main函数出现的次数

# /etc目录下没有以.html或以.php结尾的文件
# 我从根查的
[root@localhost ~]# grep -Eo 'main' `find / -type f -regex ".*\.\(html\|php\)"` | wc -l
[root@localhost ~]# grep -oE 'main' `find / -name '*.html' -o -name '*.php'` | wc -l

9、过滤掉php.ini中注释的行和空行

[root@localhost etc]#  grep -vE '^\ *;|^$' /etc/php.ini

10、找出文件中至少有一个空格的行

[root@localhost ~]# grep -E '\ +' a.sh 

11、过滤文件中以#开头的行,后面至少有一个空格

[root@localhost ~]# grep -E '^#\ +' a.sh 

12、查询出/etc目录中包含多少个root

[root@localhost ~]# grep -Eor 'root' /etc/ | wc -l

13、查询出所有的qq邮箱

[root@localhost ~]# grep -Er "[0-9a-zA-Z-_\.]+@qq\.com" a.sh

14、查询系统日志中所有的error

[root@localhost /]# grep -orE 'error' /var/log/messages

15、删除某文件中以s开头的行的最后一个词

[root@localhost /]# grep -E '^s' /etc/passwd|sed -r 's/[0-9a-zA-Z]+$//g' [file]

16、删除一个文件中的所有数字

[root@localhost /]# sed -r 's/[0-9]+//g' /root/a.sh 

17、显示奇数行

[root@localhost /]# awk '{if(NR%2==1)print NR,$0}' /root/a.sh
[root@localhost /]# awk 'NR%2==1{print NR,$0}' /root/a.sh
1  asdfgdghgf aadadadad
3 asd adas sdasdas asdasdahgf
5 baaaaaaaaaaaaaaaaaaaabbbbbbbb
7  ppppp
9 das1231423434gfdgfgfdgdf
11 s1111ssss asdsgfh
13 sagdfg3356fff

18、删除passwd文件中以bin开头的行到nobody开头的行

[root@web02 ~]# sed -r '/^bin/,/^nobody/d' /etc/passwd

19、从指定行开始,每隔两行显示一次

awk -F: '{if(NR>3){num=(NR-3)%2; if(num){print $0}}}' /etc/passwd
# 没写

20、每隔5行打印一个空格

[root@localhost /]# awk -F: '{if(NR%5==0){print " "}print $0}' /root/a.sh 

21、不显示指定字符的行

[root@localhost /]# grep -Ev 'g' a.sh

22、将文件中1到5行中aaa替换成AAA

[root@localhost /]# sed -r '1,5 s/a/A/g' /root/a.sh | head -n5
 Asdfgdghgf AAdAdAdAd
  sdAsdAsdA hjhjjg
Asd AdAs sdAsdAs AsdAsdAhgf
AsdAs AsdAsdAd AdAsdAsd
bAAAAAAAAAAAAAAAAAAAAbbbbbbbb

23、显示用户id为奇数的行

[root@localhost /]# awk -F: '{if ($3%2==1) print NR,$0}' /etc/passwd
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
8 halt:x:7:0:halt:/sbin:/sbin/halt
10 operator:x:11:0:operator:/root:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18 abrt:x:173:173::/etc/abrt:/sbin/nologin
20 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
21 mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin

24、显示系统普通用户,并打印系统用户名和id

[root@localhost /]# awk -F: '{if($3>=1000){print "用户名:" $1"用户id:"$3}}' /etc/passwd 
用户名:hammer用户id:1000

25、统计nginx日志中访问量(ip唯独计算)

[root@localhost ~]# awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{arr[$1]++}END{for(i in arr){print i}}' access.log 

26、实时打印nginx的访问ip

[root@localhost ~]# grep -oE '[0-9a-zA-Z]+' /etc/php.ini | awk '{arr[$1]++}END{for(i in arr){printf "%-15s | %-5d\n", i, arr[i]}}'

27、统计php.ini中每个词的个数

[root@localhost ~]# egrep -o "[a-Z]+" php.ini | wc -l

28、统计1分钟内访问nginx次数超过10次的ip

#!/bin/bash
NGINX_LOG=/var/log/nginx/access.log
TIME=`date +%s`
DATE=`echo $TIME - 3600 | bc`
declare -A IP
while read line
do
	timestamp=`echo $line | grep -oE '[0-9]{4}.*T[0-9]{2}:[0-9]{2}:[0-9]{2}'`
	timestamp=`date -d "$timestamp" +%s`
	if (( $TIME >= $timestamp && $DATE <= $timestamp ));then
		ip=`echo $line| grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'`
		number=`echo ${IP["$ip"]} | wc -L`
		[ $number -eq 0 ] && IP["$ip"]=0
		num=${IP["$ip"]}
		IP["$ip"]=`echo "$num + 1" | bc`
	fi
done < $NGINX_LOG
for i in ${!IP[*]}
do
	if (( ${IP[$i]} >= 10 ));then
		echo $i
	fi
done

29、找出nginx访问的峰值,按每个小时计算

#!/bin/bash

NGINX_LOG=/var/log/nginx/access.log

declare -A IP 

while read line
do
	timestamp=`echo $line | grep -oE '[0-9]{4}.*T[0-9]{2}:[0-9]{2}:[0-9]{2}'`
	timestamp=`date -d "$timestamp" +%Y%m%d%H`

	number=`echo ${IP["$timestamp"]} | wc -L`
	[ $number -eq 0 ] && IP["$timestamp"]=0
	num=${IP["$timestamp"]}
	IP["$timestamp"]=`echo "$num + 1" | bc`
done < $NGINX_LOG

for i in ${!IP[*]}
do
	if (( ${IP[$i]} >= 10 ));then
		echo "$i ${IP[$i]}"
	fi
done

30、统计访问nginx前10的ip

grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' /var/log/nginx/access.log | sort | uniq -c | sort -r | head 

【如写错,请指正】

上一篇:计算机主要的技术指标


下一篇:Linux查看内核、cup及内存信息