我正在用PHP编写取证磁盘目录脚本。该脚本遍历文件系统,收集有关每个文件或目录的各种元数据和统计信息,并将该信息存储在SQL数据库中。对于我的应用程序来说,文件系统在任何可能的范围内都保持不变是至关重要的。以只读方式挂载文件系统是一个选项,但不是一个好选项。
我遇到的问题是我脚本中的某些内容正在修改文件的ctimes。在脚本显示ctime之前和之后对文件运行stat已更改为脚本的执行时间。我理解并期望atimes被修改,并且已成功缓存atime,读取文件,然后将原始atime写回来。但是如果没有特别的努力,不能随意修改ctimes。
以下是针对每个文件运行的相关命令。请注意,这是一个Mac系统,并且有一些特定于Mac的命令:
#get stat
stat -x $path
#directory item count excluding dotfiles
find $path \( ! -regex '.*/\..*' \) | wc -l
#get size
du -ks $path
#get HFS+ attrs (Mac)
GetFileInfo -P $path
#get quicklook thumbnail (Mac)
qlmanage -t -f 2 -o /tmp/thumb.jpg $path
#get media thumbnail
ffmpegthumbnailer -i $path -o /tmp/ -s 200 -c png
#get spotlight metadata (Mac)
mdls -plist - $path
#get mediainfo
mediainfo --Output=XML $path
#get exif
exiftool -php $path
此外,还使用了许多PHP的内置文件方法:
$splFileInfo->getSize();
$splFileInfo->getLinkTarget();
$splFileInfo->getRealPath();
$splFileInfo->getInode();
$splFileInfo->getPerms();
$splFileInfo->getOwner();
$splFileInfo->getGroup();
$splFileInfo->getCTime();
$splFileInfo->getMTime();
我也在生成哈希:
md5_file($path);
有没有一个善良的灵魂可以在这个列表中看到任何可以想象修改文件的ctime的东西?据我所知,只有在文件或文件的元数据被更改时,ctime才会发生变化。这些命令都不应该这样做。