陈炽卉
肖斌
在问题定位、审计追溯等等场合,我们常常需要确认文件的实际创建时间。
POSIX规范要求了三个文件时间属性,分别是:
名称 | 含义 |
Access Time (atime) | 访问时间,即最近一次open打开文件的时间,可以是读、写或执行打开; |
Modification Time (mtime) | 修改时间,即最近一次修改文件内容的时间,默认ls -l显示的就是该时间; |
Change time (ctime) | 变更时间,即最近一次文件元数据修改的时间,例如权限、属主等信息变更。 |
但文件创建时间并非上述三个标准文件时间属性之一,因此并不能使用标准UNIX命令查询到该时间。
针对此,我们可以使用AIX 调试文件系统命令,即fsdb,来查询相关文件或目录的创建时间。
特别说明:
fsdb可能修改未挂载(unmounted)文件系统元数据,不审慎操作
可能导致数据修改或损坏,请谨慎使用。
先istat、ls -i查到文件的inode号,和所在的文件系统,例如:
我们来确认oracle用户的home目录/home/oracle的创建时间,需要先确认该目录的inode号:
# istat /home/oracle
Inode 4 on device 10/9 Directory
Protection: rwxr-xr-x
Owner: 301(oracle) Group: 1300(dba)
Link count: 5 Length 4096 bytes
Last updated: Mon Aug 2 03:46:36 CDT 2021
Last modified: Mon Aug 2 03:46:36 CDT 2021
Last accessed: Mon Aug 2 04:09:42 CDT 2021
# ls -ldi /home/oracle
4 drwxr-xr-x 5 oracle dba 4096 Aug 02 03:46 /home/oracle
由上述命令输出可知,/home/oracle目录的inode号为4.
先使用fsdb <文件系统名> ,
再敲inode <查到的inode号> ,获取对应inode的元数据信息,例如:
# fsdb /home
Filesystem /dev/hd1 is mounted. Modification is not permitted.
File System: /home
File System Size: 419417192 (512 byte blocks)
Aggregate Block Size: 4096
Allocation Group Size: 524288 (aggregate blocks)
> inode 4
Inode 4 at block 505, offset 0x800:
[1] di_fileset: 16 [18] di_inostamp: 0x60b10f98
[2] di_number: 4 [19] di_gen: 261901776
[3] di_size: 0x0000000000001000 [20] di_ixpxd.len: 4
[4] di_nblocks: 0x0000000000000001 [21] di_ixpxd.addr1: 0x00
[5] di_nlink: 5 [22] di_ixpxd.addr2: 0x000001f9
[6] di_mode: 0x000141ed di_ixpxd.address: 505
0040755 drwxr-xr-x [24] di_uid: 301
[25] di_gid: 1300
[9] di_atime.tj_nsec: 0x12751ef8 [26] di_atime.tj_sec:0x000000006107abe9
[10] di_ctime.tj_nsec: 0x0a676d7e [27] di_ctime.tj_sec:0x000000006107b0ec
[11] di_mtime.tj_nsec: 0x0a676d7e [28] di_mtime.tj_sec:0x000000006107b0ec
[12] di_otime.tj_nsec: 0x1008cd93 [29] di_otime.tj_sec:0x0000000060b110b1
[13] di_ea.flag: 0x00 [30] di_ea.len: 0
EAv1 [31] di_ea.addr1: 0x00
[15] di_ea.nEntry: 0x00 [32] di_ea.addr2: 0x00000000
[16] di_ea.type: 0x0000 di_ea.address: 0
[34] di_ea.nblocks: 0
change_inode: [m]odify, [e]a, [t]ree, or e[x]it > x
> quit
#
其中di_otime.tj_sec里面就是创建时间(0x0000000060b110b1)。
该时间格式是unix纪元时间,需要用ctime/localtime转换一下才行,注意翻译的时间基于本地时区,不同时区下翻译的时间会有差异:
# perl -e 'use POSIX; print ctime(0x0000000060b110b1)'
Fri May 28 10:48:01 2021
至此,我们就能确认/home/oracle目录的创建时间是2021年5月28日10:48:01。
注意:
细心的读者可能注意到fsdb显示了di_atime、di_ctime、di_mtime,分别对应上述POSIX三个标准文件时间属性,即访问时间、变更时间、修改时间。但由于fsdb主要基于磁盘数据,而这三个标准时间属性变更通常较为频繁,相比于实际系统当前内存数据通常会有所滞后,因此这三个标准时间属性必须以istat统计看到的为准。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞3
添加新评论1 条评论
2021-08-04 18:30