Linux系统与网络、磁盘参数和日志监控等命令详解一

创作人QQ:851301776, 欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点!

个人座右铭:
1.没有横空出世,只要厚积一定发。
2.你可以学历不高,你可以不上学,但你不能不学习

备注:系统命令主要是我们调试和找问题的过程中使用,本篇主要是为了自己可以知道有哪些命令,在以后使用的过程中方便查找。

前言: (1)课程重点:             Linux cpu、硬盘、内存、网络状态监控             Linux cpu、硬盘、内存、网络性能测试             Linux cpu、硬盘、内存、网络性常见性能问题的排查 (2)推荐:          Netflix 高级性能架构师 Brendan Gregg的博客: http://www.brendangregg.com 一、Linux常用命令                 主要分为针对以下几个方面:                               (1)CPU                               (2) 内存                               (3)磁盘                               (4) 网络 1.监控

Linux系统与网络、磁盘参数和日志监控等命令详解一

常用的命令:       

        (1) free         (2) ping         (3) vmstat (VirtualMeomoryStatistics,虚拟内存统计)         (4) iostat 用 于报告*处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输 ⼊/输出统计信息         (5) dstat 显示了cpu使用情况,磁盘io情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于vmstat和iostat的输⼊更加详细且较为直观。        (6) pidstat 主要用于监控全部或指定进程占⽤系统资源的情况,如CPU,内存、设备IO、任务切换、线程 等。        (7) top 命令的汇总区域显示了五个方面的系统性能信息:负载、进程状态、cpu使用率、内存使用、交换 分区。                (8) iotop LINUX进程实时监控⼯具, 界面风格类似top命令

      (9) htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。

      (10) mpstat Report processors related statistics. 报告CPU的统计信息。             (11) netstat 用 于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。             (12) ps 显示当前进程的状态             (13)strace : Trace system calls and signals。 跟踪程序执行过程中产生的系统调用及接收到的信号,帮助分析程序或命令执行中遇到的异常情况。            (14) ltrace A library call tracer 跟踪进程调⽤库函数的情况      (15) uptime 能够打印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含义分别是1分钟,5分钟,15分钟内系统的平均负荷      (16) lsof (list open files)是一个列出当前系统打开文件的工具。          (17) perf 是Linux kernel自带的系统性能优化⼯具。优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature,用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优 化程序性能。            (18) tcpdump      (19) sar      (20)blktrace 2.测试         

Linux系统与网络、磁盘参数和日志监控等命令详解一

sysbench 是一个模块化、跨平台、多线程基准测试工具,可用于以下性能测试: (1) CPU 性能 (2) 磁盘IO 性能 (3) 调度程序性能 (4) 内存分配及传输速度 (5) POSIX 线程性能 (6) 数据库性能( OLTP 基准测试) Linux CPU使⽤率主要是从以下几个维度进⾏统计: (1) %usr:普通进程在⽤户模下下执行的时间; (2) %sys:进程在内核模式下的执行时间; (3) %nice:被提⾼优先级的进程在用户模式下的执⾏时间; (4) %idle:空闲时间。 (5) %iowait:等待I/O完成的时间。 (6) %irp:处理硬中断请求花费的时间。 (7) %soft:处理软中断请求花费的时间。 (8) %steal:是衡量虚拟机CPU的指标,是指分配给本虚拟机的时间片被同一宿主机别的虚拟机占用,一 般%steal值较高时,说明宿主机的资源使用已达到瓶颈; 一般情况下,CPU大部分的时间片都是消耗在用户态和内核态上。 sys和user间的⽐例是相互影响的, %sys比例高意味着被测服务频繁的进行用户态和系统态之间的切换, 会带来一定的CPU开销,这样分配处理业务的时间⽚就会较少,造成系统性能的下降。对于IO密集型系统,无论是网络IO还是磁盘IO,一般都会产生大量的中断,从而导致%sys相对升高,其中磁盘IO密集型系 统,对磁盘的读写需要占用大量的CPU,会导致%iowait的值⼀定⽐例的升高, 所以当出现%iowait较高 时,需排查是否存在大量的不合理的日志操作,或者频繁的数据载入等情况 ; 3.优化                  

Linux系统与网络、磁盘参数和日志监控等命令详解一

二、基础命令和工具

        1.grep搜索字符

grep 命令⽤于在⽂件中执⾏关键词搜索,并显示匹配的效果。部分常⽤选项 Linux系统与网络、磁盘参数和日志监控等命令详解一 (1)在指定文件查找,查找login关键字         grep login ImUser.cpp (2)多个文件中搜索         grep login ImUser.cpp MsgConn.cpp (3)在多个文件搜索的时候,可以使⽤通配符。在以 cpp结尾的⽂件中,搜索包含login 的行         grep login *.cpp (5)递归搜索母录下所有文件, 搜索 msg_server目录下所有文件,打印出包含 login的行。         grep login -r msg_server/ (6)反向查找,查找文件中,不包含 CImUser 的行。         grep -v CImUser ImUser.cpp (7)找出文件中包含 login的行,并打印出行号         grep -n login ImUser.cpp (8)找出文件中包含 login的行,打印出行号,并显示前后3行         grep -C 3 -n login ImUser.cpp (9)找出文件中包含 login的行,打印出行号,并显示前后3行,并忽略大小写         grep -C 3 -i -n login ImUser.cpp

2.find查找⽂件

        通过文件名查找文件的所在位置,文件名查找支持模糊匹配

        格式:find [指定查找目录] [查找规则] [查找完后执行的action]

        常⽤的操作:       (1)find . -name FILE_NAME       (2)find . - i name FILE_NAME 忽略文件名称大小写       (3)find /etc -maxdepth 1 -name passwd ##查找/etc/下名称中带有passwd的文件,查找一层       (4)find /mnt -size 20K     ##查找/mnt文件大小近似20k的文件       (5)find /mnt -size +20K   ##查找/mnt文件大小大于于20k的文件       (6)find /mnt -size -20K    ##查找/mnt文件大小小于于20k的文件       (7)find /etc -maxdepth 2 -mindepth 2 -name *.conf ##查找/etc/下名称中带有*.conf的文件,且只 查找第二层       (8)find /mnt -type d        ##按type查找/mnt中目录       (9)find /mnt -type f         ##按type查找/mnt中文件       (10)find /mnt -cmin 10   ##查找/mnt中十分钟左右修改的       (11)find /mnt -cmin +10  ##查找/mnt中十分钟以上修改的       (12)find /mnt -cmin -10  ##查找/mnt中十分钟以内修改的       (13)find /mnt -ctime 10   ##查找/mnt中十天左右修改的       (14)find /mnt -ctime +10  ##查找/mnt中十天以上修改的       (15)find /mnt -ctime -10   ##查找/mnt中十天以内修改的 3、 ls显示文件         -t 可以查看最新修改的时间         -l 每显示一个条目         -h 可以结合显示文件的GB,MB等(human);         -R 递归显示         -n 显示组id和gid         练习:                 ls -lt 按最新修改的时间排序,新修改的在前面显示。                 ls -ltR 按最新修改的时间排序,新修改的在前面显示,并显示子目录的文件信息                 ls -lh 以单位显示文件大小 4 wc命令         wc命令用于计算字数。 利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、 或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。         语法:                 wc [-clw][--help][--version][文件...]         参数:                 -c或--bytes或--chars 只显示Bytes数。                 -l或--lines 只显示行数。                 11 -w或--words 只显示字数。                 --help 在线帮助。                 --version 显示版本信息。         练习:                 wc testfile # testfile⽂件的统计信息                 7 92 607 testfile # testfile⽂件的⾏数为7、单词数92、字节数607                 wc -l testfil 5 uptime机器启动时间+负载         查看机器的启动时间、登录⽤户、平均负载等情况,通常用于在线上应急或者技术攻关中,确定操作系统 重启时间。         [root@VM_0_3_centos src]# uptime         13:01:52 up 46 days, 22:03, 4 users, load average: 0.13, 0.08, 0.05         从上⾯的输出可以看到如下信息                 当前时间: 13:01:52                 系统已经运行的时间:43天22小时3分钟。                 前在线用户:4个用户, 是总连接数量,不是不同用户数量(开一个终端连接就算一个用户) 。                  系统平均负载:0.13 , 0.08, 0.05,为最近1分钟、5分钟、15分钟的系统负载情况。          系统的平均负载是指在特定的时间间隔内队列中运⾏的平均进程数。如果一个进程满足以条件,它就会位 于运行队列中。                 它没有在等待I/O操作的结果。                 它没有主动进入等待状态(也就是没有调用’wait'相关的系统API )                 没有被停止(例如:等待终止)。          如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能还算可以支持。          如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。          如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。          负载说明(现针对单核情况,不 是单核时则乘以核数 ):                 load<1:没有等待                 load==1:系统已无额外的资源跑更多的进程了                 load>1:进程都堵着等待资源         注意:                 load < 0.7时:系统很闲,要考虑多部署⼀些服务                 0.7 < load < 1时:系统状态不错                 load == 1时:系统马上要处理不多来了,赶紧找⼀下原因                 load > 5时:系统已经非常繁忙了         不同load值说明的问题                 1)1分钟 load >5,5分钟 load <3,15分钟 load <1                         短期内繁忙,中长期空闲,初步判断是一个抖动或者是拥塞前兆                 2)1分钟 load >5,5分钟 load >3,15分钟 load <1                         短期内繁忙,中期内紧张,很可能是一个拥塞的开始                 3)1分钟 load >5,5分钟 load >5,15分钟 load >5                         短中⻓期都繁忙,系统正在拥塞                 4)1分钟 load <1,5分钟Load>3,15分钟 load >5                         短期内空闲,中长期繁忙,不用紧张,系统拥塞正在好转         补充:                 查看cpu信息:cat /proc/cpuinfo                 直接获取cpu核数:grep 'model name' /proc/cpuinfo | wc -l 6 ulimit 用户资源         Linux系统对每个登录的用户都限制其最大进程数和打开的最大文件句柄数。为了提高性 能,可以根据硬件 资源的具体情况设置各个用户的最大进程数和打开的最大文件句柄数。可以用 ulimit -a 来显示当前的各种 系统对用户使用资源的限制:         [root@VM_0_3_centos ~]# ulimit -a                 core file size (blocks, -c) 0                 data seg size (kbytes, -d) unlimited                          scheduling priority (-e) 0                                  file size (blocks, -f) unlimited                           pending signals (-i) 7269                 max locked memory (kbytes, -l) 64                                  max memory size (kbytes, -m) unlimited                                   open files (-n) 100001                                   pipe size (512 bytes, -p) 8                                  POSIX message queues (bytes, -q) 819200                          real-time priority (-r) 0                                  stack size (kbytes, -s) 8192                          cpu time (seconds, -t) unlimited                          max user processes (-u) 65535                          virtual memory (kbytes, -v) unlimited                 file locks (-x) unlimited         设置用户的最大进程数:                  ulimit -u 1024         设置用户可以打开的最大文件句柄数:                  ulimit -n 65530 7 curl http         由于当前的线上服务较多地使用了RESTful风格的API,所以集成测试就需要进行HTTP调用,查看返回的 结果是否符合预期,curl命令当然是首选的测试方法。         使用方式:                 curl -i "http://www.sina.com" # 打印请求响应头信息                 curl -I "http://www.sina.com" # 仅返回http头                 curl -v "http://www.sina.com" # 打印更多的调试信息                 curl -verbose "http://www.sina.com" # 打印更多的调试信息                 curl -d 'abc=def' "http://www.sina.com" # 使用post方法提交http请求                 curl -sw '%{http_code}' "http://www.sina.com" # 打印http响应码 8 scp远程拷贝         secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。         scp命令是Linux系统中功能强的⽂件传输命令,可以实现从本地到远程,以及从远程到 本地的双向文件传输,用起来非常方便,常用来在线上定位问题时将线卜的一些文件下载到本地进行详查,或者将本地的 修改上传到服务器上。         使用方式:         sudo apt-get install openssh-server         scp liaoqingfu@122.152.222.180:/home/liaoqingfu/test.txt . //下载122.152.222.180的文件         scp mi9.aac liaoqingfu@122.152.222.180:/home/liaoqingfu/ //上传文件到122.152.222.180         scp -r liaoqingfu@122.152.222.180:/home/liaoqingfu/ test . //下载test整个目录到本地         scp -r test liaoqingfu@122.152.222.180:/home/liaoqingfu/ //上传本地test整个目录到 122.152.222.180 9 dos2unix和unix2dos         用于转换Windows和UNIX的换行符,通常在Windows系统h开发的脚本和配置,UNIX系统下都需要转 换。         使用方式:                 dos2unix test.txt                 unix2dos test.txt                    #转换整个目录                 find . -type f -exec dos2unix {} \;                 find ./ -type f此命令是显示当前目录下所有的文件 10 sed         命令格式1:sed  's/原字符串/新字符串/'   文件         命令格式2:sed  's/原字符串/新字符串/g'  文件         这两种命令格式的区别在于是否有个“g”。 没有“g”表示只替换第一个匹配到的字符串 ,有“g”表示替换所有能匹配到的字符串,“g”可以认为是“global”(全局的)的缩写,没有“全局的”结尾就不要替换全部。         sed命令是用来批量修改文本内容的,比如批量替换配置中的某个ip。         sed命令在处理时,会先读取一行,把当前处理的行存储在临时缓冲区中,处理完缓冲区中的 内容后,打印到屏幕上。然后再读入下一行,执行下一个循环。不断的重复,直到文件末尾。                简单模式          Linux系统与网络、磁盘参数和日志监控等命令详解一         一个简单的sed命令包含三个主要部分: 参数 、 范围 、 操作 。要操作的⽂件,可以直接挂在命令行的最后。 参数         -n 这个参数是 --quiet 或者 --silent 的意思。表明忽略执行过程的输出,只输出我们的结果即可。         还有另外一个参数 : -i 。 使用此参数后,所有改动将在原文件上执行。你的输出将覆盖原文件。 ⾮常危 险,⼀定要注意。 范围         2,5 表示找到文件中,2,3,4,5行的内容。         这个范围的指定很有灵性,请看以下示例(请自行替换图中的范围部分)。              5 选择第5行。2,5 选择2到5行,共4行。1~2 选择奇数行。2,5 选择2到5行,共4行。1~2 选择奇数 行。2~2 选择偶数行。         范围的选择还可以使用正则匹配。请看下面示例:                   /void/,+3 选择出现void字样的行,以及后面的三行。2\^void/,/mem/ 选择以void开头的行,和出现 mem字样行之间的数据。          为了直观,下面的命令一一对应上面的介绍,范围和操作之间是可以有空格的。          sed -n '5p' sed1.cpp                   sed -n '2,5 p' sed1.cpp                  sed -n '1~2 p' sed1.cpp         sed -n '2~2 p' sed1.cpp         sed -n '2,+3p' sed1.cpp         sed -n '2,$ p' sed1.cpp         sed -n '/void/,+3 p' sed1.cpp         sed -n '/^void/,/CLIENT_TYPE_FLAG_BOTH/p' sed1.cpp         sed -n '/^BroadcastPdu/,/CLIENT_TYPE_FLAG_BOTH/p' sed1.cpp         sed -n '/^void CImUserManager::BroadcastPdu/,/CLIENT_TYPE_FLAG_BOTH/p' sed1.cpp         操作           最常用的操作就是 p ,意思就是打印。比如,以下两个命令就是等同的:                                  cat file                 sed -n 'p' file          除了打印,还有以下操作,我们来说常用的:                          p 对匹配内容进行打印。d 对匹配内容进行删除。这个时候就要去掉 -n 参数了,想想为什么。w 将匹配内容写入到其他地方                   a , i , c 等操作虽基本但使用少,不做介绍。我们依然拿一些命令来说明:                                                   sed -n '2,5 p' sed2.cpp                 sed '2,5 d' sed2.cpp                 sed -n '2,5 w output.txt' sed2.cpp 替换模式                           以上是 sed 命令的常用匹配模式,但它还有一个强大的替换模式,意思就是查找替换其中的某些值,并输出结果。使用替换模式很少使用 -n 参数:                   Linux系统与网络、磁盘参数和日志监控等命令详解一 范围:                 这个范围和上⾯的范围语法类似。看下面的例子:  /sys/,+3 选择出现sys字样的行,以及后面的三行。/\^sys/,/mem/ 选择以sys开头的行,和出现mem字样行之间的数据。               具体命令:                                 sed -n '/void/,+3 s/void/int/g' sed2.cpp                          sed '/^void/,/CLIENT_TYPE_FLAG_BOTH/s/ImUser/User/g' sed2.cpp

 

命令:

        这里的命令是指s。也就是substitute的意思:

        查找匹配:查找部分会找到要被替换的字符串。这部分可以接受纯粹的字符串,也可以接受正则表达式。看下面的例子a 查找范围行中的字符串 a 。[a,b,c] 从范围行里查找字符串a或者b或者c。

        命令类似:

                sed 's/a/b/g' file

                sed 's/[a,b,c]/<&>/g' file         

      替换        

        是时候把找出的字符串给替换掉了。本部分的内容将替换查找匹配部分找到的内容。          

        可惜的是,这部分不能使用正则。常用的就是精确替换。比如把a替换成b。

        但也有高级功能。和java或者python的正则api类似,sed的替换同样有 Matched Pattern 的含义,同 样可以得到Group,不深究。常用的替位符,就是 & 。

        & 号,再重复一遍。当它用在替换字符串中的时候,代表的是原始的查找匹配数据。

                 [&] 表明将查找到的数据使用[]包围起来。“&” 表明将查找的数据使用””包围起来。         下面这条命令,将会把文件中的每一行,使用引号包围起来。                             sed 's/.*/"&"/' file         flag 参数                 这些参数可以单个使用,也可以使用多个,仅介绍最常用的                  g 默认只匹配行中第一次出现的内容,加上g,就可以全文替换了。常用。p 当使用了 -n 参数, p 将仅 输出匹配行内容。w 和上面的w模式类似,但是它仅仅输出有变换的行。i 这个参数比较重要,表示忽略大小写。e 表示将输出的每一行,执行一个命令。不建议使用,可以使用xargs配合完成这种功能。                  看两个命令的语法:                  sed -n 's/a/b/gipw output.txt' file                 sed 's/^/ls -la/e' file

      

         ^M 就是\r  

        更进⼀步学习: https://github.com/Black-Gold/Learn/blob/1ee76ca2a9bbbbfe04850a1ccc9b9658e1eb39de/Linux_man_cn/sed.md          11. awk                   awk 同 sed 命令类似,只不过 sed 擅长取行, awk 命令擅长取列。         原理:一般是遍历一个文件中的每一行,然后分别对文件的每一行进行处理         用法:                     awk [ 可选的命令行选项 ] 'BEGIN{ 命令 } pattern{ 命令 } END{ 命令 }' 文 件名          Linux系统与网络、磁盘参数和日志监控等命令详解一打印某几列:                  $ echo 'I love you' | awk '{print $3 $2 $1}'         youloveI               我们将字符串 I love you 通过管道传递给awk命令,相当于awk处理⼀个⽂件,该⽂件的内容就是 I love you ,默认通过空格作为分隔符(不管列之间有多少个空格都将当作⼀个空格处理) I love you 就分割成三列了。 假如分割符号为 . ,可以这样用:                  $ echo '192.168.1.1' | awk -F "." '{print $2}'         168 条件过滤:         我们知道awk的用法是这样的,那么pattern部分怎么用呢?                awk [可选的命令行选项] 'EGIN{命令 } pattern{ 命令 } END{ 命令 }' 文件名                                    1 $ cat score.txt                 2 tom 60 60 60                 3 kitty 90 95 87                 4 jack 72 84 99                 5 $ awk '$2>=90{print $0}' score.txt                 6 kitty 90 95 87                          $2>=90 表示如果当前行的第2列的值大于90则处理当前行,否则不处理。说白了pattern部分是用来从文 件中筛选出需要处理的行进行处理的,这部分是空的代表全部处理。         pattern部分可以是任何条件表达式的判断结果,例如 > , < , == , >= , <= , != 同时还可以使用 + , - , *, / 运算与条件表达式相结合的复合表达式,逻辑 && , || , ! 同样也可以使⽤进来。另外pattern部分还可以使用 /正则/ 选择需要处理的行。 判断语句:                   判断语句是写在 pattern{ 命令 } 命令中的,他具备条件过滤一样的作用,同时他也可以让输出更丰富:           1 $ awk '{if($2>=90 )print $0}' score.txt 2 kitty 90 95 87 3 $ awk '{if($2>=90 )print $1," 优秀 "; else print $1," 良好 "}' score.txt 4 tom 良好 5 kitty 优秀 6 jack 良好 7 $ awk '{if($2>=90 )print $0," 优秀 "; else print $1," 良好 "}' score.txt 8 tom 良好 9 kitty 90 95 87 优秀 10 jack 良好 这里要注意,我为了输出格式好看,做了左对齐的操作(%-8s左对齐,宽8位), printf 用 ⽤法和 c++ 类 似。 不仅可以用来定义表头,还可以做一些变量初始化的操作,例如
  1 $ awk 'BEGIN{OFMT="%.2f";print 1.2567,12E-2}' 2 1.26 0.12 这里OFMT是个内置变量,初始化数字输出格式,保留小数点后两位。 END 添加结尾符   和BEGIN用法类似 1 $ echo ok | awk '{print $1}END{print "end"}' 2 ok 3 end 数据计算 1 $ awk 'BEGIN{print "姓名 语⽂ 数学 英语 总成绩 "; \ 2 sum1=0;sum2=0;sum3=0;sumall=0} \ 3 {printf "%5s%5d%5d%5d%5d\n",$1,$2,$3,$4,$2+$3+$4;\ 4 sum1+=$2;sum2+=$3;sum3+=$4;sumall+=$2+$3+$4}\ 5 END{printf "%5s%5d%5d%5d%5d\n","总成绩 ",sum1,sum2,sum3,sumall}'\ 6 score.txt 7 姓名 语⽂ 数学 英语 总成绩 8 tom 60 60 60 180 9 kitty 90 95 87 272 10 jack 72 84 99 255 11 总成绩 222 239 246 707 因为命令太长,末尾用 \ 符号换行。         BEGIN体里输出表头,并给四个变量初始化0         pattern体里输出每一行,并累加运算         END体里输出总统计结果                 当然了,一个正常人在用linux命令的时候是不会输入那么多格式化符号来对齐的,所以新命令又来了:         column -t (鬼知道我为什么会记得这么多乱七八糟的命令。) 范例:网络状态统计                  本小节,采用awk统计netstat命令的一些网络状态,来看一下awk语言的基本要素。netstat的输出类似 于: Linux系统与网络、磁盘参数和日志监控等命令详解一    其中,第6列,标明了网络连接所处于的网络状态。我们先给出awk命令,看一下统计结果。          1 netstat -ant | 2 awk ' \ 3 BEGIN{print "State","Count" } \ 4 /^tcp/ \ 5 { rt[$6]++ } \ 6 END{ for(i in rt){print i,rt[i]} }' 7 netstat -ant | 8 awk ' \ 9 BEGIN{print "State","Count" } \ 10 /^tcp/ \ 11 { if($4=="0.0.0.0:3306" ) rt[$6]++ } \ 12 END{ for(i in rt){print i,rt[i]} }' 13 输出结果为:          1 State Count 2 LAST_ACK 1 3 LISTEN 64 4 CLOSE_WAIT 43 5 ESTABLISHED 719 6 SYN_SENT 5 7 TIME_WAIT 146 下面这张图会配合以上命令详细说明,希望你能了解awk的精髓。          Linux系统与网络、磁盘参数和日志监控等命令详解一         乍一看,好吓人的命令,但是很简单。awk和我们通常的程序不太一样,它分为四个部分。                 1、BEGIN 开头部分,可选的。用来设置一些参数,输出一些表头,定义一些变量等。上面的命令仅打印 了一行信息而已。                 2、END 结尾部分,可选的。用来计算一些汇总逻辑,或者输出这些内容。上面的命令,使用简单的for循环,输出了数组rt中的内容。                 3、Pattern 匹配部分,依然可选。用来匹配一些需要处理的行。上面的命令,只匹配tcp开头的行,其他 的不进行处理。                 4、Action 模块。主要逻辑体,按行处理,统计打印,都可以。          注意点:                 1、awk的主程序部分使用单引号‘包围,而不能是双引号                 2、awk的列开始的index是0,而不是1 更进一步学习: https://github.com/Black- Gold/Learn/blob/1ee76ca2a9bbbbfe04850a1ccc9b9658e1eb39de/Linux_man_cn/awk.md
上一篇:linux系统中删除文件的最后几行


下一篇:linux系统中sed命令删除指定行及其后的若干行