























其实 Linux 是支持文件的创建时间的呢。不过不是所有文件系统都支持,比如 ext4、xfs、btrfs 都支持,zfs、vfat、ntfs 不支持。
但是呢,用户基本上是看不到的。文件系统有记录,但是没有 API 可以获取到这个数据。所以你用 stat 命令的话,会看到「创建时间」一行总是「-」。用 debugfs 搞 ext4 是可以的,但是那个需要 root 权限,并且一不小心会搞坏文件系统。
最近,我阅读内核源码时,忽然发现内核已经通过 4.11 版本引入的 statx 系统调用支持获取创建时间了。字段名里用的是 btime(birth time),没有用 crtime(creation time),也没有用大写的 Btime 呢。
但是 glibc 并没有支持,所以要用 syscall 函数来调用。也不是很复杂。不过我正着手用 Rust 实现的时候,却在内核源码树里找到了 samples/statx/test-statx.c 这么个文件。原来有现成的啊!
gcc 编译一下,还真好用:
>>> statx / statx(/) = 0 results=fff Size: 224 Blocks: 0 IO Block: 4096 directory Device: fe:01 Inode: 96 Links: 17 Access: (0755/drwxr-xr-x) Uid: 0 Gid: 0 Access: 2018-07-11 13:33:08.659477830+0800 Modify: 2018-03-30 15:06:02.645864827+0800 Change: 2018-03-30 15:06:02.645864827+0800 Birth: 2017-06-19 21:07:53.653467000+0800
2019年09月03日更新:现在(coreutils 8.31)stat 命令已经支持创建时间了。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。