charleschchen
作者charleschchen·2021-08-02 17:40
系统架构师·浪潮商用机器有限公司

在AIX上使用fsdb查看文件创建时间

字数 2653阅读 4421评论 1赞 3

陈炽卉
肖斌

在问题定位、审计追溯等等场合,我们常常需要确认文件的实际创建时间。
POSIX规范要求了三个文件时间属性,分别是:

名称含义
Access Time (atime)访问时间,即最近一次open打开文件的时间,可以是读、写或执行打开;
Modification Time (mtime)修改时间,即最近一次修改文件内容的时间,默认ls -l显示的就是该时间;
Change time (ctime)变更时间,即最近一次文件元数据修改的时间,例如权限、属主等信息变更。

参考:
File Times in AIX

但文件创建时间并非上述三个标准文件时间属性之一,因此并不能使用标准UNIX命令查询到该时间。

针对此,我们可以使用AIX 调试文件系统命令,即fsdb,来查询相关文件或目录的创建时间。

特别说明
fsdb可能修改未挂载(unmounted)文件系统元数据,不审慎操作
可能导致数据修改或损坏,请谨慎使用。

1. 确认文件、目录的inode号

先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.

2. 使用fsdb确认文件创建时间

先使用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 条评论

owenlin717owenlin717系统工程师柯莱特
2021-08-04 18:30
谢谢分享
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广