inotify学习

inotify的原理

`inotify`是Linux内核的一个子系统,它提供了一个通用的框架来监控文件系统的变化。使用`inotify`,应用程序可以订阅和获取文件或目录状态变化的通知,如文件写入、读取、创建、删除、属性更改等。

`inotify`的工作原理分为以下几个步骤:

1. **初始化**:应用程序使用`inotify_init`系统调用来初始化一个`inotify`实例,该调用返回一个文件描述符。

2. **定义监控对象**:应用程序使用`inotify_add_watch`系统调用为指定的文件或目录添加一个监视描述符。在这个调用中,应用程序可以指定需要监听的事件类型。

3. **事件通知**:当被监视的文件或目录发生变化时,内核将事件添加到与`inotify`实例关联的队列中。

4. **读取通知**:应用程序使用`read`系统调用读取文件描述符来获取事件通知。

5. **移除监控对象**:应用程序使用`inotify_rm_watch`系统调用停止监视文件或目录。

这个机制允许应用程序以事件驱动的方式处理文件系统的变化,而不是不断的轮询文件系统状态,显著提高了效率。这对于文件同步、备份、索引等应用程序特别有用。

然而,需要注意的是`inotify`也有一些限制和需要注意的问题。例如,`inotify`不会继承文件或目录的监听状态,也就是说,如果创建了一个新的子目录,你需要为新的子目录添加新的监听。此外,`inotify`的事件是一次性的,也就是说,如果不重新添加监听,一次事件触发后就不再有效。而且,`inotify`有一定的资源限制,监听总数过大可能会造成问题。

inotifywait的用法,不需要一直注册事件吧?

`inotifywait`是一个用于使用`inotify`接口的命令行工具,它消除了直接使用`inotify` API时的许多复杂性。使用`inotifywait`,你可以很容易地设置一个脚本来监视文件系统的更改,并在更改发生时执行某些操作。

你的理解是正确的:你不需要在每次事件发生后重新注册。只要使用`inotifywait`命令的`-m`或`--monitor`选项,你就可以让`inotifywait`持续地等待事件的发生,而不是在第一个事件后就退出。

例如,以下命令将持续监视`/path/to/dir`目录(及其所有子目录,由于`-r`选项)的所有文件修改事件,并将相关的事件信息打印到标准输出:

inotifywait -m -r -e modify /path/to/dir

在这个命令中,`-m`选项让`inotifywait`在事件发生后继续等待,`-r`选项使得命令递归地监视目录及其子目录,`-e modify`指定只监听文件修改事件。

你可以在你的shell脚本中使用管道`|`和`while read`语句来处理`inotifywait`的输出,然后在每次事件发生时执行你需要的操作。

inotify是利用ebpf机制吗

不是的。`inotify`是Linux内核的一部分,它在eBPF(扩展伯克利包过滤器)出现之前就已经存在了。`inotify`在内核中实现,并使用标准的系统调用接口与用户空间程序进行通信。

eBPF是一个相对较新的技术,它提供了一种在不修改内核源代码的情况下,动态地在内核空间中执行自定义代码的能力。这种功能可以用于许多用途,包括网络过滤、系统调用过滤、性能分析、调试等。

尽管`inotify`和eBPF都是用于实现深度系统检测和监控的强大工具,但是他们的工作方式和用途是不同的。你可以将eBPF看作是一个更底层更通用的监视框架,而`inotify`则是一个具体的,用于文件系统监视的解决方案。

inotify-tools包括哪些工具

`inotify-tools`库包含两个主要的实用程序:`inotifywait`和`inotifywatch`。

1. **`inotifywait`**: 这个工具用于等待文件或目录的事件,然后将事件打印到标准输出。它可以用于编写shell脚本以异步方式响应文件系统事件。它有许多选项,可以用于精细地控制其行为,包括递归监视目录、选择要监听的事件类型或抑制事件输出等。

2. **`inotifywatch`**: 这个工具用于收集关于文件或目录的统计信息,它会记录在一段时间内发生了哪些事件以及每种事件发生了多少次。它的输出是一个报告,包含了每种事件的数量。这个工具可以用于诊断和调试文件系统性能问题,或者更广泛的系统性能问题。

这两个工具都是在标准`inotify`API基础上构建的,他们提供一种更易用的方式来使用`inotify`功能。

inotify的性能怎样

`inotify`是一个高性能的文件系统监控机制。由于它是在Linux内核级别实现的,因此其开销相对较小,速度也快。相比用户空间的文件系统轮询(polling)方法,`inotify`提供了一种实时和高效的解决方案。

当你在目录或文件上注册一个`inotify`监控后,内核会在事件(如文件修改、删除或重命名)发生时立即通知你,而无需周期性轮询文件系统状态。这样可以减少IO操作与CPU使用。

然而要注意的是,虽然`inotify`本身很高效,但如果你监控了大量的文件或目录,可能会消耗大量的内核资源。Linux内核有限制`inotify`可以使用的资源量。例如,每个用户可以创建的`inotify`实例数量、每个实例可以监控的文件数量以及系统级别的总监控数量都有限制。这些限制可以通过系统的`/proc`或`/sys`接口进行查询和修改。

再者,虽然`inotify`提供了文件系统事件的实时通知,但它不能提供关于事件发生原因的上下文信息,比如哪个进程修改了文件。如果需要此类信息,你可能需要用到其他的内核机制,比如`auditd`或eBPF。

auditd是什么,原理是怎样的

`auditd`是Linux内核的一个安全审计框架,它允许系统管理员追踪系统中发生的重要安全事件。`auditd`收集的信息可以帮助分析系统的行为,识别潜在的安全问题,或者在系统遭受攻击后进行取证。

**工作原理:**

`auditd`是一个用户空间的守护程序,它与Linux内核密切协作,收集和记录审计信息。

当内核中发生了需要被审计的事件,如系统调用或文件访问,内核会生成一个审计记录,并将其发送给`auditd`守护程序。`auditd`会将收到的审计记录写入日志文件,供以后检查。

要确定哪些事件需要被审计,系统管理员需要通过`auditctl`工具来设置审计规则。这些规则定义了哪些系统级别的行为(如哪些系统调用或哪些文件/目录的访问)会产生审计记录。规则可以基于各种属性进行过滤,比如进程ID、文件路径、用户ID和组ID等。

**底层技术:**

`auditd`审计系统的核心部分是在Linux内核中实现的。内核中的审计代码在特定事件发生时生成审计记录,并将记录发送到用户空间的`auditd`守护程序。

内核中的审计代码和其他内核代码一样,在内核空间运行,具有全权访问系统硬件和数据的权限。这是`auditd`能获取系统行为详细信息的原因,它能记录系统层面的任何操作和事件。

一个重要的内核组件是`audit`子系统。这个子系统处理生成的审计记录,并通过`netlink`套接字将它们发送到用户空间。`netlink`是内核和用户空间通信的一种机制。

`auditd`守护程序在用户空间运行,它接收并处理来自内核的审计记录。`auditd`将这些记录写入审计日志文件,这个文件通常位于`/var/log/audit/audit.log`。

此外,还有一些其他的工具可以用来查看和分析审计日志,如`ausearch`和`aureport`。这些工具可以帮助系统管理员搜索特定的审计事件,生成有关审计日志的统计报告,或者以易于理解的方式格式化审计记录。

总的来说,`auditd`并不是一个单独的组件,而是一套包含内核组件、用户空间守护程序和一些辅助工具的完整框架,它们共同工作,以实现系统级别的安全审计。

auditd是怎样使用的,有什么作用

`auditd`是Linux系统下的审计守护程序,它用于监控和记录系统中发生的安全相关的事件。通过`auditd`,你可以详细地了解系统中发生的任何事情——它可以记录任何由audit规则定义好的系统调用和文件访问事件。

以下是`auditd`的主要功能:

1. 监控文件和目录访问:你可以配置`auditd`来记录哪个用户在什么时候访问(包括读、写、执行等)了哪个文件或目录。

2. 追踪系统调用:你可以设置`auditd`来记录特定的系统调用,包括调用者的详细信息(如UID, GID, PID等)和调用的结果。

3. 用户和管理员行为审计:你可以监控用户的登录、注销、命令历史等,并跟踪系统管理员的所有操作。

4. 侵害检测:通过针对可疑行为设置规则,你可以使用`auditd`作为一个入侵检测系统。

要使用`auditd`,你需要做的第一件事是设置审计规则。规则可以设置为永久的,即使重启系统也会保持,也可以设置为临时的,只在当前会话中有效。

审计规则可以使用`auditctl`命令设置。例如,如果你想监视所有对`/etc/passwd`文件的写入,你可以使用以下命令:

auditctl -w /etc/passwd -p wa -k passwd_changes

这里,`-w`选项指定要监控的文件,`-p`选项指定要监控的权限(在此例中是写入和更改属性),`-k`选项给这条规则设置了一个关键字,稍后可以用来搜索审计日志。

`auditd`的日志记录在`/var/log/audit/audit.log`文件中,你可以使用`ausearch`和`aureport`命令来搜索并生成报告。以上面的规则为例,你可以使用以下命令查找所有与`passwd_changes`关键字匹配的事件:

ausearch -k passwd_changes

注意,运行`auditd`和设置审计规则需要root权限。在使用`auditd`时,你应当谨慎设置审计规则,以避免产生大量的日志导致存储空间不足。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索未来发展方向:图片转换为Excel表格的智能化与自动化

随着科技的不断进步,人工智能技术已经在许多领域得到广泛应用。其中,将图片转换为Excel表格的智能化与自动化技术成为了备受关注的新兴领域。这一技术的发展,不仅可以极大地提高工作效率,还能为数据分析提供更为准确和便捷的方式。…

上传文件的用例怎么设计

功能测试 符合要求的文件上传成功上传成功的文件名显示正常可查看、下载上传成功的文件删除上传成功的文件替换上传成功的文件上传文件是否支持中文文件路径是否可手动输入手动输入正确的文件路径上传成功手动输入错误的文件路径上传失败 文件大小测试 文件大小为0kb的文件上传…

PRBS并行输出

PRBS(Pseudo-Random Binary Sequences)是通过LFSR和特征函数 伪随机数发生器产生的伪随机数序列,通常用于高速数字通信测试。 基本电路(单比特输出) prbs N表示用N比特lfsr尝试伪随机数序列,常用的有N7,9…

创建与删除数据库(四)

创建与删除数据库(四) 一、创建数据库 1.1 使用DDL语句创建数据库 CREATE DATABASE 数据库名 DEFAULT CHARACTER 示例: 创建一个test 的数据库,并查看该数据库,以及该数据库的编码。 创建数据库: cre…

4G路由器助力智慧农业数据采集与远程管理

随着科技日新月异的发展,智慧农业正逐渐改变着传统农业生产模式。4G路由器作为物联网技术的关键通信设备,在实现农业现场传感器数据实时采集与远程在线管理方面发挥着重要作用,以下智联物联分享4G路由器在智慧农业中的应用优势。 农业现场传感…

机器学习-聚类算法Kmeans【手撕】

聚类算法 在训练时,使用没有标签的数据集进行训练,希望在没有标签的数据里面可以发现潜在的一些结构。 其中使用范围较广的是,聚类算法。聚类算法的目的是将数据划分成有意义或有用的组(或簇)。这种划分可以基于我们的…

自动保存知乎上点赞的内容至本地

背景:知乎上常有非常精彩的回答/文章,必须要点赞收藏,日后回想起该回答/文章时翻看自己的动态和收藏夹却怎么也找不到,即使之前保存了链接网络不好也打不开了(。所以我一般碰到好的回答/文章都会想办法保存它的离线版本…

社交买量:归因统计的核心要素与工具

在当今的社交App推广领域,广告买量已成为企业获取用户的重要手段。然而,如何准确衡量这些买量活动的成效,即用户从广告访问到安装后行为的完整转化路径,一直是运营人员关注的焦点。归因统计是一种评估营销效果的关键技术方案&…

python爬虫-多线程-数据库——WB用户

数据库database的包: Python操作Mysql数据库-CSDN博客 效果: 控制台输出: 数据库记录: 全部代码: import json import os import threading import tracebackimport requests import urllib.request from utils im…

论文阅读-一个用于云计算中自我优化的通用工作负载预测框架,

论文标题:A Self-Optimized Generic Workload Prediction Framework for Cloud Computing 概述 准确地预测未来的工作负载,如作业到达率和用户请求率,对于云计算中的资源管理和弹性非常关键。然而,设计一个通用的工作负载预测器…

docker-compose安装配置jenkins

archery 安装docker-compose curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-composechmod 755 /usr/local/bin/docker-composedocker-compose version 安装docker yum install epel-rel…

【每日一题】6.LeetCode——轮转数组

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢…

【nginx实战】通过nginx实现http 长连接(即keep alive)

文章目录 一. http的长连接历史1. HTTP短连接模型2. HTTP长连接模型 二. nginx作为代理时实现HTTP长连接1. nginx与client的长连接1.1. keepalive_timeout指令1.2. keepalive_requests指令* 场景分析 2. 保持和server的长连接2.1. location设置* 场景分析 2.2. upstream设置* 场…

typescript 的基本用法说明

声明数组的两种方式 let x1: number[]; x1 [1, 2, 3]; // 方式1 let x2: Array<number> [1, 2, 3]; // 泛型 元组的含义 let x3: [string, number]; // 确定数量和类型 x3 [12, 10]; 枚举 enum Color { // 默认从0开始编码 &#xff0c;或者从第一个数字开始递增…

PVE报错处理:kvm [2205]: vcpu0 ignored RDMSR: 0x1b8

PVE使用过程中如果遇到&#xff1a;kvm [2205]: vcpu0 ignored RDMSR: 0x1b8 报错信息处理方法 vim /etc/modprobe.d/kvm.conf "options kvm ignore_msrsY"&#xff0c;这里在msrsY后面加一个空格&#xff0c;然后粘贴report_ignored_msrsN&#xff0c;使其变成 op…

【pytorch进阶】| 各类张量形状变化函数总结对比分析,view,reshape,pernute,transpose,squeeze,unsqueeze

文章目录 1 view&#xff08;&#xff09;函数1.1 基本用法 2 view_as&#xff08;&#xff09;函数3 reshape&#xff08;&#xff09;函数4 permute&#xff08;&#xff09;函数5 transpose&#xff08;&#xff09; 函数6 squeeze&#xff08;&#xff09;函数 和 unsqueez…

为什么建议不要买入耳式的耳机?有没有不伤听力的蓝牙耳机

为什么建议不要买入耳式的耳机&#xff1f;因为长时间佩戴入耳式耳机可能会导致耳朵不适甚至疼痛&#xff0c;且存在听力损伤、耳膜损伤的风险&#xff0c;还可能诱发耳道发炎。那么有没有不伤听力的蓝牙耳机呢&#xff1f;当然是有的&#xff0c;我建议尝试一下骨传导蓝牙耳机…

简单实践 java spring cloud 负载均衡

1 概要 1.1 实现一个最简单的微服务。远程调用负载均衡&#xff0c;基本上完成了最核心的微服务框架。 远程调用&#xff1a;RestTemplate 注册中心&#xff1a;eureka 负载均衡&#xff1a;Ribbon 1.2 要点 1.2.1 依赖 1.2.1.1 主框架依赖 spring boot 依赖 <depe…

HarmonyOS鸿蒙 虚拟像素 图片显示

Android中&#xff0c;有的sp&#xff0c;dp&#xff0c;dpi&#xff0c;px等概念。 dpi&#xff0c;dots per inch&#xff0c;代表屏幕像素密度。是指屏幕上每英寸&#xff08;1英寸 2.54 厘米&#xff09;距离中有多少个像素点。 dp&#xff0c;device independent pixels&…

Camille-接口测试

* 接口&#xff1a;不同的系统之间相互连接的部分&#xff0c;是一个传递数据的通道 * 接口测试&#xff1a;检查数据的交换、传递和控制管理过程 网络模型&#xff1a; OSI七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 TCP/IP四层模型 应用层 传输层 网络…