分段去格式化输出文本的工具。
awk -F ':' '$3>500 {print $1,$3}' /etc/passwd#以:作为分隔符分隔段,每行的第三段的值大于500 就打印出第一段和第三段的值。awk -F ':' '$3>“500” {print $1,$3}' /etc/passwd#加入引号的500就是字符串,会以字符串的方式进行处理awk -F ':|#' '{print $2}' 1.txt#本例的分隔符可以是:也可以是#,截取指定段。awk -F ':' '$1 ~ "abc"' 1.txt#过滤出第一段包含的abc的行,其中abc可以是一个正则表达式awk -F ':' '$1 ~ "^ro+"' 1.txt#过滤出第一段包含以ro开头(如ro roo rooo...)的行
#多个语句同时使用
awk -F ':' '$1 ~ "root" {print $1,$3};$3>100 {print $1,$2}' 1.txt#两个条件的内容都被过滤出,并执行了相应的打印#如果不指定分隔符,则以空白字符作为分隔符,在awk中可以用&&表示并且,用||表示或者。$0会输出整行
awk '$3<100 && $7 ~ "bash" {print $0}' 1.txt#多个条件#内置变量
awk -F ':' '{print NF,NR}' 1.txt
#NF为段数,NR为行数#数学运算
awk -F ':' '$7=$3+$4 {print $0}' 1.txt#因为$7的值被重新定义了,所以打印¥0时,并不会包含分隔符,等然也可以定义分隔符awk -F ':' -v OFS='#' '$7=$3+$4 {print $0}' 1.txt#-v定义变量,OFS也是一个内置变量,它表示输出的结果的分隔符
#计算某一段的总和
awk -F ':' '{(tot=tot+$3)};END {print tot}' 1.txt
语法:sort [-t 分隔符][-kn1,n2][-nru]
n1 -t分隔符:作用跟cut的-d一个意思 -n 使用纯数字排序 -r:反向排序 -u:去重复 使用uniq之前需要先给文件排序,否则不管用 在CentOS系统中有一个叫做netfilter的防火墙,它可以对进入或者即将离开网卡的数据包进行处理。最常见的用法就是封IP,在CentOS7系统里服务名是firewalld #iptables -nvL -t filter 在centOS7上的netfilter有5个表,分别是:filter、nat、mangle、raw、security。而我们用的比较多的是是前两个,该命令中的-t filter可以省略,默认用的是filter表。 iptables -A INPUT -p tcp --dport 80 -s 1.1.1.1 -j DROP -A表示增加规则,INPUT为filter表里的一个链,除此之外还有OUTPUT链和FORWARD链。 第一行从左到右依次显示:时间、系统运行时间、登录用户数、平均负载。 第二行:当前登录用户名以及登录地址等。 load average:第一个值表示1分钟内系统的平均负载值;第二个值表示5分钟内系统的平均负载值;第三个值表示15分钟内系统的平均负载值。值越大表示服务器压力越大。一般情况下,这个值只要不超过服务器的cpu数量就没有关系。 cat /proc/cupinfo# 查看系统cpu数量 grep -c 'processor' /proc/cpuinfo#2*n(n表示内核数),如果一个cpu有四个内核,则数值显示是7 查看有几颗物理CPU时,则需要查看关键字physcal id。 r(run):表示运行或等待CPU时间片的进程数。实际上某一时刻1个CPU只能有一个进程占用,其他进程只能排着队等着,如果该数值如果长期大于服务器cpu的个数,则说明cpu资源不够用了。 b(block):表示等待资源的进程数,这个资源指的是I/O、内存等。该数值如果长时间大于1,则需要关注下。 swpd:表示切换到交换分区中的内存数量,单位为KB free:表示当前空闲的内存数量,单位为KB buff:表示(即将写入磁盘的)缓冲大小,单位为KB cache:表示(从磁盘中读取的)缓存大小,单位为KB si:表示由交换区写入内存的数据量,单位为KB so:表示由内存写入交换区的数据量,单位为KB bi:表示从块设备读取数据的量(读磁盘),单位为KB bo:表示从块设备写入数据的量(写磁盘),单位为KB in:表示在某一时间间隔内观测到的每秒设备的中断次数。 cs:表示每秒产生的上下文切换次数。 us:显示用户下所花费CPU的时间百分比 sy:显示系统花费CPU的时间百分比 id:表示CPU处于空闲状态的时间百分比 wa:表示I/O等待所占用CPU的时间百分比 st:表示被偷走的CPU所占百分比(一般为0,不用关注) vmstat 1 5#每隔一秒输出一次状态,共输出5次 vmstat 1#每隔一秒输出一次状态,一直输出,CTRL+C终止 top -bn1|head#一次性输出所有信息 top#每隔3秒变一次,q结束 sar -n DEV#查看网卡流量 sar -n DEV -f /var/log/sa/sa03#查看某一天的网卡流量历史 sar -q#查看历史负载 yum install -y epel-release;yum install -y nload#非系统自带 free -m#(以MB为单位);-g以GB为单位 ps aux|grep -c sshd netstat -lnp netstat -an |head -n 20#只显示前20行 自定义脚本可放在/usr/local/sbin目录,方便管理 date+%Y:表示以四位数字格式打印年份 date+%y:表示以两位数字格式打印年份 date+%m:表示月份 date+%d:表示日期 date+%H:表示小时 date+%M:表示分钟 date+%S:表示秒 date+%w:表示星期,结果显示0则表示周日 date +"%Y-%m-%d %H:%M:%S"#表示当前的日期 date -d "-1 day" +%d#表示一天前的日期 date -d "-1 hour" +%H#表示一小时前 date -d "-1 min" +%M#表示一分钟前 使用到的反引号,表示把引号中的字符串当成shell命令执行,返回命令的执行结果 变量名=变量的值,使用变量时,需在变量名前加$ sh sum.sh echo "$1 $2 $0" #$0代表脚本本身 ###结果是##### 1 2 option.sh 1)if...else... 注:(())中的变量是不加$的,[]中的变量是加$的 2)和文档相关的判断 -e:判断文件或目录是否存在 -d:判断是不是目录以及是否存在 -f:判断谁不是普通文件以及是否存在 -w:判断是否有写权限 -x:判断是否可执行 3)case 1)for循环 2)while循环 1)函数 2)中断和继续 break表示退出一层循环;continue表示退出本次循环,并继续 exit表示退出整个shell脚本head -n5 /etc/passwd |sort#sort默认按照ASCII码升序输出
head -n5 /etc/passwd |sort -t: -k3 -n#以:分隔符的第三个区使用纯数字进行排序
head -n5 /etc/passwd |sort -t: -k3,5 -r#表示从第3到第5区域间的字符串排序,-r表示反向排序三、uniq去重复
sort test.txt|uniq#去重输出
sort test.txt|uniq -c#输出去重后的的结果并显示重复行数四、iptables工具
1、查看filter表的iptables规则
2、增加规则

五、Linux系统状态
1、w命令查看当前系统的负载

2、vmstat命令监控系统的状态
3、top显示进程所占的系统资源
4、sar命令监控系统状态
5、nload查看网卡流量
6、free查看内存使用状况
7、ps查看系统进程
8、netstat查看网络状况
六、shell脚本
#! /bin/bash表示该文件使用的是bash语法
#表示注释,不写也没问题,只是随着时间推移,害怕慢慢忘记所以最好有注释 1、date命令
2、变量
3、数学运算
#vim sum.sh
#! /bin/bash
a=1
b=2
sum=$[$a+$b]
echo "$a+$b=$sum"
4、和用户交互
#cat read.sh
#! /bin/bash
##Using 'read' in shell script
read -p "Please input a number:" x
read -p "Please input another number:" y
sum=$[$x+$y]
echo "The sum of the two number is: $sum"5、shell脚本预设变量
6、shell脚本中的逻辑判断
#vim if3.sh
#! /bin/bash
read -p "Please input your score:" a
if ((a<60)); then
echo "You didn't pass the exam."
elif ((a>=60)) && ((a<85)); then
echo "Good! You pass the exam."
else
echo "Very good! Your score is ver high!"
fi###&&表示并且,||表示或者
###判断数值大小除了可以使(())外,还可以使用[];当使用[]时,就不能使用>、<、=这样的符号了,需要使用-lt(小于)、-gt(大于)、-le(小于或等于)、-ge(大于或等于)、-eq(等于)、-ne(不等于)。if [-d /home/]; then echo ok; fi#vim case.sh
#! /bin/bash
read -p "Input a number: " n
a=$[$n%2]
case $a in1)echo "The number is odd.";;0)echo "The number is even.";;*)echo "It's not a number!";;
esac 7、shell脚本中的循环
###打印1到5的一个序列
#vim for.sh
#! /bin/bash
for i in `seq 1 5`;do echo $i
done#for file in `ls`; do echo $file; done
#打印当前文件夹中文件名#cat while.sh
#! /bin/bash
a=5
while [$a -ge 1]; doecho $aa=$[$a-1]
done#以下是死循环
while :; docommandsleep 3
done8、shell脚本中的函数
#vim func.sh
#! /bin/bash
function sum()
{sum=$[$1+$2]echo $sum
}#调用方式一:
sum $1 $2#调用方式二:
sh func.sh 1 2
#结果是3