fuser與lsof -- 查看文件被哪些進程占用


命令安裝

[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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM