fuser与lsof -- 查看文件被哪些进程占用
fuser
-
命令安装。
[root@template ~]# yum -y install psmisc [root@template ~]# rpm -ql psmisc /usr/bin/killall /usr/bin/peekfd /usr/bin/prtstat /usr/bin/pstree /usr/bin/pstree.x11 /usr/sbin/fuser
-
作用:查看文件、目录或者socket所属进程的PID,由此知道该文件或目录被哪些进程所使用
-
用法:
[root@template ~]# man fuser fuser [options] [name] # -a:显示所有指定文件的情况,即使没有进程访问它们 # -k:找出使用该文件或目录的进程PID,并kill,使用的信号是SIGKILL # -i:一般和-k结合使用,kill之前询问 # -signal:发送信号,如果不指定,默认-9 # -s:静默模式。不能与-a一起使用 # -m:指定已挂载的文件系统或者块设备。所有访问该文件系统的进程都会被列出来。 # -v:详细信息。 # 输出结果中PID后的标识符有以下几种: # c:代表当前目录 # e:代表文件为可执行程序 # f:被打开的文件或者目录,默认不显示 # F:被打开且正在写入的文件或目录,默认不显示 # r:根目录 # m:映射文件或共享库
-
举例:
# 查看使用crond文件的进程 [root@template ~]# fuser /usr/sbin/crond /usr/sbin/crond: 567e [root@template ~]# ps -ef | grep [5]67 root 567 1 0 Aug04 ? 00:00:00 /usr/sbin/crond -n # 查出所有使用sshd文件的进程并尝试kill [root@template ~]# fuser -ki /usr/sbin/sshd /usr/sbin/sshd: 14991e 14992e 15099e Kill process 14991 ? (y/N) # 查看是用/dev/sda3块设备的所有进程 [root@template ~]# df -h / Filesystem Size Used Avail Use% Mounted on /dev/sda3 38G 1.2G 37G 3% / [root@template ~]# fuser -m /dev/sda3 /dev/sda3: 1rce 2rc 3rc 5rc.... # 查看哪些程序在使用80端口 [root@template ~]# fuser -v 80/tcp USER PID ACCESS COMMAND 80/tcp: root 15347 F.... nginx nginx 15348 F.... nginx
lsof
-
作用:查看进程打开了哪些文件,当然也可以查看文件被哪些进程打开。不加参数时列出所有被打开的文件。
-
用法:
[root@template ~]# man lsof fuser [options] [name] # 命令后直接跟文件名:显示打开指定文件的所有进程列表,一般配合grep使用 # -c string:显示在“COMMAND”列中包含指定string的进程所打开的文件,该选项可以多次使用 # -p PID:查看该PID对应的进程打开了哪些文件 # -a:and的意思,组合多个参数一起使用 # -i:显示符合条件的进程情况 # -n:不反解ip为hostname [root@template ~]# lsof | head -3 COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 8,3 238 64 / systemd 1 root rtd DIR 8,3 238 64 / # COMMAND:进程名称 # PID:进程表示ID # USER:进程所有者 # FD:文件描述符,程序通过文件描述符来识别该文件 # TYPE:文件类型 # DEVICE:指定磁盘的名称 # SIZE/OFF:文件大小或者文件偏移量 # NODE:索引节点(文件在磁盘上的标识) # NAME:打开文件的确切名称
-
举例:
# 列出哪些进程在使用该文件 [root@template ~]# lsof /usr/sbin/sshd # 列出多个程序打开的文件信息 [root@template ~]# lsof -c crond -c nginx # 列出某用户及某程序打开文件信息 [root@template ~]# lsof -u nginx -a -c nginx # 列出某个PID对应进程打开的文件信息 [root@template ~]# lsof -p 1 # 列出所有网络连接 [root@template ~]# lsof -i # 列出所有tcp网络连接 [root@template ~]# lsof -i tcp # 列出谁在使用某个端口 [root@template ~]# lsof -i:22 # 列出某用户的所有活跃网络连接 [root@template ~]# lsof -u nginx -a -i # 列出某个用户打开的文件信息 [root@template ~]# lsof -u nginx # 查找某个目录下被打开的文件信息 [root@template ~]# lsof +d /var/log/nginx # 递归查找某个目录中被打开的文件信息 [root@template ~]# lsof +D /var/log/nginx
写作不易,转载请注明出处,谢谢~~