netstat和lsof查看端口的区别
一、Netstate
netstat 命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息
netstat用来查看系统当前系统网络状态信息,包括端口,连接情况等,常用方式如下:
netstat -atunlp,各参数含义如下:
• -t : 指明显示TCP端口
• -u : 指明显示UDP端口
• -l : 仅显示监听套接字(LISTEN状态的套接字)
• -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序
• -n : 不进行DNS解析
• -a 显示所有连接的端口
二、LSOF
lsof 是 linux 下的一个非常实用的系统级的监控、诊断工具,它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合它可以用来列出被各种进程打开的文件信息,记住:linux 下 “一切皆文件”
lsof filename 显示打开指定文件的所有进程 2
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况
三、常用命令
根据端口port查进程
netstat -nap | grep port lsof -i:port
根据进程pid查端口
netstat -nap | grep pid lsof -i | grep pid
四、区别
netstat
在非root下不能识别所有的进程,而且不是自己拥有的进程信息不会展示,需要 root 账号才能显示所有信息lsof
在非root下执行lsof -i 无任何输出
两者在root下均能显示所有进程
netstat
可以显示PID、进程名,不能显示进程所属的用户
~$ sudo netstat -nlpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1144/dnsmasq tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 661/cupsd tcp6 0 0 ::1:631 :::* LISTEN 661/cupsd
lsof
可以显示进程名、PID、用户
# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME sshd 1409 root 3u IPv6 5678 TCP *:ssh (LISTEN)
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称