一、awk
① 基本使用
[root@localhost ~]# cat /var/log/nginx/access.log | awk ‘substr($9,1,3)!=200‘
#查看访问日志中,过滤非200状态码的日志请求;
# substr($4,20) :表示从第四个字段里的第20个字符开始,一直到设定的分隔符 结束;
# substr($4,1,3) :表示从第四个字段里的第1个字符开始,截取3个字符结束;
# substr($4,3,6) : 表示从第四个字段里的第3个字符开始,截取6个字符结束;
[root@localhost ~]# awk -F \‘ ‘$1=="menuentry " {print i++ " : " $2}‘ /etc/grub2.cfg
0 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
1 : CentOS Linux (0-rescue-732d2ab46c8c49608f5c11b59d037204) 7 (Core)
# \‘:对单引号进行转义,表示以单引号进行分隔;
# $1=="menuentry:表示如果位置1变量的值是menuentry;
# {print i++ " : " $2}:则打印$2的值,i++表示在输出的信息开头增加序列号;
② awk查找特定时间段的日志
# 日志格式如下
10.252.201.136 - - [27/Apr/2020:00:00:01 +0800] "POST /api-stkp/callback HTTP/1.1" 200 221 "-" "Java/1.8.0_77"
# 过滤2020年4月29日的7:00到10:30的日志
$ cat access.log | awk ‘$4 >= "[29/Apr/2020:07:00:00" && $4 <= "[29/Apr/2020:10:30:35"‘ > nginx.log
③ 使用awk统计nginx日志中每个独立ip的访问次数
$ awk ‘{print $1}‘ access.log | sort | uniq -c | sort -rn
二、getopts
getopts指定参数,获取值。同样还有一个作用类似的选项getopt,可以自行百度查看其区别。
[root@localhost ~]# vim test.sh
#!/bin/bash
while getopts “:h:p:” optname;do
case “$optname” in
“h”)
host_ip=$OPTARG
;;
“p”)
host_port=$OPTARG
;;
“?” )
echo “不知道此选项”
;;
“:”)
echo “此选项没有值”
;;
“*”)
echo “错误信息”
;;
esac
done
echo "IP是${host_ip},端口是${host_port}"
[root@localhost ~]# sh test.sh -h 192.168.1.1 -p3306
IP是192.168.1.1,端口是3306
在上面的脚本中,while后面的getopts关键字是必须的,引号中的h、p是可选自定义的,对应的是命令行-h、-p等指定的选项,optname也是自定义的,只要和case语句后引用的变量名称对应即可。在case语句下,需要给哪些选项赋值,则写多少就行,一般和getopts后面指定的选项对应。
三、sed
[root@localhost ~]# nslookup www.baidu.com | sed -n -e ‘4,$p‘ | awk ‘/Address/{print $2}
#获取域名解析的ip地址
四、ss
[root@localhost ~]# ss -tan state time-wait | wc -l
#查看timewait的连接数
五、获取本机内网IP
[root@localhost ~]# ip addr | grep inet | egrep -v ‘(127.0.0.1|inet6|docker)‘ | awk ‘{print $2}‘ | tr -d "addr:" | head -n 1 | cut -d / -f1
六、显示目录各级的权限
[root@localhost ~]# namei -om /var/log/messages
f: /var/log/messages
dr-xr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root log
-rw------- root root messages
七、dig
此工具和nslookup功能一样,用于域名解析,但比nslookup要好用。
选项:
- @<服务器地址>:指定进行域名解析的域名服务器;
- -b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
- -f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
- -P:指定域名服务器所使用端口号;
- -t<类型>:指定要查询的DNS数据类型;
- -x<IP地址>:执行逆向域名查询;
- -4:使用IPv4;
- -6:使用IPv6;
[root@localhost ~]# dig www.baidu.com
#使用 /etc/resolv.conf文件指定的dns服务器去解析baidu.com的记录
[root@localhost ~]# dig www.baidu.com @114.114.114.114
#指定114.114.114.114作为dns服务器去解析baidu.com
[root@localhost ~]# dig www.baidu.com -t cname @114.114.114.114
#这里新增-t选项,只显示cname记录
八、使CPU使用率接近百分百
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
九、yum下载某个服务所需的包文件并安装
此功能用于服务器不能和外网通信,安装某个服务时需要先在能上外网的主机上下载rpm包,然后进行安装。
# 在本机未安装此服务时使用以下指令:
$ yum install --downloadonly --downloaddir=/tmp/httpd/ httpd
# 仅下载httpd服务所需的rpm包,而不安装
# --downloaddir:指定下载的rpm包存放路径
# 若本机已安装此服务,则使用reinstall选项即可
$ yum reinstall --downloadonly --downloaddir=/tmp/httpd/ httpd
# 当rpm包下载后打包到其他主机上,可以使用以下指令安装
$ yum -y localinstall /tmp/httpd/*
十、查找占用内存资源最多的前10个进程
$ ps -auxf | sort -nr -k 4 | head -10
# sort指令中的“-k”选项是以空格为间隔,要依据第几列进行排序
十一、查找占用CPU资源最多的前10个进程
$ ps -auxf | sort -nr -k 3 | head -10
十二、fgrep
$ fgrep -c "hello" test.txt #显示hello字符在test.txt文件中匹配行的数目
$ fgrep -l "hello" test.txt #显示匹配hello的文件名
十三、pkill
$ pkill -kill -t pts/1 #断掉连接当前终端的用户
十四、显示目录结构各级的权限
$ namei -om /var/log/messages
十五、获取阿里云epel源
$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
十六、查看服务器出口IP地址
$ curl ipconfig.io
十七、服务器设置临时IP、网关
$ ifconfig ens@196 192.168.207.47/24 # 设置临时IP地址,不加子网掩码,默认是32位
$ route add default gw 192.168.207.1 # 设置临时网关