常用的命令行工具

3 篇文章 0 订阅
2 篇文章 0 订阅

去年,我 有一部工作是解决线上问题,我解决决问题时,最常用的工具如下

  • 接口调试工具:curl,
  • 网络诊断,抓包及模拟工具: netcat
  • 日志分析工具:tailf ,grep,vim

curl

curl命令是我团队最常用的命令了,即使我的团队成员不会命令行,与我交流时,也会用到curl命令。当前端发现接口连调出错时,我会让让他考贝一个curl命令给我,通过Chrom很容易做到
在这里插入图片描述
这样就能为我节省很多时间,而且我也能从命令行为看到发送数据的细节

curl 'https://blackhole-m.m.jd.com/getinfo' \
  -H 'authority: blackhole-m.m.jd.com' \
  -H 'sec-ch-ua: "Chromium";v="86", "\"Not\\A;Brand";v="99", "Google Chrome";v="86"' \
  -H 'dnt: 1' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36' \
  -H 'content-type: application/x-www-form-urlencoded' \
  -H 'accept: */*' \
  -H 'origin: https://www.jd.com' \
  -H 'sec-fetch-site: same-site' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://www.jd.com/' \
  -H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7' \
  --data-raw 'body={"appname":"jdwebm_hf","jdkey":"","isJdApp":false,"jmafinger":"","whwswswws":"tEG7eMOnQ4rCyITkQ  ZLCA==","businness":"pcHome","body":{"browser_info":"92ade6241ee9392161f5cd65f59041bc","client_time":1602731563383,"period":24,"shshshfpa":"04ec3bff-d97e-f85f-1215-869b5774c71c-1581219672","ecflag":"e","whwswswws":"tEG7eMOnQ4rCyITkQ  ZLCA==","jdkey":"","isJdApp":false,"jmafinger":"","cookie_pin":"wwdz540","jdu":"158121967097428985858","mba_muid":"","visitkey":"","msdk_version":"2.4.3","wid":"","lan":"zh-CN","scrh":1120,"scrah":1030,"scrw":1792,"scaw":1792,"oscpu":"","platf":"MacIntel","pros":"20030107","temp":33,"hll":false,"hlr":false,"hlo":false,"hlb":false,"color_depth":30,"pixel_ratio":2,"resolution":"1792;1120","available_resolution":"1792;1030","session_storage":1,"local_storage":1,"indexed_db":1,"open_database":1,"cpu_class":"unknown","navigator_platform":"MacIntel","regular_plugins":"Chrome%20PDF%20Plugin::Portable%20Document%20Format::application/x-google-chrome-pdf~pdf;Chrome%20PDF%20Viewer::::application/pdf~pdf;Google%E6%96%87%E6%A1%A3%E3%80%81%E8%A1%A8%E6%A0%BC%E5%8F%8A%E5%B9%BB%E7%81%AF%E7%89%87%E7%9A%84Office%E7%BC%96%E8%BE%91%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F::::application/msexcel~xlw,application/mspowerpoint~,application/msword~,application/msword-template~,application/vnd.ces-quickpoint~,application/vnd.ces-quicksheet~,application/vnd.ces-quickword~,application/vnd.ms-excel~xlw,application/vnd.ms-excel.sheet.macroEnabled.12~xlsm,application/vnd.ms-excel.sheet.macroenabled.12~xlsm,application/vnd.ms-","adblock":true,"touch_support":0,"app_code_name":"Mozilla","app_name":"Netscape","app_version":"5.0%20(Macintosh;%20Intel%20Mac%20OS%20X%2010_15_7)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/86.0.4240.75%20Safari/537.36","cookie_enabled":true,"regular_mimetypes":"::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::::;::Portable%20Document%20Format::;::Native%20Client%20Executable::;::Portable%20Native%20Client%20Executable::;::::","online":"unknown","hardwareConcurrency":16,"product":"Gecko","vendor":"Google%20Inc.","vendorSub":"unknown","devicePixelRatio":2,"updateInterval":"unknown","orientationType":"landscape-primary","doNotTrack":"1","canvas":"canvas%20winding:yes~canvas%20fp:1a251ad285c032ea0ddb9d87138195c3","webgl":"fp:7bee181203996f44e337d1de0168fa9c~extensions:ANGLE_instanced_arrays;EXT_blend_minmax;EXT_color_buffer_half_float;EXT_disjoint_timer_query;EXT_float_blend;EXT_frag_depth;EXT_shader_texture_lod;EXT_texture_compression_rgtc;EXT_texture_filter_anisotropic;WEBKIT_EXT_texture_filter_anisotropic;EXT_sRGB;OES_element_index_uint;OES_fbo_render_mipmap;OES_standard_derivatives;OES_texture_float;OES_texture_float_linear;OES_texture_half_float;OES_texture_half_float_linear;OES_vertex_array_object;WEBGL_color_buffer_float;WEBGL_compressed_texture_s3tc;WEBKIT_WEBGL_compressed_texture_s3tc;WEBGL_compressed_texture_s3tc_srgb;WEBGL_debug_renderer_info;WEBGL_debug_shaders;WEBGL_depth_texture;WEBKIT_WEBGL_depth_texture;WEBGL_draw_buffers;WEBGL_lose_context;WEBKIT_WEBGL_lose_context;WEBGL_multi_draw~aliased%20line%20width%20range:%5B1,%201%5D~aliased%20point%20size%20range:%5B1,%20255.875%5D~alpha%20bits:8~antialiasing:yes~blue%20bits:8~depth%20bits:24~green%20bits:8~max%20anisotropy:16~max%20combined%20texture%20image%20units:80~max%20cube%20map%20texture%20size:16384~max%20fragment%20uniform%20vectors:1024~max%20render%20buffer%20size:16384~max%20texture%20image%20units:16~max%20texture%20size:16384~max%20varying%20vectors:15~max%20vertex%20attribs:16~max%20vertex%20texture%20image%20units:16~max%20vertex%20uniform%20vectors:1024~max%20viewport%20dims:%5B16384,%2016384%5D~red%20bits:8~renderer:WebKit%20WebGL~shading%20language%20version:WebGL%20GLSL%20ES%201.0%20(OpenGL%20ES%20GLSL%20ES%201.0%20Chromium)~stencil%20bits:0~vendor:WebKit~version:WebGL%201.0%20(OpenGL%20ES%202.0%20Chromium)~unmasked%20vendor:Intel%20Inc.~unmasked%20renderer:Intel(R)%20UHD%20Graphics%20630~vertex%20high%20float:23(127,127)~vertex%20medium%20float:23(127,127)~vertex%20low%20float:23(127,127)~fragment%20high%20float:23(127,127)~fragment%20medium%20float:23(127,127)~fragment%20low%20float:23(127,127)~vertex%20high%20int:0(31,30)~vertex%20medium%20int:0(31,30)~vertex%20low%20int:0(31,30)~fragment%20high%20int:0(31,30)~fragment%20medium%20int:0(31,30)~fragment%20low%20int:0(31,30)","device_memory":8,"is_headless_browser":0}}' \
  --compressed

以上是我拷贝京东页面上的一个ajax调用,你可以看到请求体里的东西还有个body=XX,我个人觉得他们接口设计得很糟。

除了用chrome能生成这个命令之外,postman也能完美生这个命令:
在这里插入图片描述
我的mac天生就支持curl命令,window上或许可以试试git 提供的bash工具。总之我协助排查问题时,团队成员已默契地给我发送这个命令了,没有什么页面,没有什么截图。这个即节省了交流成本,也方便我操作(我可不想打开页面,或postman慢慢折腾)。
此外,如果用curl -i参数,可能看到更多的细节,包括反回的状态码,及头信息。

我对curl命令的信赖不止如此,有些高并发问题也没有必要通过专业工具去分析,几个命令就能发现错误了

for i in {0..10};do
	curl http://www.baidu.com &
done

上面的命令中,我用了一个循环,且curl 命令后跟了一个 & ;这样命令就并行执行了。如果你业代码写成这样的:

	i = dao.getRemain();//获取帐户余额
	if(i >reduceMoney){  //比当前余客,是否和扣款金额一致
		dao.reduce(reduceMoney)//捐款
	}

那么以上命令,很容易就能发现错误的

NetCat

尽管抓包工具有更好的,但我总觉得使用起来过于复杂。网上或许还推荐SoCat之类的。但我觉得nc实在是太好敲了,而且很简单。
如果对http报文不太熟悉,可以用它来分析http报文,如

nc -l 8080

然后浏览器中输入:
http://localhost:8080/
就能看到请求报文了。

我常用在以下地方:
1.查看请求报文:
专业抓包工具操作起来真的很费劲,而很多时候,我协助别人时(以前android端与后端接口交互常出现问题),没必要在本地启服务,打开什么软件,开一堆端口,我通常用nc 抓包,将输出重定向到一文件中,然后查看报文,在利用nc将报文转发出去。

有次处理一个线上问题,代码陈旧,无法编译更新了,我为了发现问题,为了抓包,改了机器的host文件,把接口地址指向了一台测试机,在测试机上抓包。这不值得提倡,但总有些僵尸项目要用些另类方法处理
2.查看链路是否连通:
通常配置nginx路由转发时,需要查验配置是否生效,有些运维会启动一个web,但我通常只用nc去做一个简单测试
3.其它
我曾用 tail **.log | nc -l 8082 查看远程日。网上有人用它来转输文件,聊天之类的。

或许可以用以下命令攻击服务器

 nc localhost 8080 < /dev/random

改天我会试试能否用它做内网穿透。

tailf 与grep

我常用tailf 或者 tail -f 命令动态追踪日志,虽然搭建了一个日志系统,但有些老项目或者遇到特殊情况,还是要手动的方式分析日志。tailf与grep是绝佳组合

tailf tmp.log | grep -re 'OrderService'

动态追踪所包含OrderService关键字的日志。

vim

一般别人把vim,或vi当成编辑工具,但它的查询搜索功能也很强大,不用担心用vi打开10G的文件会让你的服务器卡死,至少我没遇到过。vim是分析静态大日志的首选

最后,我要貼上一段代码,用处我就不说了:

#!/bin/bash
## 签名时用到密钥 
sign_key=******* #这个我就不给出了
data=$(cat <<EOF
{"password":"123456","userId":"sqwzp"}   ##我已离开公司了,所以……
EOF
)

base64_data=$(echo $data | base64)

sign=$(md5 -q  -s $base64_data$sign_key)

login=$(curl -XPost http://*****:8090/applogin/app/login  -F "data=${base64_data}" -F "sign=${sign}")
echo $login
token=$(echo $login | python3 -m me.json.tool --path data.token)

echo $1

if [ "$1" = "上班" ]; then
        type='signIn'
else
        type='signOut'
fi

echo $type
data='{"addrStr":"上海市青浦区华隆路","binding":"","deviceId":"862466048824080","locationDescribe":"在上海增洲实业有限公司附近","lonLatStr":"121.219789,31.226991","remark":"","siteID":"888888","type":"'$type'","userId":"sqwzp","wifiMacAddress":"02:00:00:00:00:00","wifiName":"TP-LINK_666A"}'

base64_data=$(echo $data | base64)
sign=$(md5 -q  -s $base64_data$sign_key)
echo "http://*****/sqlProject/Redirect?method=insert_signInOut&data=${base64_data}&token=${token}&sign=${sign}&flag=1"
curl  "http://****/sqlProject/Redirect?method=insert_signInOut&data=${base64_data}&token=${token}&sign=${sign}&flag=1"


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值