时间属性介绍
Linux下一个文件通过stat
命令可以查看到这个文件时间方面的属性,具体信息如下:
# stat tengine-2.0.0-23tf4566.tar.gz
File: 'tengine-2.0.0-23tf4566.tar.gz'
Size: 35995224 Blocks: 70304 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201842670 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 501/ UNKNOWN) Gid: ( 20/ games)
Access: 2020-07-30 14:07:46.617759798 0000
Modify: 2020-07-30 12:57:35.000000000 0000
Change: 2020-10-16 06:20:13.535869875 0000
Birth: -
如上所示,可以看出来分别有Access Modify Change
三个关于时间的属性。
此三个属性初始时间记录都是文件被创建的时间:
- Access 指最后一次读取的时间(访问)
- Modify 指最后一次修改数据的时间(修改)
- Change 指最后一次修改元数据的时间(改变)
Access的意思是访问:
在终端上用cat、more 、less、grep、sed、 cp 、file 一个文件时,此文件的Access的时间记录都会被更新(空文件例外),纯粹的access是不会影响modify和change,但会受到modify行为的影响。
用ls -lu
看到的文件时间是最近一次access
的时间。对于目录而言,只是进入目录的话不会改变它的access
时间,但只要用ls
查看了此目录的内容(无论在何处),这个目录的access
时间就会被更新。
Modify 意思是更改(内容)or 写入:
当更改了一个文件的内容的时候,此文件的modify
的时间记录会被更新。用ls -l
看到的文件时间是最近一次modify
的时间。modify的行为是三个行为中最有影响力的行为,它发生以后,会使文件的access
记录与change
记录也同时得到更新, 对于目录亦是如此。
Change 改变(状态或属性):
对一个文件或者目录作mv、chown、chgrp操作后,它的Change
时间记录被更新,change时间会受到modify行为的影响。用ls -lc
看到的文件时间是最近一次change
的时间。
# stat test.txt
File: ‘test.txt’
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201843904 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-16 06:44:21.925299516 0000
Modify: 2020-10-16 06:44:21.925299516 0000
Change: 2020-10-16 06:44:21.925299516 0000
Birth: -
# cat test.txt
lucky boy
# stat test.txt
File: ‘test.txt’
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201843904 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-16 06:44:43.911988787 0000
Modify: 2020-10-16 06:44:21.925299516 0000
Change: 2020-10-16 06:44:21.925299516 0000
Birth: -
如上用cat
命令将文件test.txt
的内容输出到终端( 执行 cat test.txt), 那么文件test.txt
只有的Access
被刷新。
# date >> test.txt
# stat test.txt
File: ‘test.txt’
Size: 39 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201843904 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-16 06:44:43.911988787 0000
Modify: 2020-10-16 06:46:56.760155796 0000
Change: 2020-10-16 06:46:56.760155796 0000
Birth: -
如上把当前的时间追加到test.txt
(执行 date >> test.txt) , 那么test.txt的Modify
和Change
都被刷新。
# chmod 777 test.txt
# stat test.txt
File: ‘test.txt’
Size: 39 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201843904 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-16 06:44:43.911988787 0000
Modify: 2020-10-16 06:46:56.760155796 0000
Change: 2020-10-16 06:48:45.676571600 0000
Birth: -
如上把test.txt
的权限改为777(执行 chmod 777 test.txt) , 那么只有test.txt
的Change
被刷新。
假如我们用vi
命令把文件test.txt
打开, 然后保存退出,那么test.txt
的Access、Modify
和Change
都会被刷新。
同时我们也可以使用命令touch
更新test.txt
的Access和Modify时间:
touch -d 1999-01-01 test.txt // 将test.txt的Access和Modify时间改为1999-01-01
touch -a test.txt // 只将test.txt的Access时间改为当前系统时间
touch -m test.txt // 只将test.txt的Modify时间改为当前系统时间
当我们用ls -l test.txt
看到的时间就是Modify
时间。
按照时间排序文件
代码语言:javascript复制# ls -l
-rw-r--r-- 1 501 games 35995224 Jul 30 12:57 tengine-2.0.0-23tf4566.tar.gz
-rw-r--r-- 1 501 games 4321420 Jul 22 14:15 tengine-2.0.0-45axfa54.tar.gz
-rw-r--r-- 1 501 games 33238934 Jul 22 15:20 tengine-2.0.0-64af1234.tar.gz
如上有3个文件,如果按照时间排序呢?
按照修改时间排序:
代码语言:javascript复制ls -alt 等价于 ls --sort=time -la
按照创建时间排序:
代码语言:javascript复制ls -alc
按访问时间排序:
代码语言:javascript复制ls -alu
以上均可使用-r
实现逆序排序
ls -alrt # 按修改时间排序
ls --sort=time -lra # 等价于> ls -alrt
ls -alrc # 按创建时间排序
ls -alru # 按访问时间排序
不管你是根据什么排序,加上-r
就会反序。