Linux系统中每个文件都关联着三类时间属性,分别是访问时间、修改时间和状态更改时间,掌握查看这些时间的方法能帮助我们更好地追踪文件的操作记录。访问时间指文件最后一次被读取的时间,修改时间指文件内容最后一次被修改的时间,状态更改时间指文件元数据最后一次被修改的时间。

使用ls命令查看文件时间
ls是Linux下最常用的文件列表命令,通过添加不同的参数可以直接查看文件的修改时间,操作方式比较简单。
查看文件的修改时间
直接使用ls -l命令就可以查看文件的修改时间,默认显示的修改时间会精确到分钟。
# 查看当前目录下test.txt文件的详细信息,包含修改时间 ls -l test.txt # 输出示例:-rw-r--r-- 1 root root 12 3月 15 14:30 test.txt # 其中3月 15 14:30就是test.txt的修改时间
查看文件的访问时间和状态更改时间
如果需要同时查看访问时间和状态更改时间,可以添加-u和-c参数,也可以结合--time参数指定显示的时间类型。
# 查看文件的访问时间 ls -lu test.txt # 查看文件的状态更改时间 ls -lc test.txt # 同时显示修改时间、访问时间、状态更改时间 ls -l --time=atime --time=ctime test.txt
使用stat命令查看完整文件时间
stat命令可以输出文件更完整的时间信息,包含三类时间的精确时间戳,适合需要获取完整时间属性的场景。
# 查看test.txt的完整文件信息 stat test.txt # 输出示例: # File: test.txt # Size: 12 Blocks: 8 IO Block: 4096 regular file # Device: 801h/2049d Inode: 123456 Links: 1 # Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) # Access: 2024-03-15 14:25:10.123456789 +0800 # Modify: 2024-03-15 14:30:05.987654321 +0800 # Change: 2024-03-15 14:30:05.987654321 +0800 # Birth: -
从上面的输出可以看到,Access对应访问时间,Modify对应修改时间,Change对应状态更改时间,时间精确到纳秒,还包含了时区信息。
三类文件时间的区别说明
很多用户会混淆三类时间的含义,下面通过表格清晰展示它们的区别:
| 时间类型 | 含义 | 触发修改的场景 |
|---|---|---|
| 访问时间(atime) | 文件最后一次被读取的时间 | 使用cat、less等命令查看文件内容,或者使用grep搜索文件内容时 |
| 修改时间(mtime) | 文件内容最后一次被修改的时间 | 使用echo追加内容、vim编辑保存文件内容、覆盖文件内容时 |
| 状态更改时间(ctime) | 文件元数据最后一次被修改的时间 | 修改文件权限、修改文件所有者、修改文件大小、修改硬链接数量时 |
补充:修改文件时间的方法
如果需要手动修改文件的时间属性,可以使用touch命令,该命令不仅可以创建空文件,还可以修改文件的访问时间和修改时间。
# 将test.txt的访问时间和修改时间都修改为当前系统时间 touch test.txt # 将test.txt的修改时间修改为指定时间 touch -m -d "2024-03-10 09:00:00" test.txt # 将test.txt的访问时间修改为指定时间 touch -a -d "2024-03-10 09:00:00" test.txt
需要注意的是,touch命令修改的是文件的访问时间和修改时间,状态更改时间会在执行touch命令后自动更新为当前时间,因为修改时间属性属于元数据变更。