Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了lsof命令大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

目录 lsof命令 参考 lsof版本注意 特别建议 lsof用法 lsof应用实例 lsof命令 ?? Written by Zak Zhu 参考 鸟哥私房菜(http://cn.linux.vbird.org/linux_basic/0440processcontrol_4.php#proc) 枯木/翻译-lsof在Linux中的10个例子(http://kumu-linux.github.i

lsof命令

?? Written by Zak Zhu

参考

lsof版本注意

CentOS6中lsof版本认为4.82

lsof命令

CentOS7中lsof版本认为4.87

lsof命令

上述两个版本差异见下图:

lsof命令

lsof命令

由上图可知,如果在CentOS7中用lsof | wc -l命令来计算Open File Discriptor的总数,那么Open File Discriptor的总数会明显偏大 !!!

特别建议

所以为了避免上述问题,建议使用如下命令来查看FD:

  1. 统计System Open File Discriptor的总数

    cat /proc/sys/fs/file-nr | awk '{print $1-$2}'
  2. 统计The Process Open File Discriptor的总数

    ls -l /proc/<pid>/fd | wc -l

    lsof命令

  3. 查看哪些进程使用的FD较多

    执行pnofile.sh脚本:

    for pid_path in $(ls -d /proc/[0-9]*)
    do
      pid=$(echo ${pid_path} | awk -F'/' '{print $3}')
      pnofile=$(ls ${pid_path}/fd | wc -l) 
      echo "${pid_path} ${pnofile}" >> /tmp/stdout                                                           
    done
    
    cat /tmp/stdout | awk '{print $2,$1}' | sort -rn 
    
    rm -rf /tmp/stdout

    lsof命令

lsof用法

下面我使用版本为4.87的lsof来演示用法:

1. List all Open Files with lsof Command

lsof

lsof命令

2. List User Specific Opened Files

lsof -u root

lsof命令

3. Find Processes running on Specific Port

lsof -i TCP:22

lsof命令

4. List Open Files of TCP Port ranges 1-1024

lsof -i TCP:1-1024

lsof命令

5. Exclude User with ‘^‘ Character

lsof -i -u ^root

lsof命令

6. Search by PID

lsof -p 1

lsof命令

7. Kill all Activity of Particular User

kill -9 $(lsof -t -u zak)

lsof应用实例

1.恢复删除文件

接下来,我们做个实验:

  • 模拟文件删除,但是系统中还有进程正在访问该文件情况

    # 1
    echo "hello" > /tmp/test
    # 2
    less /tmp/test
    # 此时,在另外一个终端,Jhon执行了删除文件的操作
    # 3
    rm /tmp/test

    @H_434_301@

  • 恢复被删除文件

    1. 通过lsof查找正使用该文件的PID以及FD

      lsof | grep "deleted" | grep "/tmp/test"

      lsof命令

    2. 在/proc目录下,找到使用该文件的进程的FD

      cat /proc/32189/fd/4

      lsof命令

    3. 恢复文件

      cat /proc/32189/fd/4 > /tmp/test

      lsof命令

2.处理df和du的显示相差很大

3.解决文件系统无法卸载

  • 模拟文件系统无法卸载的情况

    # 1
    mount /dev/sr0 /mnt/cdrom
    # 2
    less /mnt/cdrom/GPL
    #当文件系统中,有文件正在被使用,此时卸载该文件系统会失败
    # 3
    umount /dev/sr0

    lsof命令

  • 解决思路

    1. 通过lsof查看该文件系统中正在使用文件的进程

      lsof | grep "/mnt/cdrom"

      lsof命令

    2. 杀掉该文件系统中正在使用文件的进程

      kill -9 10506
    3. 成功卸载该文件系统

      umount /dev/sr0

      lsof命令

大佬总结

以上是大佬教程为你收集整理的lsof命令全部内容,希望文章能够帮你解决lsof命令所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: