点击访问 Linux 命令大全 >>
在使用 Linux 过程中,有时我们需要知道某个文件正在被哪些进程在使用。得知文件被哪些进程正在使用,就可以通过 kill 命令强制“杀死”进程,然后就可以对文件进行编辑、删除等操作了,Linux 提供了 lsof 命令来查看指定文件正在被哪些进程使用。
lsof 命令用于查看进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件,是十分方便的系统监视工具。因为 lsof 命令需要访问核心内存和各种文件,所以需要 root 用户执行。
lsof [参数] [文件]
参数说明:
-a:列出打开文件存在的进程
-c <进程名>:列出指定进程所打开的文件
-g:列出GID号进程详情
-d <文件号>:列出占用该文件号的进程
+d <目录>:列出目录下被打开的文件
+D <目录>:递归列出目录下被打开的文件
-n <目录>:列出使用NFS的文件
-i <条件>:列出符合条件的进程
-p <进程号>:列出指定进程号所打开的文件
-u:列出UID号进程详情
-h:显示帮助信息
-v:显示版本信息
(1)查看系统中所有打开文件的进程信息,例如:
[hxstrive@localhost ~]$ lsof COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd unknown /proc/1/cwd (readlink: Permission denied) systemd 1 root rtd unknown /proc/1/root (readlink: Permission denied) systemd 1 root txt unknown /proc/1/exe (readlink: Permission denied) systemd 1 root NOFD /proc/1/fd (opendir: Permission denied) kthreadd 2 root cwd unknown /proc/2/cwd (readlink: Permission denied ...
(2)查看指定文件正在被哪个进程打开,例如:
[hxstrive@localhost ~]$ lsof test.ods COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME soffice.b 13507 hxstrive 3uW REG 253,0 7260 3653596 test.ods
注意:在执行“lsof test.ods”命令之前,先使用 LibreOffice 工具创建一个 Excel 表格文件,且命名为“test”(创建完成后不要关闭 LibreOffice)。
(3)列出进程号为 13597 的进程打开的所有文件,例如:
[hxstrive@localhost ~]$ lsof -p 13507 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME soffice.b 13507 hxstrive cwd DIR 253,0 4096 3653566 /home/hxstrive soffice.b 13507 hxstrive rtd DIR 253,0 224 64 / soffice.b 13507 hxstrive txt REG 253,0 7168 52222165 /usr/lib64/libreoffice/program/soffice.bin soffice.b 13507 hxstrive mem REG 253,0 8337872 52123259 /usr/lib64/libreoffice/program/libcuilo.so soffice.b 13507 hxstrive DEL REG 0,4 98309 /SYSV00000000 soffice.b 13507 hxstrive mem REG 253,0 341752 52144539 /usr/lib64/libreoffice/program/libsvgiolo.so ...