查看 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去索引查表得到文件表指 ...
随机推荐
- python 生成器 yield语句
生成器就是一个返回迭代器(iterator)的函数. 包含了 yield 的函数,就是一个生成器. 生成器每使用yield语句产生一个值,函数就会被冻结(暂停执行),被唤醒后(即再次调用)接着上次执行 ...
- vue基础中的注意事项,以及一些学习心得
vue中你不知道的东西.以及注意事项 v-html 使用 v-html的时候该指令中的值会覆盖绑定标签中原有的值,且使用v-html的时候不要将他设置为给用户提供内容的地方,因为v-html很容易被X ...
- dfs - 走过的标记取消
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...
- 继承Exception⭐⭐
public class ECOrderException : Exception { //第一种类型: throw new ECOrderException { ErrorCode = " ...
- 关于后缀间$LCP$的一些公式的证明
目录 关于\(LCP\)有如下两个公式: \(LCP~Lemma\) 的证明: \(LCP~Theorem\) 的证明: 关于\(LCP\)有如下两个公式: \(LCP~Lemma:\) 对任意 \( ...
- Spring中bean的实例化过程
1.从缓存中.优先从一级缓存中拿,有则返回. 如果没有,则从二级缓存中获取,有则返回. 如果二级缓存中拿不到,则从三级缓存中拿,能拿到,则从三级缓存中删除,移到二级缓存. 如果三级缓存也没有,则返回n ...
- JVM中的GC算法,JVM参数,垃圾收集器分类
一.在JVM中什么是垃圾?如何判断一个对象是否可被回收?哪些对象可以作为GC Roots的根 垃圾就是在内存中已经不再被使用到的空间就是垃圾. 1.引用计数法: 内部使用一个计数器,当有对象被引用+1 ...
- Centos7.6部署k8s v1.16.4高可用集群(主备模式)
一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...
- spring boot 整合 swagger2
swagger2为了更好的管理api文档接口 swagger构建的api文档如下,清晰,避免了手写api诸多痛点 一,添加依赖 <!--swagger2的官方依赖--> <depen ...
- LeetCode 858 镜面反射
题目 有一个特殊的正方形房间,每面墙上都有一面镜子.除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2. 正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接 ...