lsof命令常用解析

Linux中常用 lsof 来查看文件调用进程等相关信息,也可用来查看活跃的进程信息和端口监听进程信息等

1. lsof 命令介绍

NAME
lsof - list open files 用法
lsof [options] [filename] 常用选项
-c 显示指定进程现在正在打开的文件
-p 显示指定进程号现在正在打开的文件
-g 显示指定gid号进程正在打开的文件
-u 显示指定用户名启动的进程打开的文件
+d 显示指定目录下被进程打开的文件(不包含子目录)
+D 显示指定目录下被进程打开的文件(包含子目录)
-d 显示指定fd文件描述符的进程
-i [46][proto][@host|addr][:svc_list|port_list]按以上条件获取进程信息
[ipv4|ipv6][tcp|udp][@hostname|ipaddr][/etc/services定义的服务|服务端口port]
-U : 获取UNIX套接口地址
-t : 仅获取进程ID
-l : 在输出显示用户ID而不是用户名

2. lsof 常见用法

    # 显示系统活跃进程打开的文件
lsof # 显示调用/var/log/messages文件的进程
lsof /var/log/messages # 显示crond进程打开的文件
lsof -c crond # 显示进程号为1328的进程打开的文件
lsof -p 1328 # 显示gid号为1的进程打开的文件
lsof -g 1 # 显示用户root启用的进程打开的文件
lsof -u root # 显示/var/log目录下被进程打开的文件
lsof +d /var/log/ #(不包含子目录)
lsof +D /var/log/ #(包含子目录) # 显示文件描述符fd为4的进程打开的文件
lsof -d 4 # 通过[46][proto][@host|addr][:svc_list|port_list]条件匹配进程信息输出
lsof -i tcp:22

3. lsof使用实例

  生产实例:Web服务器磁盘满故障深入解析

模拟测试环境:
# 安装httpd
yum install httpd -y # 修改配置文件使日志内容指向/app/logs/access_log
sed -i '/CustomLog logs\/access_log common/ aCustomLog /app/logs/access_log common' /etc/httpd/conf/httpd.conf # 模拟磁盘/dev/sdc,注入80K的空间
dd if=/dev/zero of=/dev/sdc bs=8K count=10
# 格式化模拟磁盘
mkfs.ext4 /dev/sdc
y # 创建日志目录并将/dev/sdc挂载上去
mkdir -p /app/logs
mount -o loop /dev/sdc /app/logs
df -h # 重启httpd服务使其重新加载配置文件
/etc/init.d/httpd restart # 循环语句访问httpd服务使其日志空间写满
for n in `seq 10000`;do curl 127.0.0.1 &>/dev/null;done # 查看磁盘使用情况(/dev/sdc使用率达99%即可)
df -h # 删除日志文件/app/logs/access_log
rm -f /app/logs/access_log
df -h # 发现磁盘使用率没有降下来
lsof |grep /app/logs # 发现虽然文件已经被删除了,但是httpd进程仍旧在调用/app/logs/access_log文件,系统空间未释放 解决思路:删除日志文件磁盘空间没有降下来的原因是因为系统中httpd进程仍旧在调用access_log文件
根据原理,我们可以考虑清空/app/logs/access_log文件里的内容以解决该问题
若已经删除了/app/logs/access_log文件,则可以通过重启httpd服务以释放磁盘空间 解决方法1:清空被进程调用的文件内容
命令:>/app/logs/access_log && df -h 解决方法2:删除/app/logs/access_log,并重启httpd服务
命令:rm -f /app/logs/access_log && /etc/init.d/httpd restart && df -h
yum install httpd -y \
&& sed -i '/CustomLog logs\/access_log common/ aCustomLog /app/logs/access_log common' /etc/httpd/conf/httpd.conf \
&& dd if=/dev/zero of=/dev/sdc bs=8K count=10 \
&& mkfs.ext4 /dev/sdc
y mkdir -p /app/logs \
&& mount -o loop /dev/sdc /app/logs \
&& df -h \
&& /etc/init.d/httpd restart \
&& for n in `seq 10000`;do curl 127.0.0.1 &>/dev/null;done \
&& df -h \
&& rm -f /app/logs/access_log \
&& df -h \
&& lsof |grep /app/logs

模拟测试环境脚本

 

lsof之列出已打开的文件的更多相关文章

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

    效果: 功能: 查看Windows系统的进程信息,包括进程打开了哪些文件 描述: 允许管理员列出系统上已打开的文件和文件夹或与其断开连接. 参数列表: /Disconnect 中断至少一个打开的文件的 ...

  2. Python Cookbook(第3版)中文版:15.18 传递已打开的文件给C扩展

    15.18 传递已打开的文件给C扩展¶ 问题¶ 你在Python中有一个打开的文件对象,但是需要将它传给要使用这个文件的C扩展. 解决方案¶ 要将一个文件转换为一个整型的文件描述符,使用 PyFile ...

  3. 由已打开的文件读取数据---read

    头文件:#include<unistd.h> 函数原型:ssize_t read(int fd,void *buf,size_t count); 参数说明:fd:文件描述符 buf:存放读 ...

  4. Linux 命令 - lsof: 列出打开的文件

    lsof 是一个列出当前系统打开文件的工具. 命令格式 lsof  [  -?abChlnNOPRstUvVX  ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ + ...

  5. 通过某个进程号显示该进行打开的文件 lsof -p 1 11. 列出多个进程号对应的文件信息 lsof -p 123,456,789 5. 列出某个用户打开的文件信息 lsof -u username

    linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用 lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录  3.网络文件系 ...

  6. linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用

    lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录  3.网络文件系统的文件,4.字符设备文件  5.(函数)共享库  6.管道,命名管道 7.符号链 ...

  7. linux lsof 查看进程打开那些文件 或者 查看文件给那个进程使用

    lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录  3.网络文件系统的文件,4.字符设备文件  5.(函数)共享库  6.管道,命名管道 7.符号链 ...

  8. UNIX环境编程学习笔记(5)——文件I/O之fcntl函数访问已打开文件的性质

    lienhua342014-08-29 fcntl 函数可以改变已打开的文件的性质. #include <fcntl.h> int fcntl(int filedes, int cmd, ...

  9. lsof命令查看端口关联的文件

    lsof命令查看端口关联的文件 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网 ...

随机推荐

  1. websocket入门案例(echo)

    websocket是用来干什么的,具体的请自行百度. 本文实现一个简单的websocket的入门小例子,实现客户端发送一句换,服务器端返回.即一个简单的交互. 一.服务器端的实现 1.创建一个类实现S ...

  2. 在Vue前端项目中,附件展示的自定义组件开发

    在Vue前端界面中,自定义组件很重要,也很方便,我们一般是把一些通用的界面模块进行拆分,创建自己的自定义组件,这样操作可以大大降低页面的代码量,以及提高功能模块的开发效率,本篇随笔继续介绍在Vue&a ...

  3. [源码解析] Pytorch 如何实现后向传播 (3)---- 引擎动态逻辑

    [源码解析] Pytorch 如何实现后向传播 (3)---- 引擎动态逻辑 目录 [源码解析] Pytorch 如何实现后向传播 (3)---- 引擎动态逻辑 0x00 摘要 0x01 前文回顾 0 ...

  4. VCS常用仿真选项开关及步骤总结

    转自:https://blog.csdn.net/bcs_01/article/details/79803304 转自:https://blog.csdn.net/wonder_coole/artic ...

  5. clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)

    clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused) 关闭防火墙,可以连, ...

  6. fiddler 手机+浏览器 抓包

    用fiddler对手机上的程序进行抓包   前提: 1.必须确保安装fiddler的电脑和手机在同一个wifi环境下 备注:如果电脑用的是台式机,可以安装一个随身wifi,来确保台式机和手机在同一wi ...

  7. MQ限流应用

    业务背景:系统中需要发送邮件给用户!实现是javamail发送 问题:某天,发现有些用户并未收到邮件排查: 1,登录发件箱,发现如下图:大量邮件发送失败,大部分是发送频率过高导致邮箱外发功能被限制 3 ...

  8. Python 官方研讨会:彻底移除 GIL 真的可行么?

    作者:Łukasz Langa 译者:豌豆花下猫,来源:Python猫 原文:https://lukasz.langa.pl/5d044f91-49c1-4170-aed1-62b6763e6ad0 ...

  9. 9组-Alpha冲刺-2/6

    一.基本情况 队名:不行就摆了吧 组长博客:https://www.cnblogs.com/Microsoft-hc/p/15534079.html 小组人数: 8 二.冲刺概况汇报 谢小龙 过去两天 ...

  10. Salesforce Consumer Goods Cloud 浅谈篇二之门店产品促销的配置

    本篇参考:https://documentation.b2c.commercecloud.salesforce.com/DOC1/index.jsp?topic=%2Fcom.demandware.d ...