命令安裝
[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
fuser
-
Introduction
- 查看文件、目錄或者socket所屬進程的PID,由此知道該文件或目錄被哪些進程所使用
-
Usage
[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:映射文件或共享庫
- Example
# 查看使用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
-
Introduction
- 查看進程打開了哪些文件,當然也可以查看文件被哪些進程打開。不加參數時列出所有被打開的文件。
-
Usage
[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:打開文件的確切名稱
- Example
# 列出哪些進程在使用該文件
[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