命令行的解析Linux linux常见的命令解析器

解析命令行参数的函数1.全局变量解释:
optarg: 如果选项带参数,参数保存在optarg中 。如果选项带可选参数 , 而实际无参数时,optarg为NULL 。
optind:argv数组中下一次需要处理的元素的下标,系统默认初始化此值为1. 0是没有意义的,argv[0]为程序名 , 在解析命令行参数中是没有意义的 。getopt正常解析完毕后,optind设置为argv数组中第一个不是选项的元素的下标(一般为0) 。
opterr:存储错误选项字符.
2. GNU/Linux的命令行选项有两种类型: 短选项和长选项 ,前者以 '-' 作为前导符 , 后者以 '--' 作为前导符 。-n 表示是一个不带参数的短选项 。--n 表示是一个不带参数的长选项 。现在有一个带有参数的短选项比如说 -w foo ,那么它和长选项 --foo 是等价的 。
函数声明:
函数参数:
1.argc:主函数传递过来的实参
2.argv:主函数传递过来的实参
3.optstring:一个包含选项字符的字符串 。一组短选项组成的字符串
函数调用结果
1.该函数每解析完一个选项 , 就返回该选项字符 。选项字符解析完毕后,调用getopt函数将会返回-1,然后optind设置为argv数组中第一个不是选项的元素的下标 。
2. 当调用getopt函数检测到错误时(比如说检测到的选项字符不在optstring实参中),默认情况下函数返回'?' 。为什么说是默认呢?因为如果通过optstring实参指明选项带参数,而实际命令行没有参数时,getopt返回 ':' 而不是 '?'
关于optstring,还有几点说明:
1.如果选项带参数,该选项后接冒号,比如optstring这个实参值为"a:b",指示a带参数,b没有参数;
2.如果选项带可选参数,该选项后接两个冒号,比如"a::b" , 表明a可能有参数,也可能没有;
3.如果optstring的开头字符为':' , 表明如果指明选项带参数 , 而实际命令行没有参数时,getopt返回':'而不是'?'(默认情况下返回 '?',和无法识别的参数返回一样);
4.如果optstring的开头字符为' ',表明一但遇到一个非选项参数,马上停止扫描,随后的部分当作参数来解释;
5.如果optstring的开头字符为'-',表明如果遇到无选项参数,则把它当作选项1(不是字符'1')的参数
示例:(来源于man文档)
运行示例:
函数声明:
函数参数:
longops:指向一个option结构体数组的第一个元素 。
longindex:getopt_long的最后一个参数longindex在函数返回时指向被搜索到的选项在longopts数组中的下标 。
关于option struct如下:
注意在初始化option struct时:The last element of the array has to be filled with zeros.
函数返回值:
1.如果flag这个实参为null,那么这个函数返回val的值 。这样短选项字符解析和长选项解析搭建了桥梁 。
2.如果flag这个实参不为null,那么这个函数返回0
3.选项字符解析完毕后,调用getopt_long函数将会返回-1
4.当调用getopt_long函数检测到错误时(比如说检测到的选项字符不在longops实参中),默认情况下函数返回'?'
示例:(来源于man 文档)
运行示例如下:
getopt_long_only类似于getopt_long,但是它把 '-' 开头的选项当作长选项来处理 。如果该选项与长选项不匹配,而与短选项匹配,则可以作为短选项解析 。
Linux sed 命令详解sed命令行格式:sed [options] 'command' file(s)
options常用选项:
-n或--quiet或——silent:仅显示script处理后的结果;
-e:以选项中的指定的script来处理输入的文本文件;
-f:以选项中指定的script文件来处理输入的文本文件;
-r∶sed 的动作支援的是延伸型正规表示法的语法;
【命令行的解析Linux linux常见的命令解析器】-i∶直接修改读取的档案内容,而不是由萤幕输出;
-h或--help:显示帮助;
-V或--version:显示版本信息 。
Command常用命令:
a:新增,a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行);
c:取代,c 的后面可以接字符串 , 这些字符串可以取代 n1,n2 之间的行;
d:删除,d 后面通常不接任何字符串;
i:插入,i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p:列?。?亦即将某个选择的资料印出 。通常 p 会与参数 sed -n 一起运作;
s:取代 , 可以直接进行取代的工作,通常与正规表达式搭配使用 。
实例说明:
新增操作:a命令
sed '/^bird/a\test' file将test追加到 以bird开头的行后面
删除操作:d命令
sed '/^$/d' file #删除空白行;
sed '2d' file #删除第二行;
sed '2,$d' file #删除第2行到最后一行;
sed '$d' file #删除最后一行;
sed '/^bird/'d file #删除所有开头是bird的行;
插入操作:i命令
sed -i '3i\bird ' bird.conf #在bird.conf文件第3行之前插入bird
替换文本中的字符串:s命令
sed 's/bird/birds/' file #将文本中的bird替换成birds;
sed -i 's/ bird / birds /g' file #将file文件中每一行的第一个bird替换为birds;
如何在linux中使用命令行解析json文档开始 - 运行-CMD 在命令提示符下,输入(引号里面的内容) “副教授的exe = exefile” 。然后输入: “ 。assoc命令将DLL = dllfile”输入 然后输入: “ 。assoc命令LNK = lnkfile”输入 记事本
Linux常见日志统计分析命令在上文中命令行的解析Linux,我们已经详细介绍 linux 三剑客的基本使用命令行的解析Linux,接下来我们看看具体在性能测试领域的运用,本文主要介绍的是在 Tomcat 和 Nginx access日志的统计分析 。
server.xml使用配置方式,%D-请求时间,%F-响应时间
字段说明如下:
日志样例:
使用默认 combined 的经典格式上扩展response_timeupstream_response_time
nginx.conf使用配置方式:
字段说明如下:
日志示例:
为了能理解 AWK 程序,我们下面概述其基本知识 。
模式( pattern ) 用于匹配输入中的每行文本 。对于匹配上的每行文本,awk 都执行对应的 动作( action ) 。模式和动作之间使用花括号隔开 。awk 顺序扫描每一行文本,并使用 记录分隔符(一般是换行符)将读到的每一行作为 记录,使用 域分隔符( 一般是空格符或制表符 ) 将一行文本分割为多个 域, 每个域分别可以使用 2, … 表示 。1 表示第一个域,表示第二个域,n 表示第 n 个域 。$0 表示整个记录 。模式或动作都可以不指定 , 缺省模式的情况下,将匹配所有行 。缺省动作的情况下,将执行动作 {print},即打印整个记录 。
此处使用Nginx access.log 举例,Tomcat 日志自己举一反三 。使用 awk 分解出Nginx access日志中的信息
以此类推…… 当我们使用默认的域分割符时,我们可以从日志中解析出下面不同类型的信息:
我们不难发现,仅使用默认的域分隔符,不方便解析出请求行、引用页和浏览器类型等其他信息,因为这些信息之中包含不确定个数的空格 。因此 , 我们需要把域分隔符修改为 “,就能够轻松读出这些信息 。
注意:这里为了避免 Linux Shell 误解 “ 为字符串开始,我们使用了反斜杠,转义了 “。现在,我们已经掌握了 awk 的基本知识,以及它是怎样解析日志的 。
此处使用Nginx access.log 举例,Tomcat 日志自己举一反三 。
如果我们想知道那些类型的浏览器访问过网站,并按出现的次数倒序排列,我可以使用下面的命令:
此命令行首先解析出浏览器域,然后使用管道将输出作为第一个 sort 命令的输入 。第一个 sort 命令主要是为了方便 uniq 命令统计出不同浏览器出现的次数 。最后一个 sort 命令将把之前的统计结果倒序排列并输出 。
我们可以使用下面的命令行,统计服务器返回的状态码,发现系统可能存在的问题 。
正常情况下 , 状态码 200 或 30x 应该是出现次数最多的 。40x 一般表示客户端访问问题 。50x 一般表示服务器端问题 。下面是一些常见的状态码:
HTTP 协议状态码定义可以参阅:
查找并显示所有状态码为 404 的请求
统计所有状态码为 404 的请求
现在我们假设某个请求 ( 例如 : URI: /path/to/notfound ) 产生了大量的 404 错误,我们可以通过下面的命令找到这个请求是来自于哪一个引用页,和来自于什么浏览器 。
有时候会发现其他网站出于某种原因,在他们的网站上使用保存在自己网站上的图片 。如果您想知道究竟是谁未经授权使用自己网站上的图片,我们可以使用下面的命令:
注意:使用前,将修改为自己网站的域名 。
统计共有多少个不同的 IP 访问:
统计每一个 IP 访问了多少个页面:
将每个 IP 访问的页面数进行从小到大排序:
统计 2018 年 8 月 31 日 14 时内有多少 IP 访问 :
统计访问最多的前十个 IP 地址
查看某一个 IP访问了哪些页面:
统计某个 IP 的详细访问情况,按访问频率排序
列出传输大小最大的几个文件
列出输出大于 204800 byte ( 200kb) 的页面以及对应页面发生次数
列出访问最频的页面(TOP100)
列出访问最频的页面([排除php页面】(TOP100)
列出页面访问次数超过100次的页面
列出最近1000条记录,访问量最高的页面
统计每分钟的请求数,top100的时间点(精确到分钟)
统计每小时的请求数,top100的时间点(精确到小时)
统计每秒的请求数,top100的时间点(精确到秒)
统计当天的 pv
说明:
可以使用下面的命令统计出所有响应时间超过 3 秒的日志记录 。
注意:NF 是当前记录中域的个数 。$NF 即最后一个域 。
列出php页面请求时间超过3秒的页面,并统计其出现的次数 , 显示前100条
列出相应时间超过 5 秒的请求,显示前20条
统计蜘蛛抓取次数
统计蜘蛛抓取404的次数
通过本文的介绍 , 我相信同学们一定会发现 linux三剑客强大之处 。在命令行中,它还能够接受,和执行外部的 AWK 程序文件,可以对文本信息进行非常复杂的处理 , 可以说“只有想不到的,没有它做不到的” 。
命令行的解析Linux的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于linux常见的命令解析器、命令行的解析Linux的信息别忘了在本站进行查找喔 。

    推荐阅读