针对netstat、lsof先列出几个常用组合命令,再分别列出基本参数。
netstat:显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组。
a.列出所有tcp端口
[root@c6199c8e762f /]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:35681 *:* LISTEN
tcp 0 0 localhost:mxi *:* LISTEN
tcp 0 0 *:8009 *:* LISTEN
tcp 0 0 c6199c8e762f:http 100.73.50.171:45356 TIME_WAIT
tcp 0 0 c6199c8e762f:41938 100.73.21.88:jetdirect ESTABLISHED
tcp 0 0 c6199c8e762f:56134 100.73.41.54:10911 ESTABLISHED
tcp 0 0 c6199c8e762f:36836 100.73.41.54:sd ESTABLISHED
b.列出所有UDP端口
[root@c6199c8e762f /]# netstat -au
c.显示核心路由信息
[root@c6199c8e762f /]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 100.73.49.254 0.0.0.0 UG 0 0 0 eth0
100.73.49.0 * 255.255.255.0 U 0 0 0 eth0
d.显示被占用的TCP端口及PID
[root@c6199c8e762f /]# netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:35681 0.0.0.0:* LISTEN 133849/java
tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN 133849/java
tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 133849/java
tcp 0 0 0.0.0.0:37481 0.0.0.0:* LISTEN 133849/java
tcp 0 0 100.73.49.207:8044 0.0.0.0:* LISTEN 133849/java
tcp 0 0 0.0.0.0:22222 0.0.0.0:* LISTEN 133849/java
e.查看8009端口的连接数
[root@c6199c8e762f /]# netstat -anp|grep 3306 -c
5
参数:
-a或--all 显示所有连线中的Socket。
-A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
-c或--continuous 持续列出网络状态。
-C或--cache 显示路由器配置的快取信息。
-e或--extend 显示网络其他相关信息。
-F或--fib 显示FIB。
-g或--groups 显示多重广播功能群组组员名单。
-h或--help 在线帮助。
-i或--interfaces 显示网络界面信息表单。
-l或--listening 显示监控中的服务器的Socket。
-M或--masquerade 显示伪装的网络连线。
-n或--numeric 直接使用IP地址,而不通过域名服务器。
-N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
-o或--timers 显示计时器。
-p或--programs 显示正在使用Socket的程序识别码和程序名称。
-r或--route 显示Routing Table。
-s或--statistice 显示网络工作信息统计表。
-t或--tcp 显示TCP传输协议的连线状况。
-u或--udp 显示UDP传输协议的连线状况。
-v或--verbose 显示指令执行过程。
-V或--version 显示版本信息。
-w或--raw 显示RAW传输协议的连线状况。
-x或--unix 此参数的效果和指定"-A unix"参数相同。
--ip或--inet 此参数的效果和指定"-A inet"参数相同。
lsof:是一个列出当前系统打开文件的工具
a.列出所有正在使用的文件:
[root@c6199c8e762f /]# lsof
b.找出谁在使用某个文件
[root@c6199c8e762f /]# lsof /data/logs (PS:lsof /filepath/filename)
c.递归查找某个目录中所有打开的文件
[root@c6199c8e762f //]# lsof +D /data/logs/
d.列出某个用户打开的所有文件
[root@c6199c8e762f //]# lsof -u zhengnn
e.列出除root用户外的所有用户打开的文件
[root@c6199c8e762f /]# lsof -u ^root
f.列出由某个PID进程打开的文件
[root@c6199c8e762f /]# lsof -p 133849
g.列出所有网络连接
[root@c6199c8e762f /]# lsof -i
h.列出所有TCP网络连接
[root@c6199c8e762f /]# lsof -i tcp
i.找到使用某个端口的进程
[root@c6199c8e762f /]# lsof -i:8009
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 133849 root 54u IPv4 2318257208 0t0 TCP *:8009 (LISTEN)
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
所以如传输控制协议 (TCP) 和用户数据报协议(UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。
因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
lsof 命令可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
参数:
参数说明:
-? -h #显示出lsof的帮助信息
-a #参数被视为AND,会影响全部的参数
-c c #显示出以字符或字符串c开头的命令程序开启的文件,如$lsof -c init
+d s #在文件夹s下搜寻,此参数不会继续深入搜寻此文件夹。如显示在/usr/local下被程序开启的文件:$lsof +d /usr/local +D D 同上,但是会以该文件为基础往下全部搜寻,这样花费较大的CPU时 间,请谨慎使用
-d s #此参数以file descriptor(FD)值显示结果,可以采用范围(1-3)或个别,如显示FD为4的进程:$lsof -d 4
-g [s] #以程序的PGID显示,也可以采用范围或个别表示,若没有特别指定,则显示全部,如显示PGID为6的进程:$lsof -g 6
-i #用以监听有关的任何符合的地址,若没有相关地址被指定,则监听全部
用法: lsof -i [46][protocol][@hostname|hostaddr][:serivce|port]
说明: 4 6 IPv4 或 IPv6
protocol TCP or UDP
hostname internet host name
hostaddr IPv4地址
service /etc/service中的service name
port 端口号
-l #此参数禁止将user ID 转换为登录的名称,默认是登录名称
+|-L [l] # +或-表示开启或关闭显示文件连接数,如果只有单纯的+L,后面没有任何数字,则表示显示全部,如果后面有数字,只有文件连接数少于该数字的会被列出
-n #不将IP地址转换为hostname,预设是转换的
-N #显示NFS的文件
-p s #以PID作为显示的依据
-P #此参数禁止将port number转换为service name,预设为转换
+|-r [t] #控制lsof不断重复执行,t为15秒,也就是说每隔15秒再重复执行 +r 一直执行,直到没有文件被显示 -r 永远不断的执行,直到收到中断讯号(ctrl+ c)
-R #此参数增列出PID的子程序,也就是PPID
-s #列出文件的大小,若该文件没有大小,则留下空白
-u s #列出login name或UID为的程序
-v #显示lsof的版本信息