每天一个Linux命令-9(Find–atime –ctime –mtime)

本文详细解释了Linux中find命令的-atime、-ctime及-mtime选项的用法与区别,包括这些时间戳的具体含义及其如何配合-n、+n进行文件搜索。

Find–atime –ctime –mtime的用法与区别总结


周五有同事问起find命令中-mtime n、-mtime –n以及-mtime +n的用法区别,当时虽然记得这里n是n个24个小时的意思,也是对所有这几个属性详细的用法却一知半解,索性周末仔细google并且实践了一番,终于理清楚了个中乾坤。

find . –atime n        find . –ctimen            find . –mtime n

find . –atime –n       find . –ctime–n           find . –mtime -n

find . –atime +n       find . –ctime+n           find . –mtime +n

一、atime、ctime与mtime

atime是指access time,即文件被读取或者执行的时间,修改文件是不会改变access time的。网上很多资料都声称cat、more等读取文件的命令会改变atime,但是我试验时却发现使用cat、more时atime没有被修改。这个问题需要另外做研究探讨。

ctime即change time文件状态改变时间,指文件的i结点被修改的时间,如通过chmod修改文件属性,ctime就会被修改。

mtime即modify time,指文件内容被修改的时间。

 

使用stat可以查看文件的atime、ctime、mtime。

例:

stat ~/.bashrc

  File:`/home/user_00/.bashrc'

  Size: 1177            Blocks: 8          IO Block: 4096   regular file

Device: 801h/2049d      Inode:663962      Links: 1

Access: (0644/-rw-r--r--) Uid: ( 1003/ user_00)   Gid:(  100/  users)

Access: 2009-12-21 10:45:35.000000000 +0800

Modify: 2009-12-21 10:45:35.000000000 +0800

Change: 2009-12-2110:45:35.000000000 +0800

 

也可以使用ls查看文件的atime、ctime、mtime。

通常情况下我们使用的ls –l ~/.bashrc指示的是文件的modify time。

         ls –lu ~/.bashrc 或者ls –l –time=atime~/.bashrc指示的是文件的access time

         ls –lc ~/.bashrc 或者ls –l –time=ctime~/.bashrc 指示的是文件的change time

 

使用touch可以改变这三个时间。关于使用touch改变atime、ctime、mtime的方法,此处不做介绍。

二、find . –mtime中的参数n

find . –mtime n中的n指的是24*n, +n、-n、n分别表示:

+n: 大于n

-n:    小于n

n:等于n

但是man find里这样的解释还是比较令人费解的,不如直接看find . -mtime 中的用法

find . –mtime n:  File waslast modified n*24 hours ago.

最后一次修改发生在距离当前时间n*24小时至(n+1)*24 小时

find . –mtime +n:

最后一次修改发生在n+1天以前,距离当前时间为(n+1)*24小时或者更早

find . –mtime –n:

最后一次修改发生在n天以内,距离当前时间为n*24小时以内

### 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、付费专栏及课程。

余额充值