用于检查文件何时重命名的Linux/Unix命令

用于检查文件何时重命名的Linux/Unix命令,linux,unix,Linux,Unix,是否有在重命名文件时显示的特定Unix/Linux命令?我有一个文件在Linux的盒子里,我想知道这个文件是什么时候被重命名的。我尝试了ls-ltr,但该命令只显示创建它的日期,而不显示上次修改它的日期 是否有特定的Unix/Linux命令来执行此操作?您可以使用Inotify库在文件发生问题时收到通知。 很可能存在到脚本语言的绑定。您可以使用 stat filename 检查上次读取时的访问权限 更新时,选中“修改” 检查Change是否已重命名 加上其他文件信息,如块、索引节点等。行为将取

是否有在重命名文件时显示的特定Unix/Linux命令?我有一个文件在Linux的盒子里,我想知道这个文件是什么时候被重命名的。我尝试了
ls-ltr
,但该命令只显示创建它的日期,而不显示上次修改它的日期


是否有特定的Unix/Linux命令来执行此操作?

您可以使用Inotify库在文件发生问题时收到通知。 很可能存在到脚本语言的绑定。

您可以使用

stat filename
检查上次读取时的访问权限

更新时,选中“修改”

检查
Change
是否已重命名


加上其他文件信息,如块、索引节点等。

行为将取决于文件系统类型。在经典的Unix文件系统(尤其是Mac OS X HFS文件系统)上,文件系统中文件重命名的有趣之处在于它根本不会影响文件的inode;它只影响文件从/移动到的目录。因此,在单个文件系统中,重命名更改的唯一时间戳是保存文件的目录的修改时间。例如*:

这意味着在这样的文件系统上,您无法知道文件在重命名后的某个时间是何时重命名的

*
fl
是一个自制命令;调用相当于Mac OS X
stat
invocation
stat-f“%Sa%Sm%Sc%N”
。这只与GNU/Linux
stat
命令稍微相关

另一方面,经验证据表明,LinuxExt4文件系统确实会随着inode本身修改时间的变化而记录名称的变化

$ stat -c '%x %y %z %n' test.dat
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 test.dat
$ mv test.dat test.data
$ stat -c '%x %y %z %n' test.data
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-22 09:11:49.074339525 -0700 test.data
$
因此,您可以做什么取决于您运行的O/S和您的文件所在的文件系统类型

如果inotify服务可用并正在运行,则可以记录文件重命名事件,但如果不记录事件,则无法“事后”了解文件重命名的时间


目录上的修改时间不能很好地指示特定文件的更改时间;无论何时创建、移动或删除任何文件,它都会更改。如果目录中只有一个文件,那么更改时间可能指示该文件的创建或重命名时间,但单文件目录是例外,而不是规则。

在AIX上,您可以使用与“stat”等效的

istat文件名


您应该能够知道文件最近一次更新、修改和访问的时间,最短为几秒,以及一些详细信息。

谢谢,我绝对可以这样做……但是如果某个特定文件已经重命名,并且想知道它是何时重命名的,这就是我想知道的…@user2579439您无法知道过去重命名的情况。您可以在T时了解重命名。记录它,或立即处理它,但您无法了解过去的重命名。更多信息请参见Jonathan answer。更改inode时的更改时间报告。重命名不会更改inode。我指的是
change
字段。我从来没有说过在重命名后inode会发生变化;但你的回答是“如果它被重命名,就改变”。“更改”时间是inode更改的时间(权限设置、所有者更改或大小修改)。如果重命名文件(在文件系统中),则文件上的“更改时间”不会更改。你的回答被一些人接受了,他们不明白你所说的并没有回答他们似乎在问的问题……这让我对他们真正在问什么感到困惑。哦,好吧,这就是生活。@JonathanLeffler
$touch foobar;统计foobar
->
变更:2013-07-22 11:27:04.380732148-0500
$mv foobar foobar2;统计foobar2
->
更改:2013-07-22 11:27:10.188731974-0500
。这听起来和OP想要的完全一样,而不是你描述的那样。@lzkata:哪种FS类型?对请参阅我的更新答案,其中指出ext4确实在file inode的ctime字段中记录了重命名文件的时间,但与Mac OS X上的HFS不同,后者没有特别更改文件的inode。有趣的是,POSIX条目没有说明任何关于更改文件inode的内容;它确实声明“成功完成后,
rename()
应标记每个文件的父目录的上次数据修改和上次文件状态更改时间戳进行更新。”这很容易演变为一个编程问题:“如何在Unix/Linux上编写程序,以告知文件何时更改?是否有任何命令已经做到了这一点?”附带一个子问题“这些命令可移植吗?”这是shell编程的重要信息,而编程(包括shell编程)是专门针对这一主题的。
$ stat -c '%x %y %z %n' test.dat
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 test.dat
$ mv test.dat test.data
$ stat -c '%x %y %z %n' test.data
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-22 09:11:49.074339525 -0700 test.data
$