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. freemarker中使用String字符串作为模板

    在日常开发中,我们有时候需要发送短信.邮件等通知,但是这些通知的内容通常都是动态的,而且可能会发生变动,为了程序的灵活性,我们通常会将通知的内容配置在页面上,然后后台通过渲染这些模板,来获取具体的内容 ...

  2. 方阵里面的dp

    打了一场luogu的信心赛,惊讶地发现我不会T2,感觉像这样在矩阵里面的dp看起来很套路的样子,但是仔细想想还是有很多需要注意的细节. 又想到之前貌似也考过一些类似的题目 然而我并没有改 ,于是打算补 ...

  3. c语言编程基础入门必备知识

    数据类型 基本数据类型 类型名称说明char字符类型存放字符的ASCII码int整型存放有符号整数short短整型存放有符号整数long长整型存放有符号整数long long存放有符号整数float单 ...

  4. 21.10.12 test

    题目 **WOJ5110 ** 到 WOJ5113 校内自测没开捆绑,于是输出 -1 和 n! 的程序拿到了高分,我的得分也比期望得分略有提升 T1 problem a \(\color{red}{2 ...

  5. 斐波那契数列 牛客网 剑指Offer

    斐波那契数列 牛客网 剑指Offer 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 class Solution: ...

  6. C# StringBuilder和string

    StringBuilder和string 1.string是引用类型还是值类型 MSDN官方说string是引用类型: 引用类型:引用分配栈内存,引用类型本身的数据存储在堆中: 值类型:在函数中创建, ...

  7. SpringCloud概念

    SpringCloud概述 1.SpringCloud是什么? 官方解释:  官网: https://spring.io/projects/spring-cloud/  SpringCloud是一系列 ...

  8. 跟着老猫来搞GO,基础进阶

    回顾一下上一篇博客,主要是和大家分享了GO语言的基础语法,其中包含变量定义,基本类型,条件语句,循环语句.那本篇呢就开始和大家同步一下GO语言基础的进阶. 函数的定义 上次其实在很多的DEMO中已经写 ...

  9. Linux ns 5. IPC Namespace 详解

    文章目录 1. 简介 2. 源码分析 2.1 copy_ipcs() 2.2 ipcget() 2.3 ipc_check_perms() 2.4 相关系统调用 参考文档: 1. 简介 进程间通讯的机 ...

  10. string类运用:特殊的翻译

    特殊的翻译 小明的工作是对一串英语字符进行特殊的翻译:当出现连续且相同的小写字母时,须替换成该字母的大写形式,在大写字母的后面紧跟该小写字母此次连续出现的个数:与此同时,把连续的小写字母串的左侧和右侧 ...