工作中好用的命令行工具

Posted on 2022-05-30

tcpdump

工具简介

https://www.tcpdump.org/manpages/tcpdump.1.html

https://www.tcpdump.org/manpages/tcpdump.1.html

tcpdump是一款被各个linux发行版广泛预装的软件,根据使用者的定义对网络上的数据包进行截获的包分析工具。

tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

日常工作中,我们可以通过tcpdump进行网络行为的定性判断

最简使用

tcpdump -#Ann dst host 127.0.0.1 and dst port 80
#^命令   ^参数  ^过滤表达式#采集目的ip为127.0.0.1且目的端口是80的网络报文

命令主要分为三部分:命令、参数、过滤表达式

上述示例表达式可分为两个and关联的子表达式。表达式的模式为 【过滤方向】【过滤类型】【过滤值】

【过滤方向】可分为

  1. src 源
  2. dst 目的

【过滤类型】常用有:

  1. host 即网络报文中的主机地址【ip】
  2. port 即tcp报文中的进程端口

【过滤值】根据上述类型可分为 ip地址和端口数字

使用案例

A服务和B服务为链路上下游关系,调用链为【A】—>【B】,调用方式为FeignRPC,A服务侧ip为10.88.21.3,B服务侧端口为8080,B服务侧反馈A服务侧传参错误,A服务侧确信传参无误。此时为了降低双方定位问题的成本,可直接在B服务侧进行网路抓包,检查JSON参数是否合法。

tcpdump -#Ann src host 10.88.21.3 and dst port 8080

jq

工具简介

https://stedolan.github.io/jq/manual/

https://stedolan.github.io/jq/manual/

jq是一个json解析的命令行工具,类似java生态中的fastjson。可以对json数据字符串进行分片、过滤、映射和转换,和sed、awk、grep等命令一样,都可以让你轻松地把玩文本。它能轻松地把你拥有的数据转换成你期望的格式,而且需要写的程序通常也比你期望的更加简短。

最简使用

echo '{"name":"test"}' | jq -r '.name'
#^产生json元数据           ^命令  ^JSON解析表达式#解析来自标准输入的JSON字符串,提取name字段

命令主要分为三部分:JSON数据输入通过管道传递给jq命令、jq命令、json解析表达式

JSON解析表达式中,也可以包含管道符 ,是jq内部的数据流动管道,不同的ETL表达式可以通过管道串联起来

watch

工具简介

https://linux.die.net/man/1/watch

https://linux.die.net/man/1/watch

watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行。在Linux下,watch是周期性的执行下个程序,并全屏显示执行结果。你可以拿他来监测你想要的一切命令的结果变化,比如 tail 一个 log 文件,ls 监测某个文件的大小变化等。

最简使用

watch -n1 -d 'ls -l'#每秒执行一次 ls -l 命令,观察执行结果变化

命令主要分为三部分:watch命令、watch参数、需要观察执行结果的命令字符串

-n:指定执行周期,单位秒。支持小数

-d:高亮展示差别

使用案例

现需要观察服务监听的8838端口上的server socket,在accept连接时,是不是有堆积。(连接数暴增,服务处理不过来)

watch -n1 -d 'netstat -tln | grep 8838'
  1. netstat -tln 展示当前机器上所有的 server socket
  2. 筛选8080端口的sover socket
  3. 每秒执行一次,高亮显示差异

结果:

Every 1.0s: netstat -tln | grep 8838

Mon May 30 01:31:17 2022 tcp6	   0	  0 :::8838                 :::*                    LISTEN