linux系统中文件时间的一些问题

通过一些问题,来了解linux中文件的三种时间:修改时间、改变时间、访问时间,并且给出一些对文件时间的操作方式。 Modified: 2023-07-04 20:24:23 Created: 2023-02-26 20:33:58 Tags: #linux #datetime

linux 中有几种时间?

  • 修改时间 modify time 修改内容
  • 改变时间 change time 修改文件属性,而非内容时间
  • 访问时间 access time 具体来说是访问内容时间

为什么会有几种时间?这里如果你知道英文翻译,你就明白

在 linux 系统中,文件有两个部分。一个是 metadata,一个是文件的具体内容。比如说有一个xxx.txt文件,它就包含两个部分:metadata 就是xxx.txt的基本信息,如文件的名字,权限等;另一个就是文件的具体内容,你用记事本打开能够看到的东西。对于这个xxx.txt文件,我们可以修改它的内容,也可以只修改它的文件名字。

如果只修改了 metadata,那么只有改变时间会更新,如果修改了内容,那么改变时间和修改时间都会更新。

如果访问到了文件的内容,那么访问时间也会修改。

为啥没有文件创建时间?

当然,有的系统还有创建时间 create time 创建时间,在一般的 linux 系统中并不特别看这个。

修改时间和改变时间是啥?

这个锅要扣到错误的中文翻译。对于一个文件,有两个部分:metadata 和文件信息。

metadata 包含一些文件的基本信息,比如说时间信息,所有权问题。而文件内容就是实实在在的内容了。

啥叫访问时间

是读取文件的内容,而不是 metadata。

访问时间是指读取一次文件的内容,如 cat less,但是 ls stat 不会改变。

如何查看时间

shell 的话可以使用stat命令。

stat path_to_file

或者用ls命令:

ls -l # modify time, l means last (modify)
ls -lc # change time, last change time
ls -la # last access time

python 可以使用os库。

import os
status = os.stat('path_to_your_file')

如何操作时间

如何在拷贝时候保留这些时间戳呢?拷贝文件时候保留时间戳。

cp --preserve=timestamps src dst
cp -p src dst

需要说明的是,preserve 还有其它参数:

  • ownership
  • mode
  • timestamps

-p 参数的意思就是所有都保留。默认的话

rsync时`保留时间戳。

-p Preserves modification times, access times, and modes from the original file.

git 操作时候保留时间戳。

find 命令用于筛选。