lsof:list open files,列出打开的文件 因为lsof需要访问核心内存和各种文件,需要用root,友情链接:Linux fuser命令
常用参数及说明:更多参数可以参考man lsof页面
- -a:多项结果同时成立才被显示
- -u:+ username,列出该user相关程序打开的文件
- +d:+ 目录,即找出该目录下已被打开的文件
- +D:+ 目录,即递归找出该目录下已被打开的文件
- -i:+ 4,6或者:端口号,列出符合条件的进程,后面不接任何选项,直接列出所有的网络连接
- -p:+ PID,列出该进程所打开的文件
- -c:+ 进程名,列出该进程所打开的文件
例子:
1. 查看使用该文件的进程
[root@localhost test]# lsof | grep test.txt #lsof不加参数将会显示所有打开文件的进程,然后grep想要查看的文件即可
vi 28453 root 4u REG 253,0 12288 4411879 /root/test/.test.txt.swp
2. 查看某一个用户有打开文件的进程
[root@localhost ~]# lsof -u test #打开test用户有打开文件的进程
3. 找出该目录下已被打开的文件
[root@localhost ~]# lsof +d /home/test #找出/home/test目录下被打开的文件,如果是+D,就递归找出目录中被打开的文件
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 28479 test cwd DIR 253,0 4096 3430578 /home/test
vim 28508 test cwd DIR 253,0 4096 3430578 /home/test
vim 28508 test 4u REG 253,0 12288 2940766 /home/test/.test.txt.swp
4. 列出某个端口相关信息
[root@localhost ~]# lsof -i :22 #列出22号端口相关信息
5. 列出某个进程打开的文件
[root@localhost ~]# lsof -p 28549 #28594为进程号
6. 列出某个命令打开的文件
[root@localhost ~]# lsof -c vi #列出vi命令打开的文件