Linux下查看进程打开的文件与打开文件的进程

来自linux中国网wiki
跳到导航 跳到搜索

introduce

有许多情况下,我们需要查看一个进程当前打开了哪些文件,反过来我们也希望知道某一个文件正在被哪些进程所读写。 下面介绍这两个工具:lsof与fuser。

fuser

Show which processes use the named files, sockets, or filesystems. 
使用文件或文件结构识别进程

常用选项
-m 如果指定一个文件,则所有访问那个文件所在文件系统的进程都会被列出来
-n  type 指定不同的文件类型,默认类型为file,此外还支持tcp和udp类型,此时可以简写作port/tcp
-u  显示进程属主
-v  显示详细进程与打开文件信息

 
fuser -mvu /data #查看哪些进程在访问/data挂载分区 
inland125:
                         USER        PID ACCESS COMMAND
    /data:              root      14133 ..c.. (root)mysqld_safe
                         root      14140 ..c.. (root)mysqld_safe
                         mysql     15513 F.... (mysql)mysqld 

 于是从pid入手 就可以知道哪个进程的详情了 
 
 要终止使用给定文件系统的所有进程,请输入:
fuser -k -x -u -c /dev/hd1 
 

lsof

常用选项
 
-i [46] [proto] [@hostname|ip][:service|port] 用来选择占用某个端口的进程   
 
实例5:列出某个用户打开的文件信息
命令:
lsof -u username
说明: 
-u 选项,u其实是user的缩写
实例6:列出某个程序进程所打开的文件信息
命令:
lsof -c mysql 

参考

fuser 命令

Linux下查看进程打开的文件与打开文件的进程

每天一个linux命令(51):lsof命令