![用简单的人类语言向初学者解释 -mtime 的含义](https://linux22.com/image/230393/%E7%94%A8%E7%AE%80%E5%8D%95%E7%9A%84%E4%BA%BA%E7%B1%BB%E8%AF%AD%E8%A8%80%E5%90%91%E5%88%9D%E5%AD%A6%E8%80%85%E8%A7%A3%E9%87%8A%20-mtime%20%E7%9A%84%E5%90%AB%E4%B9%89.png)
当然,我阅读了手册中的寥寥几行内容。我仍然对具体细节感兴趣。例如,stat / some_files
命令打印以下内容:
access 2024 (now)
modified 2022
changeded 2023
created 2023
例如,这是某个程序组件、驱动程序、库、脚本等。我感兴趣的是 2022 年修改是什么意思?这是否意味着下载软件包后,解压到适当的目录/写入磁盘正是在这个日期/时间发生的?在这种情况下,一年后“创造”意味着什么?
答案1
我想您已经了解了基础知识:
- 访问时间反映了对文件的最新访问(在文件系统上具有不同的粒度,或者如果使用
relatime
则根本不访问)noatime
- 修改时间反映了文件内容的最新修改时间
- 更改时间反映了文件元数据的最新修改
- 创建时间反映了文件在文件系统中创建的时间
对于您的情况,还有一个很重要的微妙之处:访问和修改时间可以更改,而更改和创建时间由文件系统设置。特别是,修改时间通常保存在档案中,并在提取档案时恢复。因此,如果您安装例如分发包,它包含的文件将具有与安装包的时间相对应的创建时间戳(文件被创建在你的系统上),而是与存储在其存档中的时间戳相对应的修改时间戳,这通常是构建包的时间。
因此,访问时间和修改时间是不明确的:它们是应该反映文件生命周期中的特定事件,但它们可以跳过更新(针对访问时间)或独立于特定事件进行更新。它们可以设置为任意值,因此甚至没有保证的时间顺序。
因此,从 2022 年构建的软件包中于 2023 年安装、最后一次访问于 2024 年的文件最初将具有 2023 年的创建(如果文件系统支持)和最后一次更改时间戳、2022 年的修改时间戳和 2022 年的最后访问时间戳。 2024。除了创建时间戳之外,所有其他时间戳都可以由对文件和/或包含目录具有写入权限的任何人更新。
答案2
当软件打包分发时(在 Linux 中,通常在*.rpm
或*.deb
包中,但也包括像*.tar.gz
或 之类的任何存档文件*.zip
),这些打包方法通常会保留原始系统中文件的修改时间,并在安装/时重现这些原始修改时间戳。取消存档。
有时,打包软件进行分发的个人或组织会将属于特定软件版本的所有文件的修改时间戳调整为某个已知值,以简化错误报告中文件版本的标识,或者仅反映发布日期该特定版本的。
您可能期望创建时间戳也会被保留,但创建时间不是 POSIX 规范的强制部分:一些 Unix 文件系统根本不跟踪文件创建时间,因此保留文件内容的修改时间被认为是文件中最重要的一项归档程序。
access 2024 (now)
modified 2022
changed 2023
created 2023
如果这个文件属于一个软件包,我预计该文件要么是由开发人员最后修改的,要么是在 2022 年打包发布的,修改时间反映了这一点。
它于 2023 年安装在您的系统上(如创建时间和元数据更改时间所示)。此时,安装过程会在您的系统上为该文件重现原始系统的修改时间 2022 年,尽管严格来说,2022 年您的系统上并不存在该文件。
由于修改时间 < 创建时间,该文件的内容是在其他系统上创建的,然后传输到您的系统上。
由于创建时间本质上等于元数据更改时间,而修改时间小于或等于创建时间,因此我们可以看到该文件及其元数据(所有权、权限、属性)自创建以来显然没有以任何方式进行修改。安装到您的系统。