有许多状况下,咱们须要查看一个进程当前打开了哪些文件,反过来咱们也但愿知道某一个文件正在被哪些进程所读写。在Linux下有许多有用的工具能够帮咱们完成这两个工做,下面介绍这两个工具:lsof与fuser。 fuser find files or sockets' user 格式:fuser [选项] fname -k 若是找到打开文件的进程,则发送SIGKILL杀死此进程,经过-i选项,能够为用户提供交互选择 -signal 用户能够指定使用何种信号去kill进程,若是-k参数指定,则忽略此参数 -m 若是指定一个文件,则全部访问那个文件所在文件系统的进程都会被列出来 -n type 指定不一样的文件类型,默认类型为file,此外还支持tcp和udp类型,此时能够简写做port/tcp -u 显示进程属主 -v 显示详细进程与打开文件信息 -4/-6 只搜索IPv4/IPv6套接字 例如,咱们想查看端口TCP端口9000由哪一个进程打开 fuser -v -u 9000/tcp 查看哪些进程在访问/home挂载分区 fuser -mv /home lsof list open file 格式:lsof [选项] [names] 单独执行lsof将输出系统中全部打开的文件,咱们能够grep过滤出咱们关心的内容,不过lsof提供了相应的参数帮助咱们精确查找 lsof name 将输出全部使用文件name的进程 -p pid 列出进程pid所打开的全部文件 -d FD_pattern 列出全部已经打开的FD值为FD_pattern的文件FD的值有整数,TXT,MEM等等 -a lsof后能够加多个匹配条件,默认为or链接,此参数将多个条件变成and关系 -i [46] [proto] [@hostname|ip][:service|port] 用来选择占用某个端口的进程 +d/+D dir 非递归或递归的显示打开dir下文件的进程 -c string 显示进程的command中包含string的进程所打开的文件 -u username 显示属于user的进程所打开的文件 -g gid 以上这些参数已经足够用了,上面这两个工具都是读取/proc文件系统中的数据进行工做的。网上有提到借助于lsof的查找功能,能够对一个删除的文件进行恢复,前提是占用这个文件的进程当前尚未关闭。经过被删除的文件,找到对应的进程及在进程中的fd-num,而后经过cat /proc/process-num/fd/fd-num便可恢复被删除的文件。