Linux lsof命令 列出进程调用或开启的文件信息
我们知道,通过 ps 命令可以查询到系统中所有的进程,那么,是否可以进一步知道这个进程到底在调用哪些文件吗?当然可以,使用 lsof 命令即可。 lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。 lsof 命令的基本格式如下: [root@localhost ~]# lsof [选项] 此命令常用的选项及功能。 lsof 命令常用选项及功能选项功能-c 字符串只列出以字符串开头的进程打开的文件。+d 目录名列出某个目录中所有被进程调用的文件。-u 用户名只列出某个用户的进程打开的文件。-p pid列出某个 PID 进程打开的文件。 【例 1】 [root@localhost ~]# lsof | more #查询系统中所有进程调用的文件 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,3 4096 2 / init 1 root rtd DIR 8,3 4096 2 / init 1 root txt REG 8,3 145180 130874 /sbin/init init 1 root mem REG 8,3 142472 665291 /lib/ld-2.12.so init 1 root mem REG 8,3 58704 655087 /lib/libnss_files-2.12.so …省略部分输出… 这个命令的输出非常多。它会按照 PID,从 1 号进程开始列出系统中所有的进程正在调用的文件名。 【例 2】 [root@localhost ~]# lsof /sbin/init #查询某个文件被哪个进程调用 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root txt REG 8,3 145180 130874 /sbin/init lsof 命令也可以反过来查询某个文件被哪个进程调用。这个例子就查询到 /sbin/init 文件是被 init 进程调用的。 【例 3】 [root@localhost ~]# lsof +d /usr/lib #查询某个目录下所有的文件是被哪些进程调用的 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpc.idmap 1196 root mem REG 8,3 26400 279930 /usr/lib/libnfsidmap.so.0.3.0 rpc.idmap 1196 root mem REG 8,3 108948 276696 /usr/lib/libevent-1.4.so.2.1.3 avahi-dae 1240 avahi mem REG 8,3 49124 271310 /usr/lib/libavahi-common.so.3.5.1 avahi-dae 1240 avahi mem REG 8,3 23904 283188 /usr/lib/libdaemon.so.0.5.0 avahi-dae 1240 avahi mem REG 8,3 227212 268396 /usr/lib/libavahi-core.so.6.0.1 avahi-dae 1241 avahi mem REG 8,3 49124 271310 /usr/lib/libavahi-common.so.3.5.1 avahi-dae 1241 avahi mem REG 8,3 23904 283188 /usr/lib/libdaemon.so.0.5.0 avahi-dae 1241 avahi mem REG 8,3 227212 268396 /usr/lib/libavahi-core.so.6.0.1 cupsd 1251 root mem REG 8,3 69564 270210 /usr/lib/libtasn1.so.3.1.6 使用“+d”选项可以搜索某个目录下所有的文件,查看到底哪个文件被哪个进程调用了。 【例 4】 [root@localhost ~]# lsof -c httpd #查看以httpd开头的进程调用了哪些文件 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 4689 root cwd DIR 8,3 4096 2 / httpd 4689 root rtd DIR 8,3 4096 2 / httpd 4689 root txt REG 8,3 1797559 2855 /usr/local/apache2/bin/httpd httpd 4689 root mem REG 8,3 302300 665303 /lib/libfreebl3.so httpd 4689 root mem REG 8,3 58704 655087 /lib/libnss_files-2.12.s httpd 4689 root mem REG 8,3 142472 665291 /lib/ld-2.12.so httpd 4689 root mem REG 8,3 1889704 665292 /lib/libc-2.12.so …省略部分输出… 使用“-c”选项可以查询以某个字符串开头的进程调用的所有文件,比如执行“lsof-c httpd”命令就会查询出以 httpd 开头的进程调用的所有文件。 【例 5】 [root@localhost ~]# lsof -p 1 #查询PID是1的进程调用的文件 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,3 4096 2 / init 1 root rtd DIR 8,3 4096 2 / init 1 root txt REG 8,3 145180 130874 /sbin/init init 1 root mem REG 8,3 142472 665291 /lib/ld-2.12.so init 1 root mem REG 8,3 58704 655087 /lib/libnss_files-2.12.so 当然,我们也可以按照 PID 查询进程调用的文件,比如执行“lsof -p 1”命令就可以查看 PID 为 1 的进程调用的所有文件。 【例 6】 [root@localhost ~]# lsof -u root #按照用户名查询某个用户的进程调用的文件 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,3 4096 2 / init 1 root rtd DIR 8,3 4096 2 / init 1 root txt REG 8,3 145180 130874 /sbin/init init 1 root mem REG 8,3 142472 665291 /lib/ld-2.12.so init 1 root mem REG 8,3 58704 655087 /lib/libnss_files-2.12.s init 1 root mem REG 8,3 38768 655310 /lib/libnih-dbus.so.1.0. …省略部分输出… 我们还可以查看某个用户的进程调用了哪些文件。 (编辑:银川站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |