当前位置:   article > 正文

Linux命令_lsof & 网络/文件监控_lsof -n

lsof -n

官方描述

        一个打开的文件可以是一个常规文件、一个目录、一个块特殊文件、一个字符特殊文件、一个执行文本引用、一个库、一个流或一个网络文件(Internet套接字、NFS文件或UNIX域套接字)。 可以通过路径选择文件系统中的某个文件,也可以选择文件系统中的所有文件。
        lsof将产生可由其他程序解析的输出,而不是格式化的显示。 有关更多信息,请参阅-F、选项描述和OUTPUT FOR OTHER PROGRAMS部分。
        除了生成单个输出列表外,lsof还将以重复模式运行。 在重复模式下,它将产生输出,延迟,然后重复输出操作,直到用中断或退出信号停止。 更多信息请参见+|-r [t[m<fmt>]]选项说明。

目录

1. 语法

1.1. 常用参数

2. 列名解释

3. 使用技巧

4. 指定查询

4.1. 指定某个command

4.2. 指定某个用户

4.3. 指定某个PID

4.4. 指定某个目录下打开的文件

4.5. 指定FD类型

5. 查询网络类

6. 查询删除文件

6.1. 恢复误删文件

6.2. 删除物理文件后空间未释放

6.3. 检查句柄


1. 语法

lsof  [option]  [command]

 

1.1. 常用参数

  1. -c[cmd] :指定command列(多个command需要使用多个 -c)
  2. -u[user] :指定用户(多个用户以逗号分隔)
  3. -p[pid] :指定PID (多个PID以逗号分隔)
  4. +d[path] :指定目录文件下存在的进程
  5. +D[path] :指定目录文件下存在的进程(递归),多个目录下以空格分隔
  6. +c[num] :指定命令宽度
  7. -d[FD] :指定FD(多个类型以逗号分隔)
  8. [option]^:取反,不指定xxx
  9. # -u ^u1,^u2:输出用户u1、u2以外的其他用户信息
  1. -a:后面的选项必须都满足(and)
  2. # -a -u [user] -p [pid] -c [cmd]:指定的选项必须都满足
  3. -i:仅显示 ipv4/ipv6 的列表
  4. # -i 4:仅显示ipv4信息
  5. # -i 6:仅显示ipv6信息
  6. # -i tcp:仅显示ipv4/ipv6中tcp信息
  7. # -i udp:仅显示ipv4/ipv6中udp信息
  8. # -i :1-100:列出1-100所有端口信息
  9. -K:仅显示含有TID的列表
  10. -t:仅显示PID这一列
  11. -T:禁用TCP/TPI信息
  12. -X:禁用TCP/UDP文件
  1. -n:无主机名(快速查找)
  2. -P:无端口名称
  3. -O:没有开销(有风险)
  1. -l:列出UID编号
  2. -o:列出文件偏移量
  3. -s:列表文件大小
  4. -R:加入一列PPID
  5. -U:选择Unix套接字
  6. -N:选择NFS文件
  7. +m[m]:使用|创建挂载补充
  1. -?:帮助
  2. -h:帮助
  3. -v:列出版本信息
  4. -V:详细的搜索

 

 

 

2. 列名解释

(示例)

  1. COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  2. dconf 2900 2903 yt DEL REG 0,40 40904 /run/user/1001/dconf/user
  3. dconf 2900 2903 yt mem REG 8,3 143781 3291432 /usr/share/glib-2.0/schemas/gschemas.compiled
  4. dconf 2900 2903 yt mem REG 8,3 107020 1104620 /usr/share/locale/zh_CN/LC_MESSAGES/glib20.mo
  5. dconf 2900 2903 yt mem REG 8,3 81139 163028 /usr/share/locale/zh_CN/LC_MESSAGES/libc.mo
  6. dconf 2900 2903 yt mem REG 8,3 85324 2480242 /usr/share/locale/zh_CN/LC_MESSAGES/gtk30.mo
  7. dconf 2900 2903 yt mem REG 8,3 9533 1104668 /usr/share/locale/zh_CN/LC_MESSAGES/atk10.mo
  8. dconf 2900 2903 yt mem REG 8,3 26970 33738983 /usr/lib64/gconv/gconv-modules.cache

 (解释说明)

  1. COMMAND :包含与进程关联的UNIX命令名的前9个字符。如果为 +c w 选项指定了非零w值,则该列包含与进程关联的UNIX命令名的前w个字符,直到UNIX提供给lsof的字符限制为止。
  2. PID :进程PID
  3. TID :如果方言支持任务(线程)报告,并且列出了任务(线程),则为任务(线程)标识号。
  4. USER :用户名
  5. TYPE :是与文件相关联的节点类型-例如,GDIR, GREG, VDIR, VREG等
  6. DEVICE :包含设备号,以逗号分隔,用于字符特殊、块特殊、常规、目录或NFs文件
  7. SIZE/OFF:文件大小(单位:字节)
  8. NODE :本地文件的节点号
  9. NAME :文件所在的挂载点和文件系统的名称
  10. FD :文件的文件描述符编号
  11. # cwd 当前工作目录
  12. # Lnn 库引用(AIX)
  13. # err FD信息错误(见NAME列)
  14. # jld 监狱目录(FreeBSD)
  15. # ltx 共享库文本(代码和数据)
  16. # Mxx 十六进制内存映射类型号xx
  17. # m86 DOS合并映射文件
  18. # mem 内存映射文件
  19. # mmap 内存映射装置
  20. # pd 父目录
  21. # rtd 根目录
  22. # tr 内核跟踪文件(OpenBSD)
  23. # txt 程序文本(代码和数据)
  24. # v86 VP/ix映射文件
  25. FD后面跟着这些字符之一,描述文件打开的模式:
  26. # r 用于读访问
  27. # w 用于写访问
  28. # u 用于读写访问
  29. # - 如果模式未知,后面跟着锁字符
  30. # 空格 表示模式未知且后面没有锁定字符
  31. mode字符后面跟着一个锁字符,描述应用到文件的锁类型:
  32. # N 对于未知类型的Solaris NFS锁
  33. # r 用于文件部分的读锁
  34. # R 对于整个文件的读锁
  35. # w 用于对文件的一部分进行写锁
  36. # W 对于整个文件的写锁
  37. # u 对于任意长度的读写锁
  38. # U 对于未知类型的锁
  39. # x 对于SCO OpenServer Xenix锁的部分文件
  40. # X SCO OpenServer Xenix锁定整个文件
  41. # 空格 如果没有锁
  1. PPID :父ID(-z 指定)。
  2. PGID :进程组标识号(-g 指定)。
  3. ZONE :为Solaris 10及以上版本的分区名称(-z指定)。
  4. SECURITY-CONTEXT:是SELinux安全上下文(-Z指定)。注意:在运行的Linux内核中禁用SELinux时,-Z选项将被抑制。
  5. FILE-ADDR :当f被指定为+f时,包含内核文件结构地址.
  6. FCT :当c被指定为+f时,包含来自内核文件结构的文件引用计数
  7. NLINK :当指定+L时,包含文件链接计数
  8. FILE-FLAG :当g或g被指定为+f时,该字段包含内核文件结构的f_flag[s]成员的内容和内核的每个进程打开文件标志(如果可用);' G'使它们以十六进制显示;“g”,作为简称;可以显示两个列表,条目之间用逗号分隔,列表之间用分号(';')分隔;第一个列表可以包含下表中f_flag[s]值的简写名称:
  9. # AIO: 异步I/O(例如,FAIO)
  10. # AP: 附加
  11. # ASYN: 异步I/O(例如,FASYNC)
  12. # BAS: block, test, set在使用中
  13. # BKIU: 在使用时阻塞
  14. # BL: 使用块偏移量
  15. # BSK: 块寻求
  16. # CA: 避免副本
  17. # CIO: 并发I / O
  18. # CLON: 克隆
  19. # CLRD: CL读
  20. # CR: 创建
  21. # DF: 推迟
  22. # DFI: 推迟印第安纳州
  23. # DFLU: 数据刷新
  24. # DIR: 直接
  25. # DLY: 延迟
  26. # DOCL: 做克隆
  27. # DSYN: 数据完整性
  28. # DTY: 必须是目录
  29. # EVO: 活动只
  30. # EX: 开放执行
  31. # EXCL: 独家开
  32. # FSYN: 同步写道
  33. # GCDF: 在unp_gc()期间延迟(AIX)
  34. # GCMK: unp_gc()期间的标记(AIX)
  35. # GTTY: 通过/dev/tty访问
  36. # HUP: HUP进行中
  37. # KERN: 内核
  38. # KIOC: kernel-issued ioctl
  39. # LCK: 有锁
  40. # LG: 大文件
  41. # MBLK: 流消息块
  42. # MK: mark
  43. # MNT: mount
  44. # MSYN: 多路同步
  45. # NATM: 不要更新时间
  46. # NB: 非阻塞I / O
  47. # NBDR: 没有BDRM检查
  48. # NBIO: SYSV非阻塞I/O
  49. # NBF: n缓冲生效
  50. # NC: 没有缓存
  51. # ND: 没有延迟
  52. # NDSY: 无数据同步
  53. # NET: 网络
  54. # NFLK: 不要点击链接
  55. # NMFS: NM文件系统
  56. # NOTO: 关闭背景停止
  57. # NSH: 没有分享
  58. # NTTY: 无控制TTY
  59. # OLRM: OLR的镜子
  60. # PAIO: POSIX异步I/O
  61. # PP: POSIX管
  62. # R: 读
  63. # RC: 文件和记录锁定缓存
  64. # REV: 撤销
  65. # RSH: 分享阅读
  66. # RSYN: 读同步
  67. # RW: 读写访问
  68. # SL: 共享锁
  69. # SNAP: 煮熟的快照
  70. # SOCK: 套接字
  71. # SQSH: 顺序共享设置打开
  72. # SQSV: 序列SVM设置开启
  73. # SQR: 序列集修复打开
  74. # SQS1: 顺序全共享打开
  75. # SQS2: 顺序部分共享打开
  76. # STPI: 停止I / O
  77. # SWR: 同步阅读
  78. # SYN: 写入时文件完整性
  79. # TCPM: 避免TCP冲突
  80. # TR: 截断
  81. # W: 写
  82. # WKUP: 并行I/O同步
  83. # WTG: 并行I/O同步
  84. # VH: vhangup等待
  85. # VTXT: 虚拟文本
  86. # XL: 独占锁

 

 

 

3. 使用技巧

快速查询结果使用 -n (不显示主机名)

  • 为什么不显示主机名?
  • 查询过程中非常慢,影响速度且实际作用并不大。

分页查询 + more 命令

  • 为什么分页查询?
  • 因为lsof在没有过滤的情况下信息很多,分页查询更方便。

同时过滤使用 -a(and)

  • 为什么使用 -a 过滤?
  • 因为lsof在没有使用-a的情况下并不会同时过滤多个条件,这也是为了方便扩展。需要在其他参数前加上 -a 参数。

简单示例:

  1. # 快速查询 + 分页查询
  2. lsof -n |more
  3. # 指定的选项必须同时满足
  4. lsof -a -u [user] -p [pid] -c [cmd]
  5. lsof -an -u [user] -p [pid] -c [cmd] |more

 

 

 

4. 指定查询

4.1. 指定某个command

  1. # 指定单个command列
  2. lsof -c [command]
  3. # 指定多个command列
  4. lsof -c [command1] -c [command2] -c [command3]
  5. # 排除某个command
  6. lsof -c ^[command]
  7. # 指定某个用户下的command列(需要-a过滤)
  8. lsof -a -u [user] -c [command]

 

 

4.2. 指定某个用户

  1. # 指定单个用户
  2. lsof -u [user]
  3. # 指定多个用户
  4. lsof -u [user1],[user2],[user3]
  5. # 除某个用户下的其他信息(取反)
  6. lsof -u ^[user]
  7. # 除多个用户下的其他信息(取反),需要注意指定的用户必须存在,否则报错
  8. lsof -u ^[user1],^[user2],^[user3]

 

 

4.3. 指定某个PID

  1. # 指定单个pid
  2. lsof -p [pid]
  3. # 指定多个pid
  4. lsof -p [pid1],[pid2],[pid3]
  5. # 排除某个pid
  6. lsof -p ^[pid]

 

 

4.4. 指定某个目录下打开的文件

  1. +d[path] :指定目录文件下存在的进程
  2. +D[path] :指定目录文件下存在的进程(递归),多个目录下以空格分隔
  3. 建议使用+D,+d无法递归
  4. # 指定单个目录
  5. lsof +D [path]
  6. # 指定多个目录(以空格分隔)
  7. lsof +D [path1] [path2] [path3]

 

 

4.5. 指定FD类型

  1. # 指定单个类型
  2. lsof -d [type]
  3. # 指定多个类型
  4. lsof -d [type1],[type1],[type1]
  5. 类型说明:
  6. # cwd 当前工作目录
  7. # Lnn 库引用(AIX)
  8. # err FD信息错误(见NAME列)
  9. # jld 监狱目录(FreeBSD)
  10. # ltx 共享库文本(代码和数据)
  11. # Mxx 十六进制内存映射类型号xx
  12. # m86 DOS合并映射文件
  13. # mem 内存映射文件
  14. # mmap 内存映射装置
  15. # pd 父目录
  16. # rtd 根目录
  17. # tr 内核跟踪文件(OpenBSD)
  18. # txt 程序文本(代码和数据)
  19. # v86 VP/ix映射文件

 

 

 

5. 查询网络类

  1. # 仅显示ipv4/ipv6的列表
  2. lsof -i
  3. # 仅显示ipv4信息
  4. lsof -i 4
  5. # 仅显示ipv6信息
  6. lsof -i 6
  7. # 仅显示ipv4/ipv6中tcp信息
  8. lsof -i tcp
  9. # 仅显示ipv4/ipv6中udp信息
  10. lsof -i udp
  11. # 仅显示ipv4中tcp信息
  12. lsof -a -i 4 -i tcp
  13. # 仅显示ipv6中udp信息
  14. lsof -a -i 6 -i udp
  15. # 仅显示占用3306端口信息
  16. lsof -i :3306
  17. # 仅显示占用1-1000端口信息
  18. lsof -i :1-1000
  19. # 禁用TCP/TPI信息
  20. lsof -T
  21. # 禁用TCP/UDP文件
  22. lsof -X

 

 

 

6. 查询删除文件

6.1. 恢复误删文件

前提条件

  • 必须是正在运行中的文件,进程还存在
  1. # 检查该文件是否还存在
  2. lsof -n |grep delete |grep [进程名]
  3. # 查看伪文件 /proc
  4. ll /proc/[PID]/fd
  5. # 将伪文件下fd拷贝过来即可
  6. cp /proc/[PID]/fd/255 ./

 

 

6.2. 删除物理文件后空间未释放

描述

  • 清理物理文件后,df 查看磁盘发现空间并没有释放

示例:删除5GB物理文件后,空间并没有释放

 

  1. # 查询已删除但进程未结束的进程,杀掉即可
  2. lsof -n |grep delete
  3. # 杀掉单个进程
  4. kill -9 [PID]
  5. # 杀掉全部进程
  6. lsof -n |grep delete |awk '{print $2}' |xargs kill -9

 

 

 

6.3. 检查句柄

小技巧

  • 使用root用户查询的进程更全面
  1. # 查看单个进程最大句柄数
  2. ulimit -n
  3. # 排序查看进程一打开的句柄数(第一列:句柄数,第二列:PID)
  4. lsof -n |awk '{print $2}' |sort |uniq -c |sort -nr
  5. # 查看打开句柄数超过1000的PID(第一列:句柄数,第二列:PID)
  6. lsof -n |awk '{print $2}' |sort |uniq -c |sort -nr |awk '$1 > 1000 {print $0}'
  7. # 查看句柄超过1000的进程信息
  8. ps u -p `lsof -n |awk '{print $2}' |sort |uniq -c |sort -nr |awk '$1 > 1000 {print $2}' |xargs |tr ' ' ,`

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/867096
推荐阅读
相关标签
  

闽ICP备14008679号