欢迎各位兄弟 发布技术文章
这里的技术是共享的
在 Linux 系统中,查看文件的创建时间(creation time / birth time)比查看修改时间或访问时间要复杂一些,因为标准的 stat
命令和 ls
命令默认不显示创建时间。以下是几种查看文件创建时间的方法:
bashstat filename
在支持的系统中(如 ext4、btrfs、xfs 等现代文件系统),输出中会包含 Birth:
字段:
File: filename
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 1572865 Links: 2
Access: 2023-01-01 10:00:00.000000000 +0800
Modify: 2023-01-01 10:00:00.000000000 +0800
Change: 2023-01-01 10:00:00.000000000 +0800
Birth: 2023-01-01 09:30:00.000000000 +0800
bashdebugfs -R 'stat <inode_number>' /dev/sdX
首先获取文件的 inode 号:
bashls -i filename
然后:
bashsudo debugfs -R "stat <inode_number>" /dev/sdX
bashfind /path/to/file -printf "%C+\n"
不是所有文件系统都支持记录创建时间:
支持的:ext4、btrfs、xfs、zfs
不支持的:ext3及更早版本、fat、ntfs(挂载时)
备份或复制文件时,创建时间可能会丢失,因为很多工具不保留这个属性
创建时间(Birth time)与三种常见时间的区别:
atime:最后访问时间
mtime:最后修改时间(内容)
ctime:最后改变时间(元数据)
birth time:文件创建时间(不是所有系统都支持)
只显示创建时间:
bashstat -c %w filename
显示完整时间信息:
bashstat -c "Access: %x%nModify: %y%nChange: %z%nBirth: %w" filename
如果文件系统不支持 birth time,这些命令会显示 -
。