设置创建或更改时间戳

2024-11-14 08:29:00
admin
原创
133
摘要:问题描述:使用utimes、futimes、futimens等,可以设置文件的访问和修改时间戳。修改时间是文件数据最后一次更改的时间。同样,“ctime”或更改时间是文件属性(如权限)最后一次更改的时间。(Linux/POSIX 维护三个时间戳:mtime 和 ctime(已讨论过)以及“atime”(访问时...

问题描述:

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

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

是否有设置更改时间戳的函数?(其中“更改”是属性修改或“ctime”,而不是修改时间“mtime”。)(我理解想要更改更改时间戳的周期性,但想想归档软件 - 将文件恢复到原来的状态会很好。)

是否有任何用于创建时间戳的功能?(我知道它ext2不支持这一点,但我想知道 Linux 是否支持那些支持它的文件系统。)

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


解决方案 1:

对于ext2/3可能的情况,ext4您可以使用工具来执行此操作debugfs,假设您想要更改位于磁盘上的ctime文件,我们要将 ctime 设置为2010 年 1 月 1 日,时间 01:01:/tmp/foo`/dev/sda1`201001010101

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

# 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博客。

解决方案 2:

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

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

基本上有两种选择:

  1. 内核略有变化(代码包含在链接中)

  2. 将系统时钟更改为所需的 ctime,触摸文件,然后恢复当前时间。(链接中包含的 shell 脚本)。

解决方案 3:

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

解决方案 4:

最简单的方法:

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

我在Windows 7上尝试了此操作,成功更改了所有三个时间戳。Linux 上的 stat 命令显示所有三个时间戳都已更改。

解决方案 5:

下面的脚本自动运行debugfs ... set_inode_field ... ctime ...ismail 的答案中的许多文件。它将从 中的文件/media/MYUSER/MYFS/FOO/BAR(递归地)复制 ctime 值到/media/MYUSER/MYFS2/FOO/BAR,并/media/MYUSER/MYFS2作为副作用 umount 。它仅在 的文件系统/media/MYUSER/MYFS2为 ext2、ext3 或 ext4 时才有效(因为debugfs仅适用于这些文件系统)。

mydev2="$(df /media/MYUSER/MYFS2 | perl -ne '$x = $1 if !m@^Filesystem @ and m@([^ ]+) @; END { print "$x
" }')"
cd /media/MYUSER/MYFS
find FOO/BAR -type f | perl -ne 'chomp; my @st = lstat($_); if (@st and -f(_)) { s@"@""@g; print "set_inode_field \"/$_\" ctime @$st[10]
" }' >/tmp/sif.out
sudo umount /media/MYUSER/MYFS2  # Repeat until success.
sudo debugfs -w -f /tmp/sif.out /dev/"$mydev2"

它可以正确处理带有空格和特殊字符的文件名。

它的工作与时区无关。debugfs 的一个限制是它的精度为秒,它会忽略任何更小的精度(例如毫秒、微秒、纳秒)。根据所使用的 debugfs 版本,它可能使用 32 位时间戳,因此它可以正确处理 2038-01-19 之前的日期。

如果当前用户没有足够的读取权限/media/MYUSER/MYFS,则应以 root 身份运行上述命令(sudo bash)。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1102  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   64  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   54  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   65  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   59  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用