从499状态码,到如何使用shell脚本找一个文件中特定的字符串

记录一次面试引发的一个小问题

一次面试,面试官问:你知道http状态码中499是什么吗?一脸懵逼。面试官很客气的说可以去nginx源码里面找到。面试官都这么说了,再去百度找,就太对不起自己这个准运维人员的身份了。好了话不多说,去源码找吧。

进了源码我就二脸懵逼了。

[root@localhost src]# pwd
/linux/nginx/nginx-1.12.2/src
[root@localhost src]# ls -R | wc -l
340

源码里面各种.c、.h文件小340个,难道一个一个去找?所以就想能不能开发一个小工具,自己去遍历所有文件,并且输入一个想要找的字符串,如果文件里面有就返回给我文件名,并提示我,没有结果的直接扔掉?

shell脚本工具写出来了,不是很完美,不过为了以后对单个文件的使用,不打算再把循环遍历写进去了。

脚本功能:输入一个文件,输入想查询的字符串。如果文件中有,则提示 in 文件名 found some informations about 字符串。如果不存在,可以输出 字符串not exits in 文件,这里我直接把不存在的结果仍了。

脚本内容:

[root@localhost test]# cat 2.sh 
#!/bin/bash
​
#定义退出码状态为65
E_PARAMERR=65
#定义读取的文件名
FILE_PARSE=$1
​
usage ()
{
    #显示脚本使用方法,示例:./infile.sh filename.txt letters
    echo "Usage:`basename $0` file letters" 2>&1
    #退出脚本,退出状态码为65
    exit $E_PARAMERR
}
#如果指定参数不为两个,显示相关信息,打印Usage,并退出
    if [ $# != 2 ]
    then
        echo "invaild args." 2>&1
        usage
    fi
#如果指定文件不存在,显示相关信息,打印Usage,并退出
    if [ ! -f "$1"  ]
    then
        echo "$1:No such file." 2>&1
        usage
    fi
​
#如果没有指定统计字符,显示相关信息,并退出
    if [ -z "$2" ]
    then
        echo "$2:No letters specified." 2>&1
        usage
    fi
​
var=`cat $FILE_PARSE | grep $2` 2>&1 >  /dev/null
if [ -z "$var" ]
then
    echo "$2 not exits in $1" 2>&1 > /dev/null
else
    echo "in $1. found some informations about $2"
fi

有投机取巧的成分,不过做出来也值的肯定。下来就是见证脚本可用性了。

[root@localhost src]# for i in `find ./ -type f`;do bash 2.sh $i 499;done
in ./http/ngx_http_request.h. found some informations about 499
in ./http/ngx_http_core_module.c. found some informations about 499
in ./http/ngx_http_special_response.c. found some informations about 499

终于,找到了到底是哪里再定义这些specail_response状态码了。

[root@localhost http]# cat ngx_http_special_response.c | grep 499
    ngx_null_string,                     /* 499, client has closed connection */

得到结论:499状态码是客户端主动断开链接后定义的响应状态码,再nginx的access日志中会大量出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值