linux中atime mtime ctime

本文详细解释了UNIX系统中文件的三种时间戳:访问时间(atime)、修改时间(mtime)和状态更改时间(ctime)的区别及应用场景。通过具体的例子帮助读者理解这三种时间戳的变化条件。
当你同熟练的UNIX用户进行交谈时,你经常会听到他们傲慢地讲出术语“改变时间(change time)”和“修改时间(modification time)”。对于许多人(和许多字典而言),改变和修改是相同的。这里会有什么不同那?

改变和修改之间的区别在于是改某个组件的标签还是更改它的内容。如果有人说chmod a-w myfile,那么这是一个改变;如果有人说echo foo >> myfile,那么
这是一个修改。改变是文件的索引节点发生了改变;修改是文本本身的内容发生了变化。[文件的修改时间也叫时间标志 (timestamp).]

只要讨论改变时间和修改时间,就不可能不提到“访问时间(access time)”.访问时间是文件最后一次被读取的时间。因此阅读一个文件会更新它的访问时间,当它的改变时间并没有变化(有关文件的信息没有被改变),它的修改时间也同样如此(文件本身没有被改变)

有时,在许多地方改变时间或者“ctime”被错误地写成“创建时间”,包括某些UNIX参考手册。不要相信他们
下面是我man出来的内容,仅供参考!

st_atime
Time when file data was last accessed. Changed by the
following functions: creat(), mknod(), pipe(),
utime(2), and read(2).

st_mtime
Time when data was last modified. Changed by the fol-
lowing functions: creat(), mknod(), pipe(), utime(),
and write(2).

st_ctime
Time when file status was last changed. Changed by the
following functions: chmod(), chown(), creat(),
link(2), mknod(), pipe(), unlink(2), utime(), and
write().

ls显示出的time应该是mtime。

touch后,文件的三个时间应该都会改变,可以试一试。

问题描述
文件的 ctime、mtime、atime 之间有什么区别?
配置信息
解决方法
文件的 Access time,atime 是在读取文件或者执行文件时更改的。
文件的 Modified time,mtime 是在写入文件时随文件内容的更改而更改的。
文件的 Create time,ctime 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的。

因此,更改文件的内容即会更改 mtime 和 ctime,但是文件的 ctime 可能会在 mtime 未发生任何变化时更改 - 在权限更改,但是文件内容没有变化的情况下。
ls(1) 命令可用来列出文件的 atime、ctime 和 mtime。
ls -lc filename 列出文件的 ctime
ls -lu filename 列出文件的 atime
ls -l filename 列出文件的 mtime

atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的 信息。而这是加了 noatime 取消了, 不代表真實情況.反正, 這三個 time stamp 都放在 inode 中.若 mtime, atime 修改, inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟著要改了.之所以在 mount option 中使用 noatime, 就是不想 file system 做太多的修改, 而改善讀取效能.
### Linux `find` 命令中 `atime`, `ctime`, 和 `mtime` 的区别及具体用法 #### 时间戳定义 在 Linux 中,`atime`, `ctime`, 和 `mtime` 是与文件相关的时间戳属性: - **Access Time (`atime`)**:表示文件最后一次被访问的时间。当文件的内容被读取时,`atime` 会被更新[^3]。 - **Modification Time (`mtime`)**:表示文件内容最后一次被修改的时间。当文件的实际内容发生变化时,`mtime` 会被更新[^3]。 - **Change Time (`ctime`)**:表示文件状态信息最后一次被修改的时间。这包括文件的元数据(如权限、所有者、组等)或文件内容的变化。因此,即使是更改了文件的权限或所有者,`ctime` 也会被更新。 #### `find` 命令中的使用方法 `find` 命令允许通过这些时间戳来过滤文件: ##### `-atime n` 查找在过去 `n` 天内被访问过的文件。如果指定的是正数,则表示超过 `n` 天;如果是负数,则表示少于 `n` 天。 - `-atime n`:查找恰好在 `n` 天前被访问的文件。 - `-atime +n`:查找超过 `n` 天未被访问的文件。 - `-atime -n`:查找最近 `n` 天内被访问过的文件。 示例代码: ```bash # 查找过去一天内被访问过的文件 find /path/to/directory -type f -atime -1 ``` ##### `-mtime n` 查找在过去 `n` 天内内容被修改过的文件。其逻辑与 `-atime` 类似。 - `-mtime n`:查找恰好在 `n` 天前内容被修改的文件。 - `-mtime +n`:查找超过 `n` 天未被修改的文件。 - `-mtime -n`:查找最近 `n` 天内内容被修改过的文件。 示例代码: ```bash # 查找两天前被修改的文件 find /path/to/directory -type f -mtime 2 ``` ##### `-ctime n` 查找在过去 `n` 天内状态发生改变的文件。这里的“状态”不仅限于文件内容,还包括元数据变化。 - `-ctime n`:查找恰好在 `n` 天前状态发生改变的文件。 - `-ctime +n`:查找超过 `n` 天未发生状态改变的文件。 - `-ctime -n`:查找最近 `n` 天内状态发生改变的文件。 示例代码: ```bash # 查找三天前状态发生改变的文件 find /path/to/directory -type f -ctime 3 ``` #### 关键差异 | 属性 | 描述 | |------------|--------------------------------------------------------------------------------------| | `atime` | 文件最后被访问的时间,仅涉及文件内容的读操作。 | | `mtime` | 文件内容最后被修改的时间,仅涉及实际的数据写入或删除操作。 | | `ctime` | 文件状态最后被修改的时间,既可能是因为内容变更也可能因为元数据(如权限、所有权)变更[^3] | #### 实践注意事项 - 如果只需要关注文件内容是否发生了变化,应优先考虑使用 `mtime`。 - 如果需要监控文件的状态变化(比如权限调整),则应该使用 `ctime`。 - 对于频繁访问的文件系统,注意优化 `atime` 更新策略,以免影响性能。可以通过挂载选项设置 `noatime` 或 `relatime` 来减少不必要的 `atime` 更新[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值