IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    lsof命令介绍及用法

    mckee发表于 2016-04-14 18:39:31
    love 0

    Linux下一切皆文件,lsof(lists openfiles)是一个列出当前系统打开文件的工具.文件可以是:

    普通文件
    目录
    网络文件系统的文件
    字符或设备文件
    (函数)共享库
    管道,命名管道
    符号链接
    网络文件(例如:NFS file、网络socket,unix域名socket)
    还有其它类型的文件,等等

    lsof常见参数如下:
    -a 列出打开文件存在的进程
    -c<进程名> 列出指定进程所打开的文件
    -g 列出GID号进程详情
    -d<文件号> 列出占用该文件号的进程
    +d<目录> 列出目录下被打开的文件
    +D<目录> 递归列出目录下被打开的文件
    -n<目录> 列出使用NFS的文件
    -i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
    -p<进程号> 列出指定进程号所打开的文件
    -u 列出UID号进程详情

    lsof输出格式:
    mckee@mckee-pc ~/program/go/src/sharedlogic (release) $ sudo lsof | more
    COMMAND     PID   TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
    init          1             root  cwd       DIR                8,3      4096          2 /
    init          1             root  rtd       DIR                8,3      4096          2 /
    init          1             root  txt       REG                8,3    265848    5767246 /sbin/init
    init          1             root  mem       REG                8,3     47712    4985141 /lib/x86_64-linux-gnu/libnss_files-2.19.so
    init          1             root  mem       REG                8,3     47760    4985151 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
    init          1             root  mem       REG                8,3     97296    4985135 /lib/x86_64-linux-gnu/libnsl-2.19.so
    init          1             root  mem       REG                8,3     39824    4985137 /lib/x86_64-linux-gnu/libnss_compat-2.19.so
    init          1             root  mem       REG                8,3     14664    4985082 /lib/x86_64-linux-gnu/libdl-2.19.so
    

    lsof输出各列信息说明:
    COMMAND:进程的名称
    PID:进程标识符
    PPID:父进程标识符(需要指定-R参数)
    USER:进程所有者
    PGID:进程所属组
    FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
    TYPE:文件类型,如DIR、REG等,常见的文件类型:DIR:表示目录/CHR:表示字符类型/BLK:块设备类型/UNIX: UNIX 域套接字/FIFO:先进先出 (FIFO) 队列/IPv4:网际协议 (IP) 套接字
    DEVICE:指定磁盘的名称
    SIZE:文件的大小
    NODE:索引节点(文件在磁盘上的标识)
    NAME:打开文件的确切名称

    lsof部分示例:
    (1)显示开启某个文件的进程
    [root@mckee ~]# lsof /var/go/logs/access.log
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
    blog    4801 root    4u   REG    3,1       41 132106 /var/go/logs/access.log

    (2)显示某端口正在运行的程序
    [root@mckee ~]# lsof -i :3306
    COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    mysqld  1605 mysql   11u  IPv4   5143      0t0  TCP *:mysql (LISTEN)

    (3)显示某个进程名正在打开的文件
    [root@mckee ~]# lsof -c mysqld
    COMMAND    PID  USER   FD   TYPE             DEVICE  SIZE/OFF    NODE NAME
    mysqld_sa 1523  root  cwd    DIR                3,1      4096       2 /
    mysqld_sa 1523  root  rtd    DIR                3,1      4096       2 /
    mysqld_sa 1523  root  txt    REG                3,1    801816 4292633 /bin/bash
    mysqld_sa 1523  root  mem    REG                3,1    144776 3375150 /lib64/ld-2.5.so
    ......

    (4)显示某个进程号的进程打开了哪些文件
    [root@mckee ~]# lsof -p 4801
    COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF     NODE NAME
    blog    4801 root  cwd    DIR      3,1     4096   131242 /var/go
    blog    4801 root  rtd    DIR      3,1     4096        2 /
    blog    4801 root  txt    REG      3,1 11082256   132135 /var/go/blog
    ......

    (5)显示某个用户正在打开的文件
    [root@mckee ~]# lsof -u mysql
    COMMAND  PID  USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
    mysqld  1605 mysql  cwd    DIR                3,1      4096   196613 /var/lib/mysql
    mysqld  1605 mysql  rtd    DIR                3,1      4096        2 /
    mysqld  1605 mysql  txt    REG                3,1   7744280  2961215 /usr/libexec/mysqld
    ......

    (6)打印进程号
    [root@mckee ~]# lsof -tc sshd
    1453
    19954

    (7)列出所有tcp连接信息
    [root@mckee ~]# lsof -i tcp



沪ICP备19023445号-2号
友情链接