查看 Linux 中文件打开情况(lsof)
前言
Linux 下有哪些文件
- 普通文件
- 目录
- 符号链接
- 面向块的设备文件
- 面向字符的设备文件
- 管道和命名管道
- 套接字
lsof 命令实用用法介绍
查看当前打开的所有文件
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vi hyb 7u REG , /home/hyb/..txt.swp
lsof显示的结果,从左往右分别代表:打开该文件的程序名,进程id,用户,文件描述符,文件类型,设备,大小,iNode号,文件名。
列出被删除但占用空间的文件
$ lsof |grep deleted
Xorg root 125u REG , /memfd:xshmfence (deleted)
Xorg root 126u REG , /memfd:xshmfence (deleted)
Xorg root 129u REG , /memfd:xshmfence (deleted)
可以看到这些被删除的但仍然被打开文件,最后查找出来的时候,会被标记deleted。这个时候就可以根据实际情况分析,到底哪些文件可能过大但是却被删除了,导致空间仍然占满。
lsof | grep deleted | awk '{print $2}' | xargs -I {} kill - {}
恢复打开但被删除的文件
查看当前文件被哪些进程打开
查看某个目录文件被打开情况
查看当前进程打开了哪些文件
$ lsof -c hello
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
hello hyb cwd DIR , /home/hyb/workspaces/c
hello hyb rtd DIR , /
hello hyb txt REG , /home/hyb/workspaces/c/hello
hello hyb mem REG , /lib/x86_64-linux-gnu/libc-2.23.so
hello hyb mem REG , /lib/x86_64-linux-gnu/ld-2.23.so
hello hyb 0u CHR , 0t0 /dev/pts/
hello hyb 1u CHR , 0t0 /dev/pts/
hello hyb 2u CHR , 0t0 /dev/pts/
我们可以从中看到,至少它用到了/lib/x86_64-linux-gnu/libc-2.23.so以及hello文件。
$ lsof -p
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
hello hyb cwd DIR , /home/hyb/workspaces/c
hello hyb rtd DIR , /
hello hyb txt REG , /home/hyb/workspaces/c/hello
hello hyb mem REG , /lib/x86_64-linux-gnu/libc-2.23.so
hello hyb mem REG , /lib/x86_64-linux-gnu/ld-2.23.so
hello hyb 0u CHR , 0t0 /dev/pts/
hello hyb 1u CHR , 0t0 /dev/pts/
hello hyb 2u CHR , 0t0 /dev/pts/
当然这里还有一种方式,就是利用proc文件系统,首先找到hello进程的进程id
$ ps -ef|grep hello
hyb : pts/ :: ./hello
hyb : pts/ :: grep --color=auto hello
$ ls -l /proc//fd
lrwx------ hyb hyb 3月 : -> /dev/pts/
lrwx------ hyb hyb 3月 : -> /dev/pts/
lrwx------ hyb hyb 3月 : -> /dev/pts/
这种方式能够过滤很多信息,因为它只列出了该进程实际打开的,这里它只打开了1,2,3,即标准输入,标准输出和标准错误。
查看某个端口被占用情况
$ lsof -i:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser hyb 6u IPv6 0t0 TCP *: (LISTEN)
redis-ser hyb 7u IPv4 0t0 TCP *: (LISTEN)
这里可以看到redis-ser进程占用了6379端口。
查看所有的TCP/UDP连接
$ lsof -i tcp
ava hyb 6u IPv6 0t0 TCP localhost: (LISTEN)
java hyb 22u IPv6 0t0 TCP localhost:->localhost: (ESTABLISHED)
java hyb 23u IPv6 0t0 TCP localhost:->localhost: (ESTABLISHED)
当然我们也可以使用netstat命令。
$ netstat -anp|grep
这里的-i参数可以跟多种条件:
- -i 4 #ipv4地址
- -i 6 #ipv6地址
- -i tcp #tcp连接
- -i :3306 #端口
- -i @ip #ip地址
查看某个用户打开了哪些文件
$ lsof -u hyb
(内容太多,省略)
列出除了某个进程或某个用户打开的文件
lsof -p ^ #列出除进程id为1的进程以外打开的文件
lsof -u ^root #列出除root用户以外打开的文件
总结
lsof -p -i tcp
lsof参数很多,具体的可以使用man命令查看,但是对于我们来说,知道这些实用的基本足够
查看 Linux 中文件打开情况(lsof)的更多相关文章
- LSOF查看linux中文件打开情况
如何查看linux中文件打开情况 前言 我们都知道,在linux下,“一切皆文件”,因此有时候查看文件的打开情况,就显得格外重要,而这里有一个命令能够在这件事上很好的帮助我们-它就是lsof. lin ...
- 如何查看linux中文件打开情况
前言 我们都知道,在linux下,“一切皆文件”,因此有时候查看文件的打开情况,就显得格外重要,而这里有一个命令能够在这件事上很好的帮助我们-它就是lsof. linux下有哪些文件 在介绍lsof命 ...
- ulimit 命令详解 socket查看linux最大文件打开数
ulimit 命令详解 Linux对于每个用户,系统限制其最大进程数.为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数 可以用ulimit -a 来显示当前的各种用户进程限 ...
- 在本机eclipse中创建maven项目,查看linux中hadoop下的文件、在本机搭建hadoop环境
注意 第一次建立maven项目时需要在联网情况下,因为他会自动下载一些东西,不然突然终止 需要手动删除断网前建立的文件 在eclipse里新建maven项目步骤 直接新建maven项目出了错 ...
- 查看linux中某个端口(port)是否被占用(netstat,lsof)
查看linux中某个端口(port)是否被占用(netstat,lsof) netstat命令可以显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组等信息.命令格式:netstat [ ...
- 查看linux中的TCP连接数【转】
转自:http://blog.csdn.net/he_jian1/article/details/40787269 查看linux中的TCP连接数 本文章已收录于: 计算机网络知识库 分类: ...
- 如何正确查看Linux机器内存使用情况
如何正确查看Linux机器内存使用情况 背景 只要工作上涉及到Linux机器,基本上都会有这样一个需求,查看内存使用情况,但是怎么看才正确呢?之前使用的是top命令,一直存在一个误区. 为什么top命 ...
- 如何查看 Linux 中所有正在运行的服务
有许多方法和工具可以查看 Linux 中所有正在运行的服务.大多数管理员会在 System V(SysV)初始化系统中使用 service service-name status 或 /etc/ini ...
- linux中文件IO
一. linux常用文件IO接口 1.1. 文件描述符 1.1.1. 文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指 ...
随机推荐
- redis订阅发布简单实现
适用场景 业务流程遇到大量异步操作,并且业务不是很复杂 业务的健壮型要求不高 对即时场景要求不高 原理介绍 redis官网文档:https://redis.io/topics/notification ...
- 递推 dp - 求有多少个序列符合题意
题目描述 小美有一个由n个元素组成的序列{a1,a2,a3,...,an},她想知道其中有多少个子序列{ap1,ap2,...,apm}(1 ≤ m ≤ n, 1 ≤ p1 < p2 , ...
- Python判断一个字符串是否包含某个指定的字符串
成员操作符 in str = "string test string test" find1 = "str" find2 = "test" ...
- idea 忽略不需要提交的文件
1.打开git bash界面,进入到某个项目的根目录,执行下面命令 touch .gitignore 此时,再该项目的根目录里,会创建.gitignore文本,打开该文本,编辑需要忽略的文件(编辑规则 ...
- 由Kaggle竞赛wiki文章流量预测引发的pandas内存优化过程分享
pandas内存优化分享 缘由 最近在做Kaggle上的wiki文章流量预测项目,这里由于个人电脑配置问题,我一直都是用的Kaggle的kernel,但是我们知道kernel的内存限制是16G,如下: ...
- Splash简单应用
jd->iphone import requests from lxml import etree # search_key = 'iphone' jd_url = "https:// ...
- RocketMQ 解决 No route info of this topic 异常步骤
原文地址:https://blog.csdn.net/chenaima1314/article/details/79403113 rocketmq运行时提示 No route info of this ...
- python,finally的应用
脚本执行过程中可能因为被测试的环境有改变导致中间某一部分无法继续执行下去 可以在最后一行加上finally来执行最后一句脚本 比如 最后执行退出 表示 无论中间过程失败还是成功,最终都会执行退出操作 ...
- 从头开始,如何配置一部纯净好用的Windows
emmm,原因是酱紫的, 鉴于许许多多的人问过我怎么重装系统,装出来的系统干净没有广告什么的, 还有问为什么我的电脑这么卡,是不是要重装系统or更换设备的, 啊,更换设备的土豪请随意
- 面试系列-面试官:你能给我解释一下javascript中的this吗?
一.前言 关于javascript中的this对象,可能已经被大家说烂了. 即使是这样,我依然决定将这篇文章给水出来.毕竟全国在新型肺炎的影响下,公司没法正常复工. 除了刷刷手机,还是要适当的学习一下 ...