1、lsof命令简介

lsof是list open files的简称,它的作用主要是列出系统中打开的文件,基本上linux系统中所有的对象都可以看作文件,lsof可以查看用户和进程操作了哪些文件,也可以查看系统中网络的使用情况,以及设备的信息。

在终端下输入lsof命令即可显示系统打开的文件,它访问核心内存和各种文件,需要root用户身份才能发挥其功能。# lsof

COMMAND    PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME

systemd      1         root  cwd       DIR                8,2      4096          2 /

systemd      1         root  rtd       DIR                8,2      4096          2 /

systemd      1         root  txt       REG                8,2   1612152    2893576 /usr/lib/systemd/systemd

systemd      1         root  mem       REG                8,2     20112    2888194 /usr/lib64/libuuid.so.1.3.0

systemd      1         root  mem       REG                8,2    261456    2888419 /usr/lib64/libblkid.so.1.1.0

systemd      1         root  mem       REG                8,2     90664    2887685 /usr/lib64/libz.so.1.2.7

systemd      1         root  mem       REG                8,2    157424    2888172 /usr/lib64/liblzma.so.5.2.2

......

直接运行lsof,会列出系统中所有打开的文件,每个文件一行,其中每列信息的含有如下:

COMMAND:进程名称

PID:进程ID

USER:进程运行的用户名

FD:表示文件描述符,如:cwd当前工作目录,mem内存映射文件,mmap内存映射设备,txt应用文本(代码和数据),其次数值表示应用程序的文件描述符,这是打开文件时返回的一个整数,u表示该文件处于读取和写入模式,®为只读,(w)为只写模式,大写W为对整个文件的写锁权限,初始打开一个应用程序时有具有三个文件描述符,从0到2分别表示标准输入,输出和错误输出,所以大多数应用程序打开的文件的PD都是从3开始的

TYPE:表示文件的类型,如,REG普通文件,DIR目录,CHR字符文件,BLK设备文件,UNIX为Unix套接字,FIFO先进先出队列,IPv4网际协议IP套接字

DEVICE:文件所在的设备

SIZE:文件的大小

NODE:索引节点,文件在磁盘的标识符

NAME:打开文件的名称

2、lsof查看文件和进程

lsof常用尝试列表:

lsof  filename 显示打开指定文件的所有进程

lsof -a 表示两个参数都必须满足时才显示结果

lsof -c string   显示COMMAND列中包含指定字符的进程所有打开的文件

lsof -u username  显示所属user进程打开的文件

lsof -g gid 显示归属gid的进程情况

lsof +d /DIR/ 显示目录下被进程打开的文件

lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长

lsof -d FD 显示指定文件描述符的进程

lsof -n 不将IP转换为hostname,缺省是不加上-n参数

lsof -i 用以显示符合条件的进程情况

lsof -i[46] [protocol][@hostname|hostaddr][:service|port]

46 --> IPv4 or IPv6

protocol --> TCP or UDP

hostname --> Internet host name

hostaddr --> IPv4地址

service --> /etc/service中的 service name (可以不只一个)

port --> 端口号 (可以不只一个)

1)列出某个进程打开的所有文件lsof -p 1149

2)列出某个用户打开的文件lsof -u root

3)列出所有不是某个用户打开的文件,也就是取反,在用户名前添加^符号lsof -u ^root

4)列出某个文件被哪些进程打开使用lsof /dev/null

5)列出访问某个目录的所有进程lsof +d /dev/

6)递归列出访问某个目录下所有进程lsof +D /var/

7)列出某个进程名使用的文件信息lsof -c dhcpd

3、lsof查看网络信息

lsof也可以查看网络信息,如查看某个端口的使用情况

1)列出所有的网络链接信息lsof -i

2)只列出某个协议类型的网络链接信息lsof -i TCP

3)查看某个端口的网络链接状态lsof -i :67

4)查看链接到某个主机的网络状态lsof -i @192.168.146.1

5)查看连接到某个主机的特定端口的网络状态lsof -i @192.168.146.1:80

6)列出当前主机监听的端口lsof -i -s TCP:LISTEN

-s P:S参数跟着两个字段,协议和状态,中间用冒号隔开,如上表示TCP协议的监听状态,也可以查看处于连接的TCP网络状态:lsof -i -s TCP:ESTABLISHED

实用的命令:lsof `which httpd`    #列出那个进程使用了apache的执行文件

lsof /dev/cdrom      #列出那个进程在使用光驱

lsof -u 1000         #查看UID为1000的用户使用的进程

lsof -i TCP@[url]  #查看哪个进程打开了TCP链接到主机的80端口

lsof -i tcp@ -r  #不断查看目前tfp链接的情况

4、通过lsof恢复删除的文件

通过lsof恢复已删除的文件,前提条件的是这个文件有程序正在使用,可以通过lsof /path/to/filename能查看到正在使用此文件的程序,下面我们以日志文件message为例实验下:

1)查看使用文件的实用程序lsof /var/log/messages

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME

abrt-watc  671 root    4r   REG    8,2   516027 1311595 /var/log/messages

rsyslogd  1148 root    6w   REG    8,2   516027 1311595 /var/log/messages

2)删除message文件rm -rf /var/log/messages

3)通过上面查看的进程ID我们在/proc目录下找到该进程的文件目录,然后通过FD,找到FD目录的文件编号,然后对文件进行恢复

如:上面PID为1148那我们先找到/proc目录下进程为1148的目录,然后cd到FD目录下,上面FD显示文件使用6w打开,表示在6文件中以锁的方式打开cd /proc/1148/fd

查看下6文件中的文件内容,是不是和之前删除的文件一样呢:tail -n 10 6

下面开始通过命令恢复:

cat /proc//1148/fd/6 >/var/log/messages

linux lsof查询正在运行的,linux lsof命令相关推荐

  1. oracle linux 版本 uek,在运行 Oracle Linux 7.1 UEK3 或 7.2 或者 RHEL 7.1 或 7.2 的系统上,RDMA 服务无法启动...

    在运行 Oracle Linux 7.1 UEK3 或 7.2 或者 RHEL 7.1 或 7.2 的系统上,RDMA 服务无法启动 错误号 20912503 问题: 在运行 Oracle Linux ...

  2. linux 1.0 如何运行,观点|Linux 1.0 之旅:回顾这一切的开始

    通过安装 SLS 1.05 展示了 Linux 内核在这 26 年间走过了多远. 我第一次安装 Linux 是在 1993 年.那时我跑的是 MS-DOS,但我真的很喜欢学校机房电脑的 Unix 系统 ...

  3. linux中mpich的运行线程,Linux下MPICH的安装与使用

    1.下载安装包mpich2-1.0.8p1.tar.gz,解压. 2.进入目录mpich2-1.0.8p1, cd mpich2-1.0.8p1 3.配置. ./configure 4.编译.make ...

  4. linux怎么用gcc运行程序设计,linux应用程序设计--GCC程序编译

    GCC程序编译 linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一 ...

  5. linux非图形界面运行vscode,linux无法启动vscode怎么办

    linux无法启动vscode? 是否正确安装.不然是无法运行的 安装Visual Studio Code 首先需要安装Ubuntu Make.Ubuntu Make存在Ubuntu 15.04资源库 ...

  6. linux下查询汇编指令手册,Linux命令大全

    awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linu ...

  7. linux下mvn的运行配置,Linux内网环境下使用Nexus配置Maven私有仓库

    一. 安装配置Nexus 1. 下载nexus 2. 解压:tar -zxf nexus-3.5.2-01-unix.tar.gz 3. 进入bin目录启动:./nexus run & 出现如 ...

  8. linux查看git是否运行,关于linux:使用脚本检查git分支是否领先于另一个

    我有branch1和branch2,我想要某种形式: git branch1 isahead branch2 这将显示branch1是否具有branch2没有的提交(并且可能还指定了那些提交). 我无 ...

  9. linux fedora14 u盘运行,Fedora Linux系统下挂载U盘和Windows盘

    前提是在mnt目录下,建立了F,D,U三个目录,还有就是sda,hda之分即串并口硬盘区别 [root@localhost yan]# vi /etc/fstab LABEL=/ / ext3 def ...

最新文章

  1. 26期20180601目录管理
  2. CSS复合选择器(后代选择器、子元素选择器、并集选择器、伪类选择器、:focus伪类选择器)
  3. oracle查询表的字段类型有哪些,oracle中查询表的信息,包括表名,字段名,字段类型,主键(精)...
  4. 微信小程序-页面跳转传值
  5. 如何使用 ClickHouse 每天玩转千亿数据,纯PPT干货
  6. python求最大素数_Python实现求最大公约数及判断素数的方法
  7. linux mysql 修改root密码_Mac下重置mysql的root密码
  8. MATLAB字符转数据
  9. 苦逼的程序员怎么发展
  10. 【算法刷题2】二叉树的后序遍历
  11. Spoonwep破解wep加密无线路由密码
  12. 7.hdfs工作流程及机制
  13. SQL Server 2005 在64位win7操作系统下的安装及问题总结
  14. flash声音播放-Sound
  15. lammps软件介绍与使用
  16. 数据库实体间一对多(多对一)、多对多关系处理
  17. 复合梯形公式C语言程序,求运用c++来实现复合梯形公式的代码
  18. android中如何打开指定卡上的数据连接开关,Android 代码控制手机数据网络的开关(5.0以上)...
  19. 使用Jupyter Notebook远程连接服务器
  20. 北京大学肖臻老师《区块链技术与应用》ETH笔记 - 5.0 ETH中GHOST协议篇

热门文章

  1. 用devc++表白_中山院表白墙丨电科大中山院的帅哥,不会走路吗?没事出来走两步给我瞧瞧...
  2. java 获取bean_spring如何获取bean的6种方法,你知道几个?
  3. CSS制作类似 Photoshop 模糊蒙版效果
  4. System.out.println()中的System,out,println 分别是什么?
  5. 加点JavaScript魔法
  6. 为啥打开桌面计算机很慢,为什么电脑开机很慢
  7. 远程文件拷贝(fastcopy为例)
  8. k8s动力节点的部署
  9. 计算机远程桌面在哪里打开,电脑远程桌面怎么打开,教你电脑远程桌面怎么打开...
  10. 启动魔兽war3关于FATAL ERROR!的问题