lsof
{Back to Index}

Table of Contents

1 选项

  • -a : 进行 运算(默认是 逻辑)
  • -l : 显示用户 ID ,而不是用户名
  • -t : 仅获取进程 ID
  • -F : 格式化输出结果,如 -F pc (列出进程 ID,命令名)
  • -n : 避免域名解析
  • -P : 避免端口解析

2 用法示例

2.1 列出所有使用这些文件的程序

lsof /path/to/file1 /path/to/file2

2.2 查看指定路径下所有正在被使用的文件

lsof +D /path  ## 递归
lsof +d /path  ## 非递归

2.3 列出被某一进程所使用的文件

lsof -p <pid>

2.4 查看 socket 信息

lsof -i [46][protocol][@hostname|hostaddr][:service|port]
lsof -i
lsof -i 4
lsof -i :80
lsof -i tcp
lsof -i tcp:80
lsof -i @<ip>
lsof -i @<ip>:<port>

2.5 查看各种状态的 TCP 连接

lsof -iTCP -sTCP:LISTEN

常见状态有:

  • CLOSED
  • IDLE
  • BOUND
  • LISTEN
  • ESTABLISHED
  • SYN_SENT
  • SYN_RCDV
  • ESTABLISHED
  • CLOSE_WAIT
  • FIN_WAIT1
  • CLOSING
  • LAST_ACK
  • FIN_WAIT_2
  • TIME_WAIT

2.6 查看指定文件描述符的文件

lsof -d <fd>

2.7 结束所有监听在本地接口的进程

kill -9 `lsof -i@127.0.0.1 -t`

2.8 循环监控

lsof -r <second>
lsof -i:80 -r 1m"=== %T ==="

2.9 监控指定用户打开的文件

lsof -u root
lsof -u ^root  ## 

2.10 查看内存映射文件

lsof -d mem

2.11 恢复误删的文件

  • 第一步:找到使用误删文件的进程及文件描述符

    $ lsof | grep 'karaf.log'
    java 1283 root 2w REG 3,3 5381017 1773647 /var/log/karaf.log (deleted)
    
  • 第二步:重定向

    cat /proc/1283/fd/2 > /var/log/karaf.log
    

Author: Hao Ruan (ruanhao1116@gmail.com)

Created: 2018-02-07 Wed 00:00

Updated: 2021-08-28 Sat 14:21

Emacs 27.1 (Org mode 9.3)