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查进程
123
netstat -nap | grep port lsof  -i:port
根据进程pid查端口
123
netstat -nap | grep pid  lsof -i | grep pid
四、区别
netstat在非root下不能识别所有的进程,而且不是自己拥有的进程信息不会展示,需要 root 账号才能显示所有信息
lsof在非root下执行lsof -i 无任何输出
两者在root下均能显示所有进程
netstat 可以显示PID、进程名,不能显示进程所属的用户
123456
~$ sudo netstat -nlptActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program nametcp        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、用户
123
# lsof -i :22COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAMEsshd    1409 root    3u  IPv6   5678       TCP *:ssh (LISTEN)
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
Loading...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP