我知道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 仅监视非临时文件。