lsof(List Open Files)是一个功能强大的Linux/Unix命令行工具,用于列出系统中所有被打开的文件及相关进程信息。在Linux系统中,"一切皆文件",因此lsof实际上可以显示几乎所有类型的I/O资源,包括常规文件、目录、块设备、字符设备、网络套接字等。
lsof -i
lsof -i :端口号
例如查看80端口:
lsof -i :80
lsof -i TCP # 查看所有TCP连接
lsof -i UDP # 查看所有UDP连接
lsof -i :22 # 查看SSH端口(22)连接
lsof -p 进程ID
lsof -u 用户名
lsof -c 程序名
例如查看nginx打开的文件:
lsof -c nginx
lsof -i TCP:80 -u root # 查看root用户的TCP 80端口连接
watch -n 1 "lsof -i :端口号"
这会每秒刷新一次指定端口的连接状态。
lsof的输出通常包含以下列:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sudo lsof -i :80
lsof -i TCP:80,443
lsof -i -u username
lsof -i -sTCP:LISTEN
lsof | grep deleted
虽然lsof功能强大,但还有其他工具可以辅助端口监控:
netstat -tulnp
ss -tulnp
(比netstat更高效)nmap -sT -O localhost
(端口扫描)掌握lsof命令将使你在Linux系统管理和故障排查中如虎添翼,特别是在处理复杂的网络和文件系统问题时。