要查看linux中进程打开的文件或文件被哪个进程占用,可使用lsof命令。1. 查看某进程打开的文件:执行lsof -p pid,如lsof -p 12345;2. 查看某文件被哪些进程打开:执行lsof /path/to/file,如lsof /var/log/syslog;3. 输出解读:包含command、pid、user、fd、type、name等关键列,例如一行输出显示apache2进程(pid 12345)监听80端口;4. 常用参数包括:-i(网络连接)、-u(用户)、-c(命令名)、-t(仅pid)、-n/-p(禁用解析)、+d(目录递归);5. 高级用途:查找已删除但仍被占用的文件(lsof | grep deleted)、解决端口占用问题(lsof -i :3306)、诊断文件描述符耗尽(lsof -p pid | wc -l)、找出阻止卸载的进程(lsof /mnt/data)。掌握这些用法有助于高效排查系统资源问题。

在Linux系统里,想知道某个进程到底打开了哪些文件,或者某个文件被哪个进程占用着,
lsof

要查看Linux进程打开的文件,最直接、最常用的方法就是使用
lsof
比如,如果你想知道PID为12345的进程打开了哪些文件,你可以这样执行:

lsof -p 12345
这条命令会列出该进程当前正在使用的所有文件描述符及其对应的文件或网络连接。
如果你想反过来,看看某个文件(比如
/var/log/syslog

lsof /var/log/syslog
这在排查文件被占用、无法删除等问题时特别有用。
刚接触
lsof
一条典型的
lsof
cwd
txt
mem
rtd
0
1
2
r
w
u
REG
DIR
CHR
BLK
FIFO
SOCK
举个例子,如果看到
lsof
apache2 12345 www-data 4u IPv4 123456 0t0 TCP *:80 (LISTEN)
apache2
www-data
4
u
IPv4
TCP
80
lsof
-i
-i
lsof -i
lsof -i :80
lsof -i @192.168.1.100
lsof -i TCP
lsof -i TCP:80
-u <username>
nginx
mysql
lsof -u nginx
-c <command>
lsof -c sshd
它会找出所有名为
sshd
-t
kill
kill -9 $(lsof -t -i :8080)
这条命令会杀死所有占用8080端口的进程。当然,生产环境操作要慎重。
-n
lsof
-n
lsof -i -n
-P
-n
-P
http
lsof -i -P
+D <directory>
lsof +D /var/log
lsof
查找“文件已删除但仍被占用”的情况: 有时候你删除一个文件,但磁盘空间并没有立即释放,或者文件还在被某个进程使用。这通常是因为某个进程还持有这个文件的文件描述符。
lsof
lsof | grep deleted
输出中带有
(deleted)
解决“地址已被使用”错误(Address already in use): 当你尝试启动一个服务,却提示端口已被占用时,
lsof -i :<port_number>
lsof -i :3306
这能告诉你MySQL的3306端口是不是已经被另一个MySQL实例或者其他什么程序占用了。
诊断“文件描述符耗尽”(Too many open files): 某些应用程序可能会因为打开了过多的文件描述符而崩溃。系统对每个进程可打开的文件描述符数量是有限制的。当遇到这种问题时,你可以用
lsof -p <PID> | wc -l
lsof -p <PID> | wc -l
这有助于你调整系统的
ulimit
找出特定文件系统的占用者: 如果你的某个分区无法卸载(unmount),可能是因为上面有文件还在被使用。你可以通过
lsof /mount/point
lsof /mnt/data
这会列出所有在
/mnt/data
总的来说,
lsof
以上就是如何查看Linux进程打开文件 lsof命令常用参数解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号