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:打开文件的确切名称

 

posted @ 2021-12-14 21:27  迪克推多0  阅读(1090)  评论(0编辑  收藏  举报