zoukankan      html  css  js  c++  java
  • s11.1 lsof:查看进程打开的文件

    功能说明

    lsof 全名为list open files,也就是列举系统中已经被打开的文件,通过lsof命令,就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

    【语法格式】

    lsof    [option]
    lsof    [选项]
    参数选项         解释说明
    -c<进程名>     显示指定的进程名所打开的文件
    -p<进程号>     显示指定的进程号所打开的文件
    -i            通过监听指定的协议、端-和主机等信息,显示符合条件的进程信息
    -u            显示指定用户使用的文件
    -U            显示所有socket文件
     

    范例11-1:显示使用文件的进程。

    [root@lewen ~]# lsof /var/log/messages
    COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
    abrt-watc  8718 root    4r   REG  253,0   404668 522404 /var/log/messages
    rsyslogd  10046 root    6w   REG  253,0   404668 522404 /var/log/messages
     
    如果想知道某个特定的文件是由哪个进程在使用,就可以通过“lsof文件名”的方式
    来得到。从上面的输出可以得知,/var/log/messages文件是由rsyslogd进程在使用。
    输出中每列的含义具体如下。
    -COMMAND:命令,进程的名称。
    -PID:进程号。
    -USER:进程的所有者。
    -FD:文件描述符,它又包含如下内容。
      0:表示标准输出。
      1:表示标准输入。
      2:表示标准错误。
      u:表示该文件被打开并处于读取/写人模式。
      r:表示该文件被打开并处于只读模式。
      w:表示该文件被打开并处于写人模式。
    -TYPE:文件类型,REG(regular)为普通文件。
    -DEVICE:指定磁盘的名称。
    -SIZE/OFF:文件的大小。
    -NODE:索引节点。
    -NAME:文件名称。

    范例11-2:显示指定进程所打开的文件。

    [root@lewen ~]# lsof -c rsyslog
    COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF   NODE NAME
    rsyslogd 10046 root  cwd       DIR              253,0      224     64 /
    rsyslogd 10046 root  rtd       DIR              253,0      224     64 /
    rsyslogd 10046 root  txt       REG              253,0   664080 522402 /usr/sbin/rsyslogd
    ...

    范例11-3:显示指定进程号所打开的文件。

    [root@lewen ~]# lsof -p 10046
    COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF   NODE NAME
    rsyslogd 10046 root  cwd       DIR              253,0      224     64 /
    rsyslogd 10046 root  rtd       DIR              253,0      224     64 /
    rsyslogd 10046 root  txt       REG              253,0   664080 522402 /usr/sbin/rsyslogd
    ...

    范例11-4:监听指定的协议、端口和主机等信息,显示符合条件的进程信息。

    在讲解范例之前,我们先来看看相应的语法格式:
    lsof -i [46] [protocol][@8hostname][:service|port]
     
    其中各项的含义如下。
    • 46:4代表IPv4,6代表IPv6。
    • protocol:传输协议,可以是TCP或UDP。
    • hostname:主机名称或者IP地址。
    • service:进程的服务名,例如NFS、SSH和FTP等。
    • port:系统中与服务对应的端口号。例如HTTP服务默认对应的端口号为80,SS日服务默认对应的端口号为22。了解了语法格式之后,再来看看范例的解答。
    [root@lewen ~]# lsof -i #<=查看所有进程。
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    10044 root    3u  IPv4  49337      0t0  TCP *:ssh (LISTEN)
    sshd    10044 root    4u  IPv6  49346      0t0  TCP *:ssh (LISTEN)
    master  10215 root   13u  IPv4  50008      0t0  TCP localhost:smtp (LISTEN)
    master  10215 root   14u  IPv6  50009      0t0  TCP localhost:smtp (LISTEN)
    sshd    10805 root    3u  IPv4  52326      0t0  TCP k8s-node1:ssh->10.0.0.1:10662 (ESTABLISHED)
     
     
    [root@lewen ~]# lsof -i tcp # <=显示所有tcp网培连接的进程信息
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    10044 root    3u  IPv4  49337      0t0  TCP *:ssh (LISTEN)
    sshd    10044 root    4u  IPv6  49346      0t0  TCP *:ssh (LISTEN)
    master  10215 root   13u  IPv4  50008      0t0  TCP localhost:smtp (LISTEN)
    master  10215 root   14u  IPv6  50009      0t0  TCP localhost:smtp (LISTEN)
    sshd    10805 root    3u  IPv4  52326      0t0  TCP k8s-node1:ssh->10.0.0.1:10662 (ESTABLISHED)
     
     
    [root@lewen ~]# lsof -i :22 #<=显示端口为22的进程,这条命今很常用
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    10044 root    3u  IPv4  49337      0t0  TCP *:ssh (LISTEN)
    sshd    10044 root    4u  IPv6  49346      0t0  TCP *:ssh (LISTEN)
    sshd    10805 root    3u  IPv4  52326      0t0  TCP k8s-node1:ssh->10.0.0.1:10662 (ESTABLISHED)
     
     
    [root@lewen ~]# lsof -i tcp:22 #<==星示同时满足TCP和端口为22的进程。
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    10044 root    3u  IPv4  49337      0t0  TCP *:ssh (LISTEN)
    sshd    10044 root    4u  IPv6  49346      0t0  TCP *:ssh (LISTEN)
    sshd    10805 root    3u  IPv4  52326      0t0  TCP k8s-node1:ssh->10.0.0.1:10662 (ESTABLISHED)

    范例11-5:显示指定用户使用的文件。

    [lewen@k8s-node1 ~]$ lsof -u lewen
    COMMAND   PID  USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
    bash    11081 lewen  cwd    DIR  253,0        62 33997200 /home/lewen
    bash    11081 lewen  rtd    DIR  253,0       224       64 /
    bash    11081 lewen  txt    REG  253,0    964608 50333656 /usr/bin/bash
    bash    11081 lewen  mem    REG  253,0     61624    34664 /usr/lib64/libnss_files-2.17.so
    bash    11081 lewen  mem    REG  253,0 106075056 50334298 /usr/lib/locale/locale-archive
    bash    11081 lewen  mem    REG  253,0   2151672    34646 /usr/lib64/libc-2.17.so
    bash    11081 lewen  mem    REG  253,0     19288    34652 /usr/lib64/libdl-2.17.so

    范例11-6:显示所有socket文件。

    [root@k8s-node1 ~]# lsof -U
    COMMAND     PID    USER   FD   TYPE             DEVICE SIZE/OFF  NODE NAME
    systemd       1    root   12u  unix 0xffff964f7656e800      0t0 25117 /run/systemd/private
    systemd       1    root   22u  unix 0xffff964f7656fc00      0t0 25169 /run/lvm/lvmpolld.socket
    systemd       1    root   23u  unix 0xffff9650714f8400      0t0  8992 /run/systemd/notify
    systemd       1    root   24u  unix 0xffff9650714f8000      0t0  8994 /run/systemd/cgroups-agent
  • 相关阅读:
    SQL 执行进展优化
    初识SQL 执行顺序
    前端模块化开发的价值(转)
    js 闭包之一
    js模块开发(一)
    简单说说call 与apply
    js 爱恨情仇说 this
    说说 js String
    $Ajax简单理解
    SQL-如何使用 MongoDB和PyMongo。
  • 原文地址:https://www.cnblogs.com/wenyule/p/12214152.html
Copyright © 2011-2022 走看看