# stat main.c
Access: 2023-12-14 23:43:08.299761676 +0800
Modify: 2023-12-14 23:43:08.274761678 +0800
Change: 2023-12-14 23:43:08.274761678 +0800
Birth: -
# touch main.c
# stat main.c (all the three times changed.)
Access: 2023-12-14 23:43:37.956758479 +0800
Modify: 2023-12-14 23:43:37.893758486 +0800
Change: 2023-12-14 23:43:37.893758486 +0800
Birth: -
# for -a option,atime and ctime will change.
# for -m option,atime mtime,ctime all three will change.
字符串
我很困惑为什么touch命令也会改变ctime?
touch changes the access and/or modification timestamps of the specified files.
(As you can see,only atime and mtime are mentioned.)
# options:
-a. Change the access timestamp only.
-m. Change the modification timestamp only.
# https://www.gnu.org/software/coreutils/manual/html_node/touch-invocation.html
型
所以我很困惑。
在touch命令之后,main. c的内容与之前相同。
但是时间变了。(我不明白。)
2条答案
按热度按时间6mw9ycah1#
经过大量的谷歌搜索和阅读现有的类似问题的答案,我认为这是正确的总结:
touch
只有修改atime
的选项(访问时间)和mtime
(修改时间),默认同时,因为它们是用户应该修改的唯一2个时间戳,并且可以设置为他们喜欢的任何特定时间戳,而ctime
(更改时间)是指文件更改时的当前系统时间(因此,通过设计,用户很难设置为特定时间)。当
atime
被设置时,ctime
(Change time)没有被设置,因为文件的内容和属性(除了atime
)都没有被设置,所以没有关于文件的任何内容被C挂起。ctime
在设置mtime
时被修改,因为mtime
是文件的元数据的属性,而ctime
在设置文件的任何元数据时被设置,而不是atime
。除了上面提到的,与其他更新访问时间戳的命令(如
cat
)不同,touch
总是更新ctime
,即使用-a
调用只更新访问时间,即使时间戳实际上没有改变,也要注意时间戳何时改变:字符串
关于OP的评论:
我也很困惑,触摸不修改文件的内容,但mtime被更改。为什么?
因为你告诉它。
touch
是你调用来更新文件修改和/或访问时间的命令,所以这就是你调用它时它所做的。有关详细信息,请参阅:
klsxnrf12#
touch被指定为更改文件访问和修改时间;更改更改时间是更改文件的元数据的副作用,并且touch对此没有任何控制(另请参阅touch使用的futimens()和utimensat()函数)。