
技能篇:开发必备linux命令大全-稳赚不亏(下)
6 网络数据抓取
tcpdump
- tcpdump 是一个运行在命令行下的抓包工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。tcpdump 适用于大多数的类Unix系统操作系统;tcpdump 命令格式为:
- 「表达式选项」 大体可以分成三种过滤条件,“类型”、“方向”和“协议”,这三种条件的搭配组合就构成了我们的过滤表达式
○ 「类型关键字」:主要包括host,net,port, 例如 host 210.45.114.211,指定主机 210.45.114.211,net 210.11.0.0 指明210.11.0.0是一个网络地址,port 21 指明端口号是21
○ 「传输方向的关键字」:主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.45.114.211 ,指明ip包中源地址是210.45.114.211, dst net 210.11.0.0 指明目的网络地址是210.11.0.0
○ 「协议的关键字」:主要包括 ether,ip,ip6,arp,rarp,tcp,udp等类型,及这几个的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的(更具体的请自行查看官方文档)
第一行:“tcpdump: verbose output suppressed, use -v or -vv for fullprotocol decode”;提示使用选项 -v 和 -vv,可以看到更全的输出内容
第二行“listening on eth0, link-type EN10MB (Ethernet), capture size 65535bytes”;我们监听的是通过 eth0 这个NIC设备的网络包,且它的链路层是基于以太网的,要抓的包大小限制是65535字节。包大小限制值可以通过-s选项来设置
第三行”12:40:33.569037 00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4, ethertypeIPv4 (0x0800),”12:40:33.569037 分别对应着这个包被抓到的“时”、“分”、“秒”、“微妙”。00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4 表示MAC地址 00:19:e0:b5:10:94 发送到MAC地址为 00:1a:a0:31:39:d4 的主机,ethertype IPv4 (0x0800)表示Ethernet帧的协议类型为ipv4(即代码为0x0800)
第四行”length 66: 210.45.123.249.27236 > 172.16.0.11.1111: Flags [S],seq 1624463808;length 66表示以太帧长度为66。210.45.123.249.27236 表示这个包的源IP为210.45.123.249,源端口为27236,’>’表示数据包的传输方向, 172.16.0.11.1111, 表示这个数据包的目的端ip为172.16.0.11,目标端口为1111,1111端口是我的一个web服务器监听端口。Flags是[S],表明是syn建立连接包(即三次握手的第一次握手),seq1624463808 序号为1624463808,这个其实就是TCP三次握手的第一次握手:client(210.45.123.249)发送syn请求建立连接包
第五行” win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0”win 8192 表示窗口大小为8192字节。options[mss 1460,nop,wscale 2,nop,nop,sackOK]为tcp首部可选字段mss 1460表示mss是发送端(客户端)通告的最大报文段长度,发送端将不接收超过这个长度的TCP报文段(这个值和MTU有一定关系)。nop是一个空操作选项, wscale指出发送端使用的窗口扩大因子为2, sackOK 表示发送端支持并同意使用SACK选
- tcpdump 示例
- 最后一命令的 tcp[13]&2!=0 可能有点怪,这里解析一下,标志位(URG,ACK,PSH,RST,SYN,FIN)在 tcp头部的第 13 个字节中,而 SYN 则在低第二位(xxxxxx10,十进制是2),和2进行与操作,即可判断报文是否 syn 报文
nc
- nc 命令实现任意TCP/UDP端口的侦听,nc可以作为 server 以TCP或UDP方式侦听指定端口。nc 也可以作为 client 发起TCP或UDP连接
- nc 示例
curl
- curl 是一款很强大的 http 命令行工具。它支持文件的上传和下载。命令格式:
curl [option] [url]
- curl 示例
wget
- wget 是一个下载文件的工具,对于Linux用户是必不可少的工具,因为我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。wget支持HTTP,HTTPS和FTP协议。命令格式:
wget [-options] [url]
- wget 示例
7 shell 脚本命令
shell 程序语法
- 要想写shell 脚本,则需要熟悉下 shell 程序基本语法
- 之前写的一篇文章:shell教程及脚本编写
sed
- 如果涉及到文本处理,可试试 sed,sed 采用的是流编辑模式,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据
- 之前写的一篇文章:sed教程-linux命令
awk
- awk 同样适合处理文本,且更强大;和 sed 命令类似,awk 命令也是逐行扫描文件,寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理
- 之前写的一篇文章:awk教程-linux命令
xargs
- xargs 是一个强有力的命令,在 linux 命令管道传递中,它能够捕获上一个命令的输出,然后传递给另外一个命令。xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代
- 命令格式:
command |xargs [-options] nextCommand
- xargs 示例
8 jvm 常用命令
jps
- java 版的 ps 命令,查看java进程及其相关的信息,如果想找到一个 java 进程的 pid,那可以用 jps 命令替代linux中的 ps 命令了,命令格式:
jps [-options] [hostIP]
。如果要查看其他 hostIP 机器上的jvm进程,需要在待查看机器上启动 jstatd
- jps 示例
jinfo
- jinfo 是用来查看JVM参数和动态修改部分JVM参数的命令;命令格式:
jinfo [-option] <pid>
- jinfo 示例
jstat
- jstat 命令是使用频率比较高的命令,主要用来查看JVM运行时的状态信息,包括内存状态、垃圾回收等;命令格式:
jstat [-option] pid [interval] [count]
,pid 是进程id,interval 是打印间隔时间(毫秒),count是打印次数(默认一直打印)
- jstat 示例
jstack
- jstack 是用来查看 jvm 线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用 jstack 命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack 还可以查看程序崩溃时生成的 core 文件中的 stack 信息;命令格式:
jstack [-Flm] <pid>
- jstack 示例,查看 pid = 1211 的线程栈
jmap
- jmap 是用来生成堆dump文件 或 查看堆相关的各类信息的命令,例如查看 finalize 执行队列,heap 的详细信息和使用情况;命令格式:
jmap [-option] <pid>
- jmap 示例,dump 出 pid=1211 java进程的内存堆文件
参考文章
- Linux 命令大全[4]
- 推荐一套我用起来特顺手的命令![5]
- Linux挂载命令mount用法及参数详解[6]
- Centos7之Systemd(Service文件)详解[7]
- tcpdump参数解析及使用详解(转载)[8]
- JVM监控和调优常用命令工具总结[9]
- Linux lsof命令详解[10]
- wget命令[11]
文章转载自公众号:潜行前行
