s11.1 查看进程打开的文件

功能说明

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

原文地址:https://www.cnblogs.com/wenyule/p/10589019.html

时间: 2024-10-02 00:25:30

s11.1 查看进程打开的文件的相关文章

s11.1 lsof:查看进程打开的文件

功能说明 lsof 全名为list open files,也就是列举系统中已经被打开的文件,通过lsof命令,就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件. [语法格式] lsof    [option] lsof    [选项] 参数选项         解释说明 -c<进程名>     显示指定的进程名所打开的文件 -p<进程号>     显示指定的进程号所打开的文件 -i            通过监听指定的协议.端-和主机等信息,显示符合条件的进程

【讲清楚,说明白!】干货--使用lsof恢复进程打开的文件

目录:(一)lsof恢复文件(二)lsof的其他用法 (一)lsof恢复文件(1.1)如果在系统中有某个进程打开了一个文件,但是这个文件被我们误删除,此时我们希望将误删除的文件恢复.如果某个被误删除的文件所对应的进程没有关,这个文件就可以恢复.(1.2)在Linux中的FD文件描述符与windows中的文件句柄是同样的一个概念,一个进程打开一个文件就会产生相应的文件描述符,如果这个进程将文件关闭了,那么这个文件描述符或文件句柄就会跟着释放掉了.(1.3)我们直接执行lsof命令,可以看到如下的信

查看一个进程打开的文件都有哪些

step 1 pfile pid step 2 根据 inode number 查找 比如 bash-2.05# pfiles 26053 26053: python Current rlimit: 256 file descriptors 0: S_IFCHR mode:0620 dev:32,0 ino:3982 uid:0 gid:7 rdev:24,2 O_RDWR|O_NOCTTY|O_LARGEFILE 1: S_IFCHR mode:0620 dev:32,0 ino:3982 u

lsof恢复进程打开的文件

工作原理:进程每打开文件都会生成一个文件句柄FD来标识一个文件,进程打开的文件如果没有被释放,可以通过文件句柄FD来恢复删除的文件 注意:适合恢复进程一直在打开一个文件,例如日志文件,如果配置文件进程启动的时候读取马上释放掉该文件的句柄通过这种方式是恢复不了的:同时如果打开的文件被删除掉,同时把服务重启了,服务被重启这个文件句柄也会被释放掉,通过lsof方式也是无法恢复的: 安装:yum install lsof -y 查看打开/var/log/messages文件的进程 这里打开/var/lo

【转】Linux下查看进程打开的文件句柄数

---查看系统默认的最大文件句柄数,系统默认是1024 # ulimit -n 1024 ----查看当前进程打开了多少句柄数 # lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more 131 24204 57 24244 57 24231  ........ 其中第一列是打开的句柄数,第二列是进程ID. 可以根据ID号来查看进程名. # ps aef|grep 24204 nginx 24204 24162 99 16:15 ? 00:24:2

openfiles_(命令)查看已打开的文件列表

效果: 功能: 查看Windows系统的进程信息,包括进程打开了哪些文件 描述: 允许管理员列出系统上已打开的文件和文件夹或与其断开连接. 参数列表: /Disconnect 中断至少一个打开的文件的连接. /Query 显示所有从本地或从共享文件夹打开的文件. /Local 启用 / 禁用本地打开文件的显示. 原文地址:https://www.cnblogs.com/feiyucha/p/9932050.html

Heic图片格式怎么查看 如何打开heic文件

Windows是常用的操作系统,可是有一个问题就是,Windows10也无法查看HEIC图片,HEIC是×××出的新的图像格式,这种格式在不损害照片画质的前提下,使得体积压缩至原来的一半!但是如果想要在PC端查看或者处理HEIC图片,我们就需要花时间去找支持该格式的看图软件或转换图片格式方法了,那Windows如何打开heic文件呢? 方法/步骤:1.今天要说的图片转换器支持HEIC文件转JPG.PNG等格式图片.不仅支持单张转换,也可以批量转换.转换无损失: 2.首先双击打开电脑上安装的转换器

查询进程打开的文件[转]

fuser 有的时候我想要知道我的程序到底在这次启动过程中开启了多少文件,可以利用 fuser 来观察啦! 举例来说,你如果卸载时发现系统通知:『 device is busy 』,那表示这个文件系统正在忙碌中, 表示有某支程序有利用到该文件系统啦!那么你就可以利用 fuser 来追踪罗!fuser 语法有点像这样: [[email protected] ~]# fuser [-umv] [-k [i] [-signal]] file/dir 选项与参数: -u :除了程序的 PID 之外,同时

Unix 线程共享创建进程打开的文件资源(1)

执行环境:Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 1. 测试代码 : a.c 1 #include <fcntl.h> 2 #include <unistd.h> 3 #include <stdio.h> 4 #include <pthread.h> 5 #include <strin