如何在Unix上获取文件的实际创建时间?

inc*_*kka 8 unix file-management filesystems administration stat

黑客攻击后,我正在通过 linux cli 检查我的专用 Web 服务器中的一些文件,发现一些文件已被“touch”命令修改以更改日期。我愿意获得这些特定文件的确切文件创建日期。我已经试过跟随

stat
ls -ld
Run Code Online (Sandbox Code Playgroud)

那些没有提供磁盘上的文件写入日期(创建日期)

还有其他方法可以获取文件创建日期吗?(文件写入磁盘的实际日期)

use*_*ser 10

您正在寻找的是在 *nix 上称为文件出生时间的内容

不幸的是,大多数 *nix 文件系统不会跟踪那条信息。

如果它可用,stat则应显示它的最新版本。否则,您最好的选择可能是与备份中的文件列表进行比较(您确实有备份,对吗?)以查看添加了哪些文件。

~$ stat .bashrc
  File: `.bashrc'
  Size: 3539            Blocks: 9          IO Block: 3584   regular file
Device: 24h/36d Inode: 204095      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/ michael)   Gid: ( 1000/ michael)
Access: 2013-12-11 09:41:50.315475289 +0100
Modify: 2013-08-16 21:28:42.000000000 +0200
Change: 2013-09-14 01:55:27.167869741 +0200
 Birth: -
~$ 
Run Code Online (Sandbox Code Playgroud)

如您所见,没有“出生”时间戳,这意味着我用于主目录的文件系统(在我的情况下为 ZFS)要么不存储该信息,要么不通过 Linux 文件系统公开它以 stat 知道的方式分层。无论哪种方式,效果都大致相同:没有可用的信息。

上面说,即使在一个跟踪文件出生时间的系统上,我也不会特别惊讶,类似的东西cp --copy-contents --preserve=timestamps /dev/null /tmp/somefile && cat ./somefile >> /tmp/somefile会有效地消除任何类似的东西。因此,即使有可用的出生时间,您也不应该依赖它们来处理任何重要的事情,例如评估安全漏洞的影响。

在大多数系统上,您可以获得的最接近的可能是文件修改时间或 mtime,它会显示哪些 stat 以及大多数文件系统会跟踪哪些。但是,正如您所注意到的,使用touch.