我需要知道文件的创建时间。我试图运行该stat filename
命令。但是我的 fs 不会将文件创建时间存储为元数据。
[root@s1 XYZ]# stat ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
File: `./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp'
Size: 16241 Blocks: 32 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 129108489 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 509/ UNKNOWN) Gid: ( 509/ UNKNOWN)
Access: 2018-03-07 12:28:31.000000000 +0200
Modify: 2018-03-07 07:04:15.000000000 +0200
Change: 2018-03-07 12:28:31.468075157 +0200
但是,我阅读了这个站点并使用了 debugfs 命令。它显示 crtime(创建时间)。但是显示的创建时间大于(更新)修改时间。怎么了?
[root@s1 XYZ]# ls -i ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
129108489 ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
[root@s1 XYZ]# df -T ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/datavg-datalv ext4 5986257120 5645927428 36483732 100% /data
[root@s1 fcs_backup]# debugfs -R 'stat <129108489>' /dev/mapper/datavg-datalv
debugfs 1.41.12 (17-May-2010)
Inode: 129108489 Type: regular Mode: 0644 Flags: 0x80000
Generation: 3953510053 Version: 0x00000000:00000001
User: 509 Group: 509 Size: 16241
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 32
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5a9fbecf:6f990a54 -- Wed Mar 7 12:28:31 2018
atime: 0x5a9fbecf:00000000 -- Wed Mar 7 12:28:31 2018
mtime: 0x5a9f72cf:00000000 -- Wed Mar 7 07:04:15 2018
crtime: 0x5a9fbecf:6f990a54 -- Wed Mar 7 12:28:31 2018
Size of extra inode fields: 28
EXTENTS:
(0-3): 516503300-516503303
编辑 的文件未打开。我以同样的方式运行。
[root@s1 XYZ]# stat ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
File: `./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp'
Size: 16241 Blocks: 32 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 129108489 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 509/ UNKNOWN) Gid: ( 509/ UNKNOWN)
Access: 2018-03-07 12:28:31.000000000 +0200
Modify: 2018-03-07 07:04:15.000000000 +0200
Change: 2018-03-07 12:28:31.468075157 +0200
[root@s1 XYZ]# debugfs -R 'stat <129108489>' /dev/mapper/datavg-datalv
debugfs 1.41.12 (17-May-2010)
Inode: 129108489 Type: regular Mode: 0644 Flags: 0x80000
Generation: 3953510053 Version: 0x00000000:00000001
User: 509 Group: 509 Size: 16241
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 32
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5a9fbecf:6f990a54 -- Wed Mar 7 12:28:31 2018
atime: 0x5a9fbecf:00000000 -- Wed Mar 7 12:28:31 2018
mtime: 0x5a9f72cf:00000000 -- Wed Mar 7 07:04:15 2018
crtime: 0x5a9fbecf:6f990a54 -- Wed Mar 7 12:28:31 2018
Size of extra inode fields: 28
EXTENTS:
(0-3): 516503300-516503303
[root@s1 XYZ]# lsof ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
[root@s1 XYZ]#
ctime 和 crtime 不能被篡改,atime 和 mtime 可以由用户进程使用
utime()
orutimes()
(或utimensat()
用于纳秒精度)系统调用设置为任意值,就像touch
通常所做的那样,或者tar
当您提取档案时(它设置修改时间文件存储在存档中(通常是过去))。您可以通过以下方式实现相同的目的:
例如,crtime 和 ctime 将设置为当前时间,而 mtime 和 atime 设置为指定的时间。
您应该说明您正在使用哪个 FS。
您正在尝试获取创建时间。但你已经说过
如果这是真的,那么无论您做什么,您都无法获得创建时间。如果文件系统不存储它,那么其他任何东西都不会!
时间戳可能非常棘手,并且并不总是意味着您认为它们的意思。例如,如果您提取 tar 或 zip 存档,则 mtime 字段将设置为存档中包含的任何时间戳(过去的某个时间)。但是 crtime 将反映您提取档案的时间/日期。
常规程序不会修改 crtime,因此如果更改 mtime,则不会更改 crtime。
所以即使 crtime 是正确的,mtime 通常也会被设置为完全不同的东西。