lsof之列出已打开的文件
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之列出已打开的文件的更多相关文章
- openfiles_(命令)查看已打开的文件列表
效果: 功能: 查看Windows系统的进程信息,包括进程打开了哪些文件 描述: 允许管理员列出系统上已打开的文件和文件夹或与其断开连接. 参数列表: /Disconnect 中断至少一个打开的文件的 ...
- Python Cookbook(第3版)中文版:15.18 传递已打开的文件给C扩展
15.18 传递已打开的文件给C扩展¶ 问题¶ 你在Python中有一个打开的文件对象,但是需要将它传给要使用这个文件的C扩展. 解决方案¶ 要将一个文件转换为一个整型的文件描述符,使用 PyFile ...
- 由已打开的文件读取数据---read
头文件:#include<unistd.h> 函数原型:ssize_t read(int fd,void *buf,size_t count); 参数说明:fd:文件描述符 buf:存放读 ...
- Linux 命令 - lsof: 列出打开的文件
lsof 是一个列出当前系统打开文件的工具. 命令格式 lsof [ -?abChlnNOPRstUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ + ...
- 通过某个进程号显示该进行打开的文件 lsof -p 1 11. 列出多个进程号对应的文件信息 lsof -p 123,456,789 5. 列出某个用户打开的文件信息 lsof -u username
linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用 lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录 3.网络文件系 ...
- linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用
lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录 3.网络文件系统的文件,4.字符设备文件 5.(函数)共享库 6.管道,命名管道 7.符号链 ...
- linux lsof 查看进程打开那些文件 或者 查看文件给那个进程使用
lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录 3.网络文件系统的文件,4.字符设备文件 5.(函数)共享库 6.管道,命名管道 7.符号链 ...
- UNIX环境编程学习笔记(5)——文件I/O之fcntl函数访问已打开文件的性质
lienhua342014-08-29 fcntl 函数可以改变已打开的文件的性质. #include <fcntl.h> int fcntl(int filedes, int cmd, ...
- lsof命令查看端口关联的文件
lsof命令查看端口关联的文件 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网 ...
随机推荐
- GitHub Universe 2021|MS Reactor 邀你共聚年度盛会
GitHub Universe 2021 将于2021年10月27-28日(PDT)在线直播,MS Reactor 将与 CSDN 合作进行转播,与你一同观看这场全球开发者盛会. 关于 GitHub ...
- WiFi模块选型参考
经常会碰到一些关于wifi模块的咨询,很多刚接触wifi模块的设计人员或者用户,只知道提wifi模块,很难提具体的模块要求!希望通过文章的介绍,会做到有的放矢!咨询时一定要搞清楚自己希望使用什么主芯片 ...
- 因为一个小小的Integer问题导致阿里一面没过,遗憾!
面试题:new Integer(112)和Integer.valueOf(112)的区别 面试官考察点猜想 这道题,考察的是对Integer这个对象原理的理解,关于这道题的变体有很多,我们会一一进行分 ...
- 你知道怎么使用Google两步验证保护账户安全吗?
目录 为什么我们需要使用它? 对有些人来说,盗取密码比您想象的更简单 什么是Google两步验证? 多一道安全防线 什么是Google Authenticator ? 使用Google两步验证的好处 ...
- Kubernetes Deployment 源码分析(一)
概述Deployment 基础创建 DeploymentReplicaSet滚动更新失败回滚历史版本回滚其他特性小结 概述 Deployment 是最常用的 Kubernetes 原生 Workloa ...
- 你说说RPC的一个请求的流程是怎么样的?
前言 面试的时候经常被问到RPC相关的问题,例如:你说说RPC实现原理.让你实现一个RPC框架应该考虑哪些地方.RPC框架基础上发起一个请求是怎样一个流程等等.所以这次我就总结一波RPC的相关知识点, ...
- Labview一个循环中放两个事件结构会导致前面板锁定的问题
建议在同一个循环中,只放置一个事件结构.此时,当一个事件发生时,事件结构将对事件进行处理,然后继续循环,事件结构再等待下一个事件发生. 如在同一个循环中放置两个事件结构,只有在两个事件结构都处理了事件 ...
- loadrunner奇怪问题解决:TPS中有Action_Transaction 和 vuser_init_Transaction
TPS图里多出两条曲线:Action_Transaction 和 vuser_init_Transaction 如下图: 解决方法: Runtime-Settings-Miscellaneous--A ...
- 解决虚拟机安装linux系统无法全屏问题 & vmtools安装
修改设置 1) 如下图右单击虚拟机名,选择[settings-],调出虚拟机设置界面. 2) 在设置界面选择[hardware]->[CD/DVD2(IDE)]->[Connection] ...
- asp.net中挺高性能的24种方法
那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置 ...