标签: inotify

tail -f 在 Ubuntu live CD 中不产生任何输出

对于一些测试,我从 USB 启动 Ubuntu Live。

我正在尝试使用tail命令来显示调试日志,但它不起作用。

我还使用以下代码测试打开两个终端 ( t1, t2):

t1

touch a 
Run Code Online (Sandbox Code Playgroud)

t2

tail -f a
Run Code Online (Sandbox Code Playgroud)

t1

for i in `seq 1 10`; do echo $i >> a; sleep 1; done
Run Code Online (Sandbox Code Playgroud)

什么都没有t2!可能是什么原因?

livecd tail inotify overlayfs

5
推荐指数
1
解决办法
192
查看次数

“inotifywait”同时观察多个目录

我想触发一个操作,当在我指定的目录之一中创建一个新文件时。我想inotifywait用于这个目的。但问题是我不知道如何使用inotifywait同时观看多个目录。甚至递归地观察单个目录都不是问题,而是几个?是否可能,或者我必须inotifywait并行运行多个带有“ ”的进程?

linux inotify

4
推荐指数
1
解决办法
1万
查看次数

为什么 INotify 不能与 `/etc/mtab` 或 `/proc/mounts` 一起使用?

当我将 INotify 与/etc/mtab或一起使用时/proc/mounts,它在安装或卸载事物时不会检测到更改,即使当我手动检查时/etc/mtab/proc/mounts都已更改。为什么会这样?我如何跟踪安装和卸载东西?

mount proc inotify

4
推荐指数
1
解决办法
1084
查看次数

跟踪对目录树的访问

情况

/home/foo在服务器上有一个目录,我想不再需要它了。

不幸的是没有人能告诉我这个目录是否仍然需要。

目标

如果还需要这个目录,我想知道哪个进程访问它。

当前策略

观看在此目录下打开的所有文件。

为什么不通知

不幸的是,该目录包含很多子目录,这就是我不想使用 inotify 的原因。

  • 1604508个文件
  • 287253子目录

如何查看目录(递归)树下打开的所有文件?我想知道哪个进程访问它。

环境

  • /home 是一个 ext4 文件系统。
  • SuSE Linux 12.3。内核:3.7.10

不重复

我的问题不是重复是否有可能找出哪个程序或脚本创建了给定的文件?自从 ....:

  • 我无法使用 inotify,因为目录树包含太多子目录。
  • 我不能使用loggedfs:我不能改变这个目录的文件系统类型。

赏金

已经有两个很好的答案了。但我很好奇,也许还有其他方法:50 的赏金 :-)

linux inotify

4
推荐指数
2
解决办法
937
查看次数

inotifywatch:文件轮换后继续观察

我正在尝试编写一个脚本,用于inotifywatch监视日志文件中的更改。如果将特定消息写入日志文件,则应该触发某个功能。该脚本目前以这种基本形式存在:

while inotifywait -e modify /var/log/auth.log
do
  alert=$(tail -n1 /var/log/auth.log | grep -E -o ".{0,7}password")
  if [[ $alert == "Failed password" ]]
  then
   echo "FAILURE" >> test.log
  elif [[ $alert == "cepted password" ]]
  then
   echo "LOGIN" >> test.log
  fi
done
Run Code Online (Sandbox Code Playgroud)

一切正常——直到观察到的日志文件inotifywatch旋转。然后它停止工作。我认为这是因为在轮换期间,被监视的文件被重命名,之后不再写入,并且在其位置创建了一个具有旧名称的新文件,该文件inotify从未被告知首先要监视。

我试图通过从切换inotifywatch到使用来规避这一点,tail -f但同样的问题似乎也适用于那里。

现在我意识到这可能可以通过创建一个巨大的if结构来解决,其中inotifywatch不仅modify监视 ,还监视文件创建并重新启动监视进行修改。但是我喜欢保持简单,所以有人知道是否有更简单的方法吗?(拜托,不,我不想使用像 fail2ban 等预制的解决方案——对我来说有趣的部分是自己用简单的工具创建这样的东西。)

logrotate inotify

4
推荐指数
1
解决办法
1758
查看次数

设备创建时inotifywait不会改变

这完美地工作:

$ inotifywait --event create ~/foo
Setting up watches.
Watches established.
/home/ron/foo/ CREATE bar
Run Code Online (Sandbox Code Playgroud)

但是,当在 /sys/devices/virtual/net 下创建目录 tun0 时,这只是在那里。

$ inotifywait --event create /sys/devices/virtual/net
Setting up watches.
Watches established.
Run Code Online (Sandbox Code Playgroud)

由于这些文件夹是世界可读的,我希望 inotifywait 能够工作。

那么,我做错了什么?

谢谢

linux shell inotify

3
推荐指数
1
解决办法
2586
查看次数

inotifywait 排除文件类型

我在脚本中使用 inotifywait 并想知道是否有办法将隐藏文件排除在外?

我似乎无法确定排除隐藏文件的正则表达式模式。

shell-script inotify

3
推荐指数
1
解决办法
4158
查看次数

删除并重新创建文件夹时,inotifywait 不起作用

我正在尝试使用 inotifywait 来监视文件夹:

inotifywait -m -r /home/oshiro/Desktop/work_folder
Run Code Online (Sandbox Code Playgroud)

该命令有效,如果我在该文件夹中创建文件,一切似乎都能正常工作。

当文件夹被监控时,如果我删除它,我会得到以下输出:

/home/oshiro/Desktop/work_folder/ MOVE_SELF 
/home/oshiro/Desktop/work_folder/ OPEN,ISDIR 
/home/oshiro/Desktop/work_folder/ CLOSE_NOWRITE,CLOSE,ISDIR 
/home/oshiro/Desktop/work_folder/ MOVE_SELF 
/home/oshiro/Desktop/work_folder/ ATTRIB,ISDIR 
/home/oshiro/Desktop/work_folder/ OPEN,ISDIR 
/home/oshiro/Desktop/work_folder/ DELETE Untitled Document
/home/oshiro/Desktop/work_folder/ DELETE Untitled Document 2
/home/oshiro/Desktop/work_folder/ CLOSE_NOWRITE,CLOSE,ISDIR 
/home/oshiro/Desktop/work_folder/ DELETE_SELF 
Run Code Online (Sandbox Code Playgroud)

如果我然后再次重新创建该文件夹,而监视仍在进行,那么 inotifywait 似乎不会继续监视它,除非我inotifywait -m -r /home/oshiro/Desktop/work_folder再次运行。

我该如何解决这个问题?我基本上想监控一个 USB 记忆棒,该记忆棒将在一天内多次插入和移除。当它被拔掉并重新插入时,我认为 inotifywait 将停止监视它,就像上面的文件夹被删除并重新创建一样,inotifywait 无法继续监视它,除非我再次运行上面的命令,即inotifywait -m -r /home/oshiro/Desktop/work_folder

我应该使用更适合此类任务的东西而不是使用 inotifywait 吗?cron 不适合我的需求,因为我不是基于时间的操作,而是基于事件的操作。

linux monitoring directory mount inotify

2
推荐指数
1
解决办法
3124
查看次数

用于检测上传文件的 Bash 脚本为一个文件多次触发

我有一个简单的 bash 脚本设置,它使用运行 CentOS 6.6 的内置 inotify 守护进程。该脚本将简单地回显上传到特定目录的文件。该脚本可以工作,但它会回显相同的文件名 100 多次。我似乎无法弄清楚为什么会这样做。

#!/bin/bash

/usr/bin/inotifywait -e create,delete,modify,move -mrq --format %f /home/imgthe/public_html/run/thumbs --excludei sess_* | 
while read INPUT
do
    FILENAME=$INPUT

    DATE='date'

    echo $FILENAME
    printf $INPUT >> sku.txt
done
Run Code Online (Sandbox Code Playgroud)

bash shell-script inotify

2
推荐指数
1
解决办法
598
查看次数

如何监控文件是否被创建?

例如,我需要监视文件/tmp/somefile123是否是在某些事件之后创建的。我尝试使用inotifywait但这里有一个问题:

# inotifywait -q -e create /tmp/somefile?*
Couldn't watch /tmp/somefile?*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

因为完全没有这样的文件,我想知道它是否会在那里!

我该如何解决这个问题?

UPD:也许如果我解释一下我想要达到的目标会更清楚。

我需要以最少的 CPU 消耗编写 shell 脚本 (sh),如下所示:

if [ $(inotifywait -e create $SPECIFIC_FILE) ]; then
    blah-blah-blah some actions
fi
# And then similarly monitor if this file was deleted and then do another actions
Run Code Online (Sandbox Code Playgroud)

我希望脚本会在inotifywait -e create $SPECIFIC_FILE上停止执行,直到这个 $SPECIFIC_FILE 不会被创建,然后会更好

while [ ! -f $SPECIFIC_FILE ]; do
    blah-blah-blah some actions
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

monitoring files inotify

2
推荐指数
1
解决办法
1288
查看次数

inotify:回显目录中哪个文件已更改

我刚刚学会了如何不断检查文件是否被修改

while inotifywait -q -e modify filename >/dev/null; do
    echo "filename is changed"
    # do whatever else you need to do
done
Run Code Online (Sandbox Code Playgroud)

如果我使用目录名而不是文件名,我可以检查该目录的所有文件:

while inotifywait -q -e modify directoryname >/dev/null; do
    echo "filename is changed"
    # do whatever else you need to do
done
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能得到echo已更改的文件的文件名呢?

bash inotify

2
推荐指数
1
解决办法
1351
查看次数

如何将侦听器附加到 sysfs 文件?

如何监视sysfs文件更改(如/sys/class/net/eth0/statistics/operstate)并在内容更改时执行命令?

  • inotify 不起作用 sysfs
  • 我不想投票。我想设置一个带有回调例程的侦听器一次

filesystems sysfs inotify linux-kernel async

2
推荐指数
1
解决办法
247
查看次数