在LINUX下面有很多的非常有用的系统命令, 使用的好的话, 能够起到事半功倍的效果, 下面就列举几个常见命令的用法以及他们的应用场景。
1. netstat
netstat是一个监控网络使用的工具, 用它可以查看当前机器上面的网络连接情况,可以使用不同的参数查看, 常用的,比如-anp,输出结果如下:
$netstat -anp | grep mongo
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.166.63:43170 192.168.166.63:8086 ESTABLISHED 29644/jmiss-mongo-r
Proto: 代表使用的协议, 例如, tcp, udp, unix等;
LocalAddress: 代表本地的IP, 端口;
Foreign Address: 发起连接的源的IP, port;
State: 标识当前连接的状态;
PID/Program Name: 程序的pid, 以及程序的名字;
连接的状态是查看一个连接的重要信息, 有如下的状态:
LISTEN: 侦听来自远方的TCP端口的连接请求;
SYN-SENT: 在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认;
ESTABLISHED:代表一个打开的连接;
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2: 从远程TCP等待连接中断请求;
CLOSE-WAIT: 等待从本地用户发来的连接中断请求;
CLOSING: 等待远程TCP对连接中断的确认;
LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认;
TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED: 没有任何连接状态;
使用的场景:
- 查看某个端口的连接状况;
netstat -anp | grep xxx - 查看某个进程被那些进程调用以及他会调用哪些程序;
netstat -anp | grep pid - 查看当前 的所有TCP连接
netstat -t
- lsof
lsof (list opened files)可以列出系统打开的文件, 特别是打开某个进程打开的文件句柄, 以及某个文件句柄是由哪一个进程打开的等, 特别的使用。
- 某个进程打开的文件
lsof -p PID - 某个句柄是被那个进程打开;
lsof -d FD 某个目录下被打开的句柄(+D代表递归)
lsof +d /path其他常用的选项
-a:列出打开文件存在的进程;
-c 进程名:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程;
-u:列出UID号进程详情;
- traceroute
traceroute可以用来查看从本机到指定的IP或者域名之间的路由信息。
- 到某个IP的路由
traceroute 192.168.187.18 - 到某个域名的路由
traceroute www.baidu.com
4. tcpdump
是一个用于截取网络分组,并输出分组内容的工具。我们可以利用tcpdump抓取网络流量的数据包, 分析和排查网络问题。
网络上的流量是非常大的, 我们通常只对部分的数据包感兴趣, tcpdump提供了非常多的选项, 可以帮助我们过滤掉我们不感兴趣的数据包。
- 截获所有通过(收到和发出)指定IP的数据包
tcpdump host 192.168.166.61 - 得到两个IP之间的数据包
tcpdump host 192.168.166.61 and 192.168.166.62 - 指定源和目的主机
tcpdump src host 192.168.166.61 and dst host 192.168.166.62 port 100 - 指定网卡
tcpdump -i eth0 - 匹配某种协议
tcpdump udp -port 53 (DNS service) - 逻辑 &&, ||, !
tcpdump host 192.168.240.3 &&( tcp port 80 || tcp port 443)