fuser

有的时候我想要知道我的程序到底在这次启动过程中开启了多少文件,可以利用 fuser 来观察啦! 举例来说,你如果卸载时发现系统通知:『 device is busy 』,那表示这个文件系统正在忙碌中, 表示有某支程序有利用到该文件系统啦!那么你就可以利用 fuser 来追踪罗!fuser 语法有点像这样:

[root@www ~]# fuser [-umv] [-k [i] [-signal]] file/dir
选项与参数:
-u  :除了程序的 PID 之外,同时列出该程序的拥有者;
-m  :后面接的那个档名会主动的上提到该文件系统的最顶层,对 umount 不成功很有效!
-v  :可以列出每个文件与程序还有命令的完整相关性!
-k  :找出使用该文件/目录的 PID ,并试图以 SIGKILL 这个讯号给予该 PID;
-i  :必须与 -k 配合,在删除 PID 之前会先询问使用者意愿!
-signal:例如 -1 -15 等等,若不加的话,默认是 SIGKILL (-9) 罗!范例一:找出目前所在目录的使用 PID/所属帐号/权限 为何?
[root@www ~]# fuser -uv .USER        PID ACCESS COMMAND
.:                   root      20639 ..c.. (root)bash

看到输出的结果没?他说『.』底下有个 PID 为 20639 的程序,该程序属於 root 且命令为 bash 。 比较有趣的是那个 ACCESS 的项目,那个项目代表的意义为:

  • c :此程序在当前的目录下(非次目录);
  • e :可被触发为运行状态;
  • f :是一个被开启的文件;
  • r :代表顶层目录 (root directory);
  • F :该文件被开启了,不过在等待回应中;
  • m :可能为分享的动态函式库;

那如果你想要查阅某个文件系统底下有多少程序正在占用该文件系统时,那个 -m 的选项就很有帮助了! 鸟哥的测试主机仅有分割出 /, /boot, /home ,所以无法进行测试。不过好在还有个 /proc 的虚拟文件系统, 让我们来了解一下这个 /proc 的文件系统有多少程序正在利用他吧!

范例二:找到所有使用到 /proc 这个文件系统的程序吧!
[root@www ~]# fuser -uv /proc
# 不会显示任何数据,因为没有任何程序会去使用 /proc 这个目录啊!
# 会被用到的是 /proc 底下的文件啦!所以你应该要这样做:[root@www ~]# fuser -mvu /procUSER        PID ACCESS COMMAND
/proc:               root       4289 f.... (root)klogdroot       4555 f.... (root)acpidhaldaemon  4758 f.... (haldaemon)haldroot       4977 F.... (root)Xorg
# 有这几支程序在进行 /proc 文件系统的存取喔!这样清楚了吗?

既然可以针对整个文件系统,那么能不能仅针对单一文件啊?当然可以罗!看一下底下的案例先:

范例三:找到 /var 底下属於 FIFO 类型的文件,并且找出存取该文件的程序
[root@www ~]# find /var -type p
/var/gdm/.gdmfifo     <==我们针对这玩意即可!
/var/run/autofs.fifo-misc
/var/run/autofs.fifo-net[root@www ~]# fuser -uv /var/gdm/.gdmfifoUSER        PID ACCESS COMMAND
/var/gdm/.gdmfifo:   root       4892 F.... (root)gdm-binary范例四:同范例三,但试图删除该 PID?且『不要』删除喔!
[root@www ~]# fuser -ki /var/gdm/.gdmfifo
/var/gdm/.gdmfifo:    4892
Kill process 4892 ? (y/N) n

如何?很有趣的一个命令吧!透过这个 fuser 我们可以找出使用该文件、目录的程序,藉以观察的啦! 他的重点与 ps, pstree 不同。 fuser 可以让我们了解到某个文件 (或文件系统) 目前正在被哪些程序所利用!

lsof

相对於 fuser 是由文件或者装置去找出使用该文件或装置的程序,反过来说, 如何查出某个程序开启或者使用的文件与装置呢?呼呼!那就是使用 lsof 罗~

[root@www ~]# lsof [-aUu] [+d]
选项与参数:
-a  :多项数据需要『同时成立』才显示出结果时!
-U  :仅列出 Unix like 系统的 socket 文件类型;
-u  :后面接 username,列出该使用者相关程序所开启的文件;
+d  :后面接目录,亦即找出某个目录底下已经被开启的文件!范例一:列出目前系统上面所有已经被开启的文件与装置:
[root@www ~]# lsof
COMMAND PID  USER   FD  TYPE  DEVICE   SIZE     NODE NAME
init      1  root  cwd   DIR     3,2   4096        2 /
init      1  root  rtd   DIR     3,2   4096        2 /
init      1  root  txt   REG     3,2  38620  1426405 /sbin/init
....(底下省略)....
# 注意到了吗?是的,在默认的情况下, lsof 会将目前系统上面已经开启的
# 文件全部列出来~所以,画面多的吓人啊!您可以注意到,第一个文件 init 运行的
# 地方就在根目录,而根目录,嘿嘿!所在的 inode 也有显示出来喔!范例二:仅列出关於 root 的所有程序开启的 socket 文件
[root@www ~]# lsof -u root -a -U
COMMAND     PID USER   FD   TYPE     DEVICE SIZE   NODE NAME
udevd       400 root    3u  unix 0xedd4cd40        1445 socket
auditd     4256 root    7u  unix 0xedd4c380        9081 socket
audispd    4258 root    0u  unix 0xedd4c1e0        9080 socket
# 注意到那个 -a 吧!如果你分别输入 lsof -u root 及 lsof -U ,会有啥资讯?
# 使用 lsof -u root -U 及 lsof -u root -a -U ,呵呵!都不同啦!
# -a 的用途就是在解决同时需要两个项目都成立时啊! ^_^范例三:请列出目前系统上面所有的被启动的周边装置
[root@www ~]# lsof +d /dev
COMMAND     PID      USER   FD   TYPE     DEVICE SIZE  NODE NAME
init          1      root   10u  FIFO       0,16       1147 /dev/initctl
udevd       400      root    0u   CHR        1,3       1420 /dev/null
udevd       400      root    1u   CHR        1,3       1420 /dev/null
udevd       400      root    2u   CHR        1,3       1420 /dev/null
# 看吧!因为装置都在 /dev 里面嘛!所以罗,使用搜寻目录即可啊!范例四:秀出属於 root 的 bash 这支程序所开启的文件
[root@www ~]# lsof -u root | grep bash
bash   20639 root  cwd    DIR    3,2    4096    648321 /root
bash   20639 root  rtd    DIR    3,2    4096         2 /
bash   20639 root  txt    REG    3,2  735004   1199424 /bin/bash
bash   20639 root  mem    REG    3,2   46680     64873 /lib/libnss_files-2.5.so
....(底下省略)....

这个命令可以找出您想要知道的某个程序是否有激活哪些资讯?例如上头提到的范例四的运行结果呢!

转自 http://www.cnblogs.com/ggjucheng/archive/2012/10/24/2737851.html

转载于:https://www.cnblogs.com/fwdxl/p/6706078.html

查询进程打开的文件(转)相关推荐

  1. 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这

    线程共享的环境: 进程代码段.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯).进程打开的文件描述符.信号的处理器.进程的当前目录和进程用户ID与进程组ID. 进程拥有这许多共性的 ...

  2. s11.1 lsof:查看进程打开的文件

    功能说明 lsof 全名为list open files,也就是列举系统中已经被打开的文件,通过lsof命令,就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件. [语法格式] l ...

  3. 16进制 ksh_AIX系统中如何统计进程打开的文件数目

    作者:李烨楠 中国建设银行 来自微信公众号:平台人生 环境: AIX 6.1 AIX7.1 前言: 用户有时需要统计一个进程打开的文件数目,比如,在当前打开文件句柄使用量是否超过用户资源限制(/etc ...

  4. mysql lsof打开数过多_lsof 查看进程打开的文件情况 df -h 磁盘空间满的异常处理...

    lsof的使用说明 2019/07/01 update chenxin lsof 查看进程打开了哪些文件 / 查看文件被哪个进程使用 lsof -u/-c/-p/^/file_path_and_fil ...

  5. linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用

    lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录  3.网络文件系统的文件,4.字符设备文件  5.(函数)共享库  6.管道,命名管道 7.符号链 ...

  6. 查看系统各个进程打开的文件描述符数量

    lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr 结果是以 打开的文件描述符数量:进程号  的格式排序的 .降序排序 转载于:https://blog. ...

  7. lsof 查看进程打开那些文件 和 查看文件给那个进程使用

    lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录  3.网络文件系统的文件,4.字符设备文件  5.(函数)共享库  6.管道,命名管道 7.符号链 ...

  8. linux进程打开链接数,Linux 进程打开最大文件连接数Too many open files

    首先出现这个提示的原因:应用程序打开的文件数量超过了系统设定值. 如何查看当前系统每个用户最大允许打开文件数量: [root@registry ~]# ulimit -a core file size ...

  9. linux访问底层,LINUX下进程打开的文件怎么和底层磁盘关联的?

    有没有很多人跟我有一样的疑惑,文件是放在磁盘中的,但是操作文件却是在内存中,这两者是怎么关联的呢,虽然至今还没有找到更详细的答案,但是对linux底层数据结构进行梳理后,发现了其中的一些线索,与大家分 ...

最新文章

  1. 一个智能机器人的语录
  2. 十字交叉链表c语言,C语言课程设计报告—十字交叉链表的应用.doc
  3. AI:2020年6月22日北京智源大会演讲分享之《语音与自然语言处理》09:10-09:40 Christopher 教授《基于深度上下文词表征的语言结构的发现》
  4. 【数据结构与算法】之树的概念与使用
  5. springmvc-返回值
  6. ARM发表白皮书:物联网的过去、现在与未来
  7. ArcGIS实验教程——实验四十:ArcGIS洪水淹没分析案例教程
  8. sl animation sample
  9. python re模块详解_python 详解re模块
  10. linux禁止防火墙命令,LINUX关闭打开防火墙命令
  11. 提交百度快速收录真的能达到秒收录吗
  12. VBA中worksheets/sheets/workbook 区别
  13. 软考_法律法规与标准化知识
  14. 马克思主义哲学笔记(一)
  15. 再见了,收费的云笔记,自己搭建的就是好用
  16. HDMI画面分割器功能应用
  17. 三步解决网页提交答案不能粘贴问题(保姆教程)
  18. 基于安卓Android的企业员工管理系统设计与实现
  19. 牛客3006D-牛牛与牛妹的约会-思维
  20. 本科/研究生阶段--嵌入式学习路线(尤其适用于机械僧)

热门文章

  1. three 天空球_javascript – 分配给相机的three.js天空盒
  2. gradle拷贝静态资源文件_Gradle-操作文件文件拷贝
  3. 一次完整的性能测试过程
  4. 编译c语言程序时 程序中的注释部分将,C语言程序编译时,程序中的注释部分将 答案:不参加编译,也不会出现在目标程序中...
  5. mysql服务器_windows mysql服务器
  6. 红宝石服务器文件,使用红宝石MAMP作为本地服务器访问SQL语句
  7. JAVA面试题集收藏大放送
  8. HBASE ERROR: Table already exists: FileTable! list时候却查不到表
  9. 安卓手机反应越来越慢怎么办_安卓手机运行慢怎么办 只需几步轻松提升安卓手机速度...
  10. mysql relay log时间_如何得到Slave应用relay-log的时间