netstat和lsof两个Linux命令查看端口的区别
一、netstat命令介绍
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 用以显示符合条件的进程情况
三、常用操作
1、根据端口port查进程
netstat
-nap |
grep
port
lsof
-i:port
netstat
-nap |
grep
pid
lsof
-i |
grep
pid
四、注意事项
netstat在非root下不能识别所有的进程,而且不是自己拥有的进程信息不会展示,需要 root 账号才能显示所有信息。
lsof在非root下执行lsof -i 无任何输出。两者在root下均能显示所有进程,权限不够的话,可以试一下sudo命令。
1、netstat 可以显示PID、进程名,不能显示进程所属的用户
2、lsof 可以显示进程名、PID、用户
# lsof -i :8123
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称