喜讯!TCMS 官网正式上线!一站式提供企业级定制研发、App 小程序开发、AI 与区块链等全栈软件服务,助力多行业数智转型,欢迎致电:13888011868  QQ 932256355 洽谈合作!

Lsof命令完全指南:从入门到精通的系统排查利器

2025-11-16 7分钟阅读时长

本文全面解析类Unix系统中`lsof`(List Open Files)命令的用法,涵盖基础语法、参数详解、进程管理(PID获取、启停、重启)及实战场景。无论是通过进程名/路径获取PID,还是排查端口占用、磁盘空间问题,都能通过本文掌握`lsof`的实用技巧,适合系统管理员与开发人员提升系统调试效率。

lsof-command-parameter-and-process-management-guide
 

在类Unix系统中,lsof(List Open Files)是一款功能强大的命令行工具,可列出系统中所有打开的“文件”(包括普通文件、目录、网络套接字等)。本文在原有基础上补充进程PID获取进程启停操作完整参数说明,助你更全面地运用lsof解决实际问题。

一、lsof基础语法与核心概念

1. 基本语法

lsof [选项] [文件名/参数]
  • 普通用户仅能查看自己的进程信息,root用户可查看系统所有进程。
  • 输出字段包括COMMAND(进程名)、PID(进程ID)、USER(用户)、FD(文件描述符)、TYPE(文件类型)、NAME(路径/网络信息)等。

二、通过lsof获取进程PID及管理操作

在实际工作中,常需通过进程名、运行路径等获取PID,再进行启停或重启操作。lsof结合其他命令可高效完成这些任务。

1. 根据进程名获取PID

场景:已知进程名(如nginxjava),需获取其PID。 方法:使用-c选项匹配进程名,结合-t仅输出PID。

# 获取所有进程名含nginx的PID
lsof -t -cnginx
​
# 示例输出(多个PID分行显示)
1234
1235

2. 根据运行路径获取PID

场景:已知进程的可执行文件路径(如/usr/bin/nginx),需定位其PID。 方法:直接指定路径作为参数,结合-t输出PID。

# 根据可执行文件路径获取PID
lsof -t/usr/bin/nginx
​
# 示例输出
1234

3. 停止/杀死进程

场景:获取PID后,终止异常进程。 方法:结合kill命令批量操作。

# 杀死所有进程名含nginx的进程
kill -9 $(lsof -t -c nginx)
​
# 杀死指定路径进程(如/usr/bin/java)
kill -9 $(lsof -t /usr/bin/java)

4. 重启进程

场景:修改配置后需重启进程(以nginx为例)。 方法:先停止进程,再启动(不同服务启动方式不同)。

# 停止nginx
kill -9 $(lsof -t -c nginx)
# 启动nginx(根据实际路径调整)
/usr/bin/nginx

三、lsof完整参数说明(SYNOPSIS)

以下按参数格式顺序,简要说明每个选项的作用及示例:

参数作用示例
-?显示简短帮助lsof -?
-a多选项逻辑与(默认是或)lsof -u root -a -c nginx(root用户且进程名含nginx)
-b避免阻塞操作lsof -b +D /mnt/network(查看网络目录时不阻塞)
-C不显示进程名版本后缀lsof -C -c nginx-1.21(显示为nginx)
-h压缩重复输出lsof -h -i :80(省略重复的进程名/PID)
-l显示UID而非用户名lsof -l -u 1000(USER列显示1000)
-n不解析IP为域名lsof -n -i(显示IP而非域名)
-N显示NFS相关文件lsof -N /mnt/nfs(查看NFS挂载文件)
-O不显示文件偏移量lsof -O -p 1234(隐藏SIZE/OFF列)
-P不解析端口为服务名lsof -P -i(显示80而非http)
-R显示父进程PID(PPID)lsof -R -c nginx(多一列PPID)
-t仅输出PIDlsof -t -i :80(仅返回80端口的PID)
-U显示UNIX域套接字lsof -U(列出所有UNIX套接字)
-v显示版本信息lsof -v
-V显示详细版本与配置lsof -V
-X排除网络文件lsof -X -p 1234(仅显示本地文件)
-A A限制文件描述符类型lsof -A p -c nginx(仅显示管道文件)
-c c按进程名前缀筛选lsof -c nginx(进程名以nginx开头)
+c c限制进程名显示长度lsof +c 5 -c nginx(进程名最多显示5个字符)
+|-d d按文件描述符筛选(+包含,-排除)lsof +d 0-2(包含FD 0-2);lsof -d 3(排除FD 3)
+|-D D按目录筛选(+递归,-非递归)lsof +D /var/log(递归目录);lsof -D /var(非递归)
+|-e s排除文件系统(+包含,-排除)lsof -e /proc(排除/proc文件系统)
+|-E显示/隐藏进程环境变量lsof +E -p 1234(显示进程1234的环境变量)
+|-f [cfgGn]控制文件系统信息显示lsof +f g -i(显示网络文件的GID)
-F [f]自定义输出格式(f为字段,如p=PID)lsof -F pn -i :80(输出PID和文件名)
-g [s]按进程组ID(PGID)筛选lsof -g 123(PGID为123的进程)
-i [i]筛选网络连接lsof -i tcp:80(TCP 80端口)
-k k按内核态线程筛选lsof -k 1(仅显示内核线程)
-K k按线程ID(TID)筛选lsof -K 456(TID为456的线程)
+|-L [l]按链接数筛选(+小于l,-大于l)lsof +L1(链接数小于1,即已删除文件)
+|-m m按内存映射筛选lsof +m /dev/shm(包含/dev/shm的内存映射)
+|-M显示/隐藏NFS挂载点信息lsof +M -N(显示NFS挂载点详情)
-o [o]显示文件偏移量(o为精度)lsof -o 3 -p 1234(偏移量保留3位小数)
-p s按PID筛选lsof -p 1234,5678(PID为1234和5678的进程)
+|-r [t]周期性刷新(+持续,-一次;t为秒)lsof -r 2 -i :80(每2秒刷新80端口)
-s [p:s]按网络状态筛选lsof -i tcp -sTCP:LISTEN(TCP监听状态)
-S [t]设置网络超时(t秒)lsof -i @remote -S 5(超时5秒)
-T [t]显示TCP信息(t为类型,如q=序列号)lsof -i tcp -T q(显示TCP序列号)
-u s按用户筛选lsof -u root,www-data(root和www-data用户)
+|-w显示/隐藏警告信息lsof -w -i(不显示警告)
-x [fl]显示文件锁信息(f=文件,l=锁)lsof -x f -p 1234(进程1234的文件锁)
+|-X包含/排除X11相关文件lsof -X(排除X11文件)
-z [z]按UID/GID范围筛选lsof -z 1000-2000(UID 1000-2000)
-Z [Z]显示SELinux上下文lsof -Z -i :80(80端口的SELinux上下文)
--分隔选项与文件名lsof -- -i(查看名为“-i”的文件)
[names]文件名/路径lsof /var/log/syslog(查看打开该文件的进程)

四、高频场景实战

1. 端口占用排查

# 查找80端口占用进程
lsof -i:80
# 杀死占用进程
kill -9 $(lsof -t -i :80)

2. 磁盘空间未释放

# 找到已删除但被占用的文件
lsof +L1
# 重启占用进程释放空间
systemctl restart $(lsof -t +L1 | xargs ps -p | awk 'NR>1 {print $4}')

3. 目录被占用导致无法删除

# 查找占用/var/www的进程
lsof +D /var/www
# 终止进程后删除目录
kill -9 $(lsof -t +D /var/www)&& rm -rf/var/www

4. 监控特定用户的网络连接

# 实时监控testuser的TCP连接(每3秒刷新)
lsof -nP -itcp -utestuser -r 3

五、总结

lsof命令的核心价值在于关联进程、文件与网络,通过本文补充的PID获取进程管理技巧,可进一步提升系统调试效率。无论是通过进程名/路径定位PID,还是结合参数排查端口、磁盘问题,灵活运用lsof的选项组合(如-c+-t+L1-i)都能快速解决实际问题。完整参数可通过man lsof深入学习,逐步掌握这一“系统排查瑞士军刀”。

TAG:lsof命令, 进程管理, PID获取, 端口占用, Linux命令, 系统排查, 进程启停

新闻通讯图片
主图标
新闻通讯

订阅我们的新闻通讯

在下方输入邮箱地址后,点击订阅按钮即可完成订阅,同时代表您同意我们的条款与条件。