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环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网 ...
随机推荐
- spring cache整合redis
在项目中,我们经常需要将一些常用的数据使用缓存起来,避免频繁的查询数据库造成效率低下.spring 为我们提供了一套基于注解的缓存实现,方便我们实际的开发.我们可以扩展spring的cache接口以达 ...
- USB OTG原理和 ID 检测原理
OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了 电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机 ...
- 确定两串乱序同构 牛客网 程序员面试金典 C++ Python
确定两串乱序同构 牛客网 程序员面试金典 C++ Python 题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串中 ...
- HTML基础-3
图像标签(<img>)和源属性(Src) 在 HTML 中,图像由 <img> 标签定义. <img> 是空标签,意思是说,它只包含属性,并且没有闭合标签. 要在页 ...
- nodejs:使用puppeteer在服务器中构建一个获取电影电视剧剧集的接口
首先我们看下数据来源: 来源于这个网站:https://z1.m1907.cn/ 可以说这个网站上能找到很多你想看的很多电影或电视剧,最重要的是很多电影电视剧在别的网站是收费的,但是在这里看是免费的, ...
- 《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)
1.简介 我们在实际工作中,有可能遇到有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据.网页上日历控件一般,是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期.这 ...
- robot_framewok自动化测试--(9)连接并操作 MySql 数据库
连接并操作 MySql 数据库 1.mysql数据库 1.1安装mysql数据库 请参考我的另一篇文章:MYSQL5.7下载安装图文教程 1.2.准备测试数据 请参考我的另一篇文章:Mysql基础教程 ...
- vue脚手架项目如何在控制台打印组件实例
需要在浏览器上安装拓展程序vue开发工具,安装好后在控制台上输入$vm即可打印vue组件实例对象. Vue2.3开发工具都有,可自行下载 百度网盘链接提取码:si5l
- sm2加密
import java.math.BigInteger; import java.security.NoSuchAlgorithmException; import java.security.Sec ...
- C#与dotNET项目想要另存为一个新项目sln文件丢了怎么办
如下图所示,我想要另存一个工程,把 V4.4整个的项目另存为V4.5,我可以把解决方案文件(.sln)改名字,但是我没法把文件夹改名字,改了打开sln就说找不到. 很简单的一个思路是反正sln是多余的 ...