Linux文件系统实时监控汇总

张开发
2026/4/14 2:11:54 15 分钟阅读

分享文章

Linux文件系统实时监控汇总
linux文件系统实时监控汇总inotifywait fsnotifywait文件事件列表输出信息列表示例fatracelsof展示系统已打开的文件列表输出信息说明示例恢复幽灵文件auditctl 系统审计过滤文件bpftracesystemtapinotifywait fsnotifywait可以使用简单的命令实时监控当前文件系统的操作请求 inotifywait 命令非常简单只是不能输出是哪个进程在读写文件fsnotifywait性能更高可以监控文件系统而且可以进行拦截。而 inotifywait 需要指定监控的目录当然可以递归监控多个目录但不能拦截。文件事件列表基本上所有文件操作事件都可以监控。输出信息列表可以输出文件的完成路径文件操作的事件以及事件。新版本已经不能输出操作文件的pid了。示例如图使用inotifywait命令实时输出系统在访问哪些文件。如果还想知道是哪个进程在操作这些文件可以用fatrace。fatracefatrace 是一个专为实时追踪整个系统的文件访问事件而设计的Linux命令行工具。它的操作更加简单当运行fatrace时它会持续输出系统上的实时文件访问事件包括进程id和进程名。事件用了缩写0open)表示打开W(write)表示写C(create表示创建Rread)表示读。也可以只监控自己感兴趣的事件或者只监控感兴趣的进程非常强大。lsof展示系统已打开的文件列表lsof 的全称是 List Open Files即列出打开的文件。在 Linux 的哲学里“一切皆文件”因此 lsof 不仅能看常规文件还能洞察网络连接、设备、管道等所有类型的“文件”堪称一个多功能的系统诊断神器就像给你的系统拍了一张“透视X光片”。可以展示整个系统也可以只展示某个进程。输出信息说明进程名与pid展示那个进程打开的这个文件。用户展示启动该进程的所属用户。文件描述符文件描述符 (File Descriptor)这是最关键也最复杂的一列。它表示进程如何引用一个文件。常见的值有cwd: Current Working Directory表示进程当前工作目录。rtd: 表示进程所在的根目录路径, 有些进程是chroot到某个目录执行的所以根目录不相同。txt: 程序的可执行文件本身text。mem: 内存映射文件通常是共享库。数字 (如 0u, 1w, 2r): 常规文件描述符。数字后的字母表示打开模式r (读)、w (写)、u (读写)。大写 W: 表示进程对该文件持有写锁。文件类型。REG: 普通文件 (Regular file)。DIR: 目录 (Directory)。CHR: 字符设备 (Character device)。BLK: 块设备 (Block device)。IPv4/IPv6: IPv4/IPv6套接字 (socket)。FIFO: 管道文件设备号。格式通常为 主设备号, 次设备号用于标识文件所在的磁盘或分区。文件大小字节或文件偏移量。对于普通文件显示文件大小对于正在被打开的文件可能显示当前读写位置。文件的索引节点号 (inode)。在同一个文件系统中inode 能唯一标识一个文件。打开文件的确切路径或网络地址。这是最直观的一列告诉你到底在操作哪个文件或哪个网络连接。示例展示系统所有已打开的文件展示某个进程打开的文件恢复幽灵文件有时候你用 rm 删除了一个大文件但 df 却显示磁盘空间没有释放。这通常是因为该文件仍被某个进程持有。lsof | grep deleted 可以帮你找到这个进程从而释放空间。auditctl 系统审计过滤文件auditd 是 Linux 系统内核级的审计框架用于记录系统底层的关键操作。它不只是一个普通进程而是深度集成在内核中监控范围远超常规日志能完整记录系统调用open、execve 等、文件访问、用户命令、权限变更和网络连接等安全相关事件。有了它不仅能监控文件读写还能监控文件执行等。bpftraceauditd系统审计使用起来比较繁琐Bpftrace使用起来更简洁效率更高。bpftrace 是一个基于 eBPF 的高阶动态追踪工具你可以把它想象成一个专门为 Linux 内核和应用程序打造的“超级显微镜”和“脚本语言”的结合体。它的设计目标是让你能快速、安全地观测系统内部发生了什么无论是排查一个突发的性能问题还是理解一个复杂程序的运行逻辑。跟我们前面介绍bpf利器一样简单的监控可以不用写程序直接用bpftrace命令行工具就可以实现目的。如监控系统所有打开文件的操作bpftrace -e ‘tracepoint:syscalls:sys_enter_openat { printf(“%s %s\n”, comm, str(args.filename)); }’systemtap如果说 bpftrace 是轻巧快捷的现代“飞刀”那 SystemTap 就是功能全面、极其强大的老牌“瑞士军刀”。它是一个为深度探查Linux系统而生的动态追踪框架。它的核心价值在于允许用户编写脚本在不重启系统、不重新编译内核的情况下动态地注入代码以观测系统运行。虽然逐渐被ebpf取代但是还是有很多地方是ebpf难以取代的。当你的需求极度复杂需要编写超过100行的复杂追踪逻辑进行详尽的数据处理和计算时SystemTap 成熟的语言特性更具优势。当你的环境非常老旧仍在维护着大量运行 2.6.x 或 3.x 内核的生产系统时SystemTap 几乎是唯一的选择。当用户态追踪是核心诉求需要深入分析特定用户态进程的内部函数调用且难以安装内核调试符号时SystemTap 的 dyninst 后端会非常方便。当你的目标是快速排查问题bpftrace 凭借其低开销和简洁的语法是诊断性能瓶颈、监控系统行为的首选。当你需要一个长期、稳定、轻量的监控方案bpftrace 及其背后的 eBPF 技术是当今的主流拥有更好的安全性和社区支持。当你需要确保最高级别的系统稳定性eBPF 程序运行在虚拟机上经过严格验证相对更安全。

更多文章