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 命令用于筛选。