设置创建或更改时间戳

Tha*_*tos 22 linux posix timestamp

使用utimes,futimes,futimens等,也可以设置一个文件的访问和修改时间戳.

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

是否有设置更改时间戳的功能?(其中"更改"是属性修改或'ctime',而不是修改时间'mtime'.)(我理解想要更改更改时间戳的循环性质,但想想归档软件 - 确切地恢复文件会很好因为它是.)

创建时间戳是否有任何功能?(我意识到这ext2不支持这个,但我想知道Linux是否支持,对于那些支持它的文件系统.)

如果不可能,那背后的原因是什么呢?

ism*_*ail 21

对于ext2/3并可能为ext4你可以做到这一点debugfs的工具,假设你要更改的ctime文件/tmp/foo驻留在磁盘/dev/sda1我们要设置的ctime到201001010101,这意味着2010 01月01日,时间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
Run Code Online (Sandbox Code Playgroud)

Command Line Kung Fu博客获取的信息.

  • @ eitan27如果安装了磁盘,AFAIK debugfs将拒绝工作,因为它可能会损害磁盘上的数据. (2认同)
  • @Eitan:因为您正在更改磁盘上的字节,所以“不”通过内核的 VFS 缓存。因此内核的内存数据可能与磁盘上的数据结构不同步。 (2认同)

Eit*_*tan 8

我有类似的问题,并在这里写了我的答案.

/sf/answers/1194641661/

基本上有两种选择:

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


oli*_*ver 5

根据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.