对于一些测试,我从 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!可能是什么原因?
我想触发一个操作,当在我指定的目录之一中创建一个新文件时。我想inotifywait用于这个目的。但问题是我不知道如何使用inotifywait同时观看多个目录。甚至递归地观察单个目录都不是问题,而是几个?是否可能,或者我必须inotifywait并行运行多个带有“ ”的进程?
当我将 INotify 与/etc/mtab或一起使用时/proc/mounts,它在安装或卸载事物时不会检测到更改,即使当我手动检查时/etc/mtab和/proc/mounts都已更改。为什么会这样?我如何跟踪安装和卸载东西?
我/home/foo在服务器上有一个目录,我想不再需要它了。
不幸的是没有人能告诉我这个目录是否仍然需要。
如果还需要这个目录,我想知道哪个进程访问它。
观看在此目录下打开的所有文件。
不幸的是,该目录包含很多子目录,这就是我不想使用 inotify 的原因。
如何查看目录(递归)树下打开的所有文件?我想知道哪个进程访问它。
/home 是一个 ext4 文件系统。 我的问题不是重复是否有可能找出哪个程序或脚本创建了给定的文件?自从 ....:
已经有两个很好的答案了。但我很好奇,也许还有其他方法:50 的赏金 :-)
我正在尝试编写一个脚本,用于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 等预制的解决方案——对我来说有趣的部分是自己用简单的工具创建这样的东西。)
这完美地工作:
$ 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 能够工作。
那么,我做错了什么?
谢谢
我在脚本中使用 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 不适合我的需求,因为我不是基于时间的操作,而是基于事件的操作。
我有一个简单的 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) 例如,我需要监视文件/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) 我刚刚学会了如何不断检查文件是否被修改:
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已更改的文件的文件名呢?
如何监视sysfs文件更改(如/sys/class/net/eth0/statistics/operstate)并在内容更改时执行命令?
inotify 不起作用 sysfsinotify ×12
linux ×4
bash ×2
monitoring ×2
mount ×2
shell-script ×2
async ×1
directory ×1
files ×1
filesystems ×1
linux-kernel ×1
livecd ×1
logrotate ×1
overlayfs ×1
proc ×1
shell ×1
sysfs ×1
tail ×1