设置创建或更改时间戳
- 2024-11-14 08:29:00
- admin 原创
- 18
问题描述:
使用utimes
、futimes
、futimens
等,可以设置文件的访问和修改时间戳。
修改时间是文件数据最后一次更改的时间。同样,“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
基本上有两种选择:
内核略有变化(代码包含在链接中)
将系统时钟更改为所需的 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
)。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件