查找 Unix 中文件关闭的时间

查找 Unix 中文件关闭的时间

我知道ls -l会给出文件的修改时间,但它给出的是文件打开而不是关闭的时间(使用Ctrl+D或其他东西)

请告诉我如何查找文件关闭时间

[BASH]$date
Wed May  7 10:33:01 EEST 2014
[BASH]$cat >aa
adf
adsf
#waited 8 mins before closing file (time of closing: 10:41)
[BASH]$ls -l aa
-rw-------    1 orclschd staff             9 May  7 10:33 aa
[BASH]$date
Wed May  7 10:41:47 EEST 2014
[BASH]$stat aa
bash: stat: command not found
[BASH]$uname
AIX 

在这里我创建了一个名为的文件aa

该文件是在 10:33 创建的,但是当我关闭文件并检查文件的修改日期时,它仍然显示 10:33。

但文件创建结束日期(关闭时间)是 10:41 。

AIX 中是否有任何命令可以查找文件何时关闭,或者我们可以编写任何 bash 脚本来自动跟踪文件吗?

答案1

您可以从普通文件系统获取文件的唯一信息是修改 ( ls -l)、访问 ( ls -lu) 和状态修改 ( ls -lc) 时间。

文件关闭时不会更改,因此文件状态中没有任何内容反映这一点。当前目录stat信息也不反映此关闭,而是反映文件的修改和更改时间(直到目录中的其他内容发生更改)。

如果您对文件进行无缓冲写入,则修改时间可能会有所不同,因为实际的磁盘访问可能,但不一定是在文件关闭时。不过,我认为没有简单的方法可以从命令行检查这一点。

顺便提一句。它更容易用于stat这些实验,因为它具有秒级粒度,这意味着您不必等待那么长时间才能获得明显的差异;-)

答案2

ls -l列出文件的修改时间。这既不是打开文件的时间,也不是关闭文件的时间,而是上次写入文件的时间。这通常与文件关闭的时间非常接近,但不一定相同。

你可能是问错问题。如果您想在程序完成写入文件时做出反应(即在程序关闭文件时执行某些操作),则时间无关紧要,您需要的是文件已关闭的通知。

Linux 有inotify为此,BSD 有kqueue,但据我所知,AIX 没有类似的东西。可能有一种间接的方式,通过审计系统,但这并不是一种适用于大多数用例的方法。

当程序 A 完成写入时,让程序 B 做出反应的最简单方法是让程序 A 向程序 B 发送通知。这可以是您喜欢的任何内容:信号、管道或套接字上的字节,或者只是让 A 启动B 或者有一个运行 A 然后运行 ​​B 的脚本。

如果这不可能,至少安排 A 将文件写入一个临时名称,然后在写入完成后将其移至最终名称。然后让 B 仅监视非临时文件。

相关内容