诞生时间是在多个Linux本机文件系统中,而不仅仅是ext4。
自Linux内核4.11版(2017年4月)以来,有一个新的statx()
系统调用来检索它。然而,相应的包装功能尚未加入到GNU libc的,但(如2018年6月26日。的2019编辑目前在2.28加的),像GNU工具stat
,ls
,find
尚未更新使用它(2019-08- 22stat
在具有glibc 2.28或更高版本的GNU / Linux系统上编辑 GNU 支持它,因为coreutils 8.31)
您可以通过以下方式完成此操作perl
:
perl -MPOSIX -e '
require "syscall.ph";
$buf = "\0" x 0x100; # enough space for a struct statx
for (@ARGV) {
# hardcode: AT_FDCWD == -100
# AT_SYMLINK_NOFOLLOW = 0x100 (lstat()-like)
# STATX_BTIME = 0x800 for the mask
# 80: offset of the btime in the struct
syscall(&SYS_statx, -100, $_, 0x100, 0x800, $buf) == 0
or die "$_: $!\n";
($t, $n) = unpack("x80QQ", $buf);
$n = sprintf("%09d", $n);
print strftime("%F %T.$n %z\n", localtime $t)
}' -- "$file"
如果您syscall.ph
没有SYS_statx
,也可以对其进行硬编码。在amd64体系结构上为332。或尝试:
printf '#include <syscall.h>\n__NR_statx\n' | gcc -E -xc - | tail -n 1
现在,出生时间几乎没有用。这不是文件中数据的存在时间(数据在创建后即写入文件中),也不一定是该名称在目录中出现文件的时间(它可能已被创建为其他名称并重命名或链接了)在那里,内容或属性在两次之间进行了多次更改。
debugfs
。