Linux文件的三个时间属性

2020-11-03 15:19:15 浏览数 (1)

时间属性介绍

Linux下一个文件通过stat命令可以查看到这个文件时间方面的属性,具体信息如下:

代码语言:javascript复制
# 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的时间。

代码语言:javascript复制
# 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被刷新。

代码语言:javascript复制
# 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的ModifyChange都被刷新。

代码语言:javascript复制
# 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.txtChange被刷新。

假如我们用vi命令把文件test.txt打开, 然后保存退出,那么test.txtAccess、ModifyChange都会被刷新。

同时我们也可以使用命令touch更新test.txt的Access和Modify时间:

代码语言:javascript复制
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实现逆序排序

代码语言:javascript复制
ls -alrt # 按修改时间排序
ls --sort=time -lra # 等价于> ls -alrt
ls -alrc # 按创建时间排序
ls -alru # 按访问时间排序

不管你是根据什么排序,加上-r 就会反序。

0 人点赞