每当在Linux中使用inode创建新文件时,如何获取文件名以及文件的绝对路径?

2023-11-29

我用我的linux操作系统(CentOS)做了一些实验,我想跟踪在同一环境下创建的所有工具日志,工具生成相应的日志(.log extn)来跟踪这些更改我编写了一个perl观察程序,它实际上监视目录我设置的,当创建新文件时,它将显示在输出中,但这会消耗大量内存和 CPU 利用率,因为我设置了 2 秒作为睡眠时间。

我的问题“有更好的方法吗?”我想到使用索引节点表来跟踪系统中的所有更改。这可以解决我的问题吗?如果是,请让我们知道解决方案?


看来您想监视目录的更改。这是一项复杂的工作,但有很好的模块。最容易推荐的可能是Linux::Inotify2

该模块实现了 Linux 2.6.13 及更高版本 Inotify 文件/目录更改通知系统的接口。

这似乎符合你想要的。

任何此类监视器都需要额外的事件处理。本示例使用AnyEvent.

use warnings;
use strict;
use feature 'say';

use AnyEvent;
use Linux::Inotify2;

my $dir = 'dir_to_watch';

my $inotify = Linux::Inotify2->new  or die "Can't create inotify object: $!";

$inotify->watch( $dir, IN_MODIFY | IN_CREATE, sub {
    my $e = shift;
    my $name = $e->fullname;
    say "$name modified" if $e->IN_MODIFY;    # Both show the new file
    say "$name created"  if $e->IN_CREATE;    # but see comments below
});

my $inotify_w = AnyEvent->io (
    fh => $inotify->fileno, poll => 'r', cb => sub { $inotify->poll }
);

1 while $inotify->poll;

如果你只关心new文件,那么你只需要上面的一个常量。 对于这两种类型的事件$name有新文件的名称。从man inotify在我的系统上

... the name返回的字段inotify_event结构标识目录中文件的名称。

The inotify_event结构适当地表示为Linux::Inotify2::Watcher object.

Using IN_CREATE对于您的目的来说似乎是一个明显的解决方案。我通过创建两个文件进行测试,其中两个文件重定向echo在同一命令行上用分号分隔的命令,也可以用touch-ing 一个文件。写入的文件被检测为单独的事件,因此touch-ed 文件。

Using IN_MODIFY也可能有效,因为它监视(在$dir)

...监视对象中的任何文件系统对象(始终是目录),即文件、目录、符号链接、设备节点等...

至于测试,这两个文件都是由echo如上所述,作为单独的事件进行了报道。但一个touch-ed 文件是not报告,因为数据没有更改(文件没有写入)。

哪种更适合您的需求取决于细节。例如,工具可能会在启动时打开日志文件,但稍后才写入该文件。在这种情况下,上述两种方式的表现会有所不同。所有这些都应该根据您的具体情况仔细调查。

我们可能会想到竞争条件,因为当代码执行其他文件时可能会滑入。但该模块比这要好得多,并且它确实在处理程序完成后报告新的更改。我通过在代码运行(和睡眠)时创建文件进行测试并报告它们。

其他一些值得注意的事件驱动编程框架是POE and IO::异步.

The 文件::监视器也做这种工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每当在Linux中使用inode创建新文件时,如何获取文件名以及文件的绝对路径? 的相关文章

  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • 使用 Cygwin 安装 CPAN GD 模块失败

    我已经尝试解决为什么 CPAN GD 模块无法使用 Cygwin 安装 2 天了 任何帮助深表感谢 谢谢 cpan install GD Going to read home xxxxxxxxxx cpan Metadata Databas
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • Text::平衡和多行 xml

    看来我有点失落了 我需要解析一个大的 大约 100 mb 且相当难看的 xml 文件 如果我使用parsefile 它返回错误 文档元素后的垃圾 但它会很乐意解析文件的较小元素 所以我决定将文件分解为元素并解析它们 由于不鼓励使用正则表达式
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 为什么我的 Apache2::Log 输出用 \n 替换换行符?

    我在 apache2 mod perl 下设置了多个虚拟主机 我用的是ErrorLog指令为每个虚拟主机获取单独的错误日志 仅当我使用 Apache2 Log 时 这才按预期工作 警告 只会记录到常规错误日志中 这样就可以了 最后 但还存在
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 内核模式下的线程(和进程)与用户模式下的线程(和进程)有什么区别?

    我的问题 1 书中现代操作系统 它说线程和进程可以处于内核模式或用户模式 但没有明确说明它们之间有什么区别 2 为什么内核态线程和进程的切换比用户态线程和进程的切换花费更多 3 现在 我正在学习Linux 我想知道如何在LINUX系统中分别
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad

随机推荐

  • 使用 CSS/Javascript 将文本字段中的文本更改为点

    有没有一种方法可以 屏蔽 文本字段的输入 使其像密码字段一样 显示点而不是文本 而无需将文本框设置为密码类型 与 JavaScript 相比 我们更喜欢 CSS 有任何想法吗 这可能是您正在寻找的答案 webkit text securit
  • 操作系统时区更改tomcat需要重新启动

    我的 Web 应用程序在 Apache Tomcat 7 0 上运行 我们调用 java util calendar 来获取服务器日期时间 问题是 如果系统时区发生更改 java 日历将继续以 旧 时区的日期时间运行 Tomcat使用的JD
  • PHP 缓存控制似乎不起作用

    请看一下我的网站 vynora 事情还没有完成 我在 HTML 页面的顶部放置了一个 PHP 标头 当我访问 Google 的 pagespeed 时 它告诉我应该优化浏览器缓存 请看一下 谷歌页面速度 但我已经使用 PHP 做到了 那么这
  • MySQL 导出到 outfile:CSV 转义字符

    我有一个带有一些常见字段的时间表数据库表 id client id project id task id description time date 还有更多 但这就是要点 我连夜将该表导出到 CSV 文件 以便为用户提供数据备份 它还可用
  • ggplot2 中的自动非等距中断

    我创建了一个简单的散点图ggplot2并用颜色可视化 z 变量 require ggplot2 data data frame x runif 1000 y runif 1000 vis rf 1000 df1 1 df2 3 qplot
  • 如何突出显示当前页面的菜单链接?

    这是一个非常常见的问题 但我找不到针对我的情况的任何解决方案 我正在制作一个相当大的网站 有数百个页面 因此我创建了每个页面都相同的页眉页和页脚页 现在我想突出显示当前页面的菜单按钮 但我的菜单位于我在每个页面中包含的标题中所以我尝试的一切
  • 如何创建水平动态 UICollectionView 单元格?迅速

    嘿 我正在尝试使用集合视图单元在视图控制器中显示一组 标签 但我无法找到一种方法使它们能够根据字符串的长度动态调整大小 现在 各个单元格的大小都是静态的 因此每当用超出单元格大小的字符填充单元格的字符串时 它就会进入第二行 我希望单元格可以
  • 使用抽象类型而不是参数类型进行 F 绑定多态性?

    如何使用抽象类型将以下 F 绑定多态性转换为代码 trait Organism Self lt Organism Self self Self gt def reproduceWith org Self Boolean class Amoe
  • 如何在 Spring Boot + Spring Security 应用程序中配置 CORS?

    我将 Spring Boot 与 Spring Security 和 Cors 支持结合使用 如果我执行以下代码 url http localhost 5000 api token xmlhttp new XMLHttpRequest xm
  • Mysql 提取特定列中每个单词的首字母

    我想在表中创建一个缩写词列 我想从 名称 列中获取每个单词的第一个字母 将其大写 然后将所有单词连接到 首字母缩略词 列中 有什么简单的方法来获取第一个字母吗 这是一个 改进 的功能 允许通过正则表达式仅过滤想要的字符 功能initials
  • Lambda 上的木偶师

    我想用puppeteer在 Lambda 上将 HTML 转换为 PDF 随着chrome aws lambda模块或puppeteer模块 我正在尝试运行 sam local invoke 一个调用的函数puppeteer launch
  • 5 月 1 日后弃用后,offline_access 将如何工作?

    我做了一些测试 发现结果与 Facebook 的文档相矛盾 https developers facebook com roadmap offline access removal 如果我们启用 弃用离线访问 并在移动客户端请求离线访问 我
  • Android Gradle 插件需要 Java 11 才能运行。您当前使用的是 Java 1.8。 **EXPO.dev**

    我正在尝试使用该命令eas build p android构建我的安卓 aab文件 但每次我尝试这样做时 我都会发现错误 Android build failed Gradle build failed with unknown error
  • 如何在 Python 中将参数方程拟合到数据点

    我正在寻找一种适合的方式参数方程使用 Python 生成一组数据点 作为一个简单的例子 给出了以下数据点集 import numpy as np x data np array 1 2 3 4 5 y data np array 2 0 3
  • 是否可以在 Cassandra 中以 CQL blob 类型存储 PDF 文件?

    以避免有关问题 为什么使用 cassandra 而选择其他数据库 我们必须这样做 因为我们的客户决定我的选择是一个完全错误的决定 在我们的应用程序中 我们必须处理 PDF 文档 即阅读它们并用数据填充它们 所以我的目的是将文档 模板 保存在
  • 在 C# 中使用数字设置颜色

    我可以使用画笔设置对象的颜色 如下所示 Brushes Red 如何使用数字应用相同的方法 say SetColor ffffff 上面是一个想象的例子 您可以使用ColorTranslator FromHtml 编辑 为了回应您的评论 您
  • Asyncio 与另一个协程同时运行 Dash (Flask) 服务器

    我创建了一个 dash 应用程序来显示另一个代码正在收集的信息 我想使用 Python 中的 asyncio 模块同时运行它们 我的代码使用异步函数 而 Dash 应用程序 基于 Flask 在服务时阻止其他任何内容执行 我不确定这是否需要
  • 如何使用 gl.lineWidth()

    其他一切都进展顺利 界限正在绘制中 它似乎只是忽略了 gl lineWidth 调用 我还有什么需要做的吗 gl lineWidth 17 gl drawArrays this drawMode 0 totalVertices 我是否有可能
  • Javascript RegExp 在具有嵌套子字符串的字符串上应用跨度标签

    示例字符串 There is a red car parked in front of a blue house with a fence painted red 要使用跨度突出显示的字符串是 red car blue house red
  • 每当在Linux中使用inode创建新文件时,如何获取文件名以及文件的绝对路径?

    我用我的linux操作系统 CentOS 做了一些实验 我想跟踪在同一环境下创建的所有工具日志 工具生成相应的日志 log extn 来跟踪这些更改我编写了一个perl观察程序 它实际上监视目录我设置的 当创建新文件时 它将显示在输出中 但