设置创建或更改时间戳

2024-11-14 08:29:00
admin
原创
18
摘要:问题描述:使用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)。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用