设置创build或更改时间戳

使用utimesfutimesfutimens等等,可以在文件上设置访问和修改时间戳

修改时间是文件数据最后一次更改的时间。 同样,“ctime”或更改时间,是文件上的最后一次属性(如权限)发生更改。 (Linux / POSIX维护三个时间戳:mtime和ctime,已经讨论过了,'atime'或者访问时间。)

有没有设置更改时间戳的function? (其中“更改”是属性修改或“ctime”, 而不是修改时间“mtime”)。(我理解想要更改更改时间戳的循环性质,但认为归档软件 – 这将是很好的恢复文件因为它是。)

有创build时间戳的function吗? (我知道ext2不支持这个,但是我想知道Linux是否支持这种文件系统。)

如果不可能,背后的理由是什么?

Solutions Collecting From Web of "设置创build或更改时间戳"

对于ext2/3ext4你可以使用debugfs工具来做这件事情,假设你想改变文件/tmp/foo驻留在磁盘/dev/sda1 ctime,我们想把ctime设置为201001010101这意味着2010年1月1日,时间01:01:

警告:在执行此操作之前,必须先卸载磁盘

 # Update ctime debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1 # Drop vm cache so ctime update is reflected echo 2 > /proc/sys/vm/drop_caches 

Command Line Kung Fu博客采取的信息。

我有类似的问题,并在这里写下我的答案。

https://stackoverflow.com/a/17066309/391040

基本上有两种选择:

  1. 内核略有变化(代码包含在链接中)
  2. 将系统时钟更改为所需的ctime,触摸该文件,然后恢复当前时间。 (包含在链接中的shell脚本)。

根据http://lists.gnu.org/archive/html/coreutils/2010-08/msg00010.html ctime不能伪造(至少它不是假的):

POSIX表示,atime和mtime可以通过utimensat()系列调用系列的任意时间用户设置,但ctime 必须不可靠地跟踪任何改变文件元数据或内容的动作的当前时间。

如果您只是需要更改文件的ctime来进行某些测试/调试, 那么bindfs可能会有所帮助。 这是一个FUSE文件系统,将一个目录挂载到另一个地方,并可以对文件属性进行一些转换。 使用选项--ctime-from-mtime ,每个文件的ctime与它的mtime相同,你可以通过touch -t来设置。

最简单的方法是:

 1) change System time 2) copy paste a file on another location. 

我试过这个在Windows 7上 ,我成功地改变了所有三个时间戳。 linux上的stat命令显示所有三个时间戳都被改变了。