Pages

Tuesday, 30 July 2024

Linux下,文件的修改时间

 通过ls这个命令,我们可以了解到文件的许多参数。在Linux下,关于文件的时间参数有三个,这三个参数的主要用途和意义如下:
modification time (mtime):
当该文件的内容数据变更时,就会升级这个时间。内容数据指的是文件的内容,而不是文件的属性或权限。

status time (ctime):
当该文件的状态 (status)改变时,就会升级这个时间,举例来说,像是权限与属性被更改了,都会升级这个时间。

access time (atime):
当该文件的内容被取用时,就会升级这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man.config ,就会升级该文件的 atime 了。

举例来说,我们可以查看/etc/man.config这个文件时间:

[root@lmode ~]# ls -l /etc/man.config
-rw-r--r--. 1 root root 4940 Apr  3  2012 /etc/man.config
[root@lmode ~]# ls -l --time=atime /etc/man.config
-rw-r--r--. 1 root root 4940 Nov 23 04:43 /etc/man.config
[root@lmode ~]# ls -l --time=ctime /etc/man.config
-rw-r--r--. 1 root root 4940 Dec 17  2012 /etc/man.config
从上面的例子可以看到,在默认情况下,ls显示出来的是该文件的mtime,就是这个文件内容上次被更动的时间。

文件的时间是很重要的,因为,如果文件的时间误判的话,可能会造成某些程序无法顺利的运行。有些时候,我们可能发现某个文件的时间快于系统时间(某些情况下,系统时间跑快,然后又创建了某些文件,等时间调回来后导致文件时间快于系统时间),这个时候可以用touch命令来修订时间。

touch命令参数和用法

[root@lmode ~]# touch [-acdmt] 文件
选项与参数:
-a  :仅修订 access time;
-c  :仅修改文件的时间,若该文件不存在则不创建新文件;
-d  :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m  :仅修改 mtime ;
-t  :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]
实例1:
[root@lmode ~]#cd /tmp
[root@lmode tmp]# touch test
[root@lmode tmp]# ls -l test
-rw-r--r-- 1 root root 0 Nov 24 22:59 test
从上面可以看到,test这个文件大小是0。如果touch后面有接文件,则该文件的三个时间(atime/ctime/mtime)都会升级为目前的时间。如果该文件不存在,则会主动创建一个空的文件。

实例2:将 ~/.bashrc 复制成为 bashrc

[root@lmode tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r-- 1 root root 176 Oct 27 14:27 bashrc
-rw-r--r-- 1 root root 176 Nov 24 22:32 bashrc
-rw-r--r-- 1 root root 176 Nov 24 23:08 bashrc
我们可以发现数据的内容与属性是被复制过来的,因此文件内容时间(mtime)与原本文件相同。但是由于这个文件是刚刚被创建的,因此状态(ctime)与读取时间就便呈现在的时间。

实例3:修改实例2的 bashrc 文件,将日期调整为两天前

[root@lmode tmp]# touch -d "2 days ago" bashrc
[root@lmode tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r-- 1 root root 176 Nov 22 23:19 bashrc
-rw-r--r-- 1 root root 176 Nov 22 23:19 bashrc
-rw-r--r-- 1 root root 176 Nov 24 23:19 bashrc
范例4:将上个范例的 bashrc 日期改为 2014/11/24 11:32

[root@lmode tmp]# touch -t 1411241132 bashrc
[root@lmode tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r-- 1 root root 176 Nov 24  2014 bashrc
-rw-r--r-- 1 root root 176 Nov 24  2014 bashrc
-rw-r--r-- 1 root root 176 Nov 24 23:25 bashrc
可以看到,日期在 atime 与 mtime 都改变了,但是 ctime 则是记录目前的时间。透过 touch 这个命令,我们可以轻易的修订文件的日期与时间。并且也可以创建一个空的文件!

不过,要注意的是,即使我们复制一个文件时,复制所有的属性,但也没有办法复制 ctime 这个属性的。ctime 可以记录这个文件最近的状态 (status) 被改变的时间。无论如何,还是要告知大家我们平时看的文件属性中,比较重要的还是属于那个 mtime。我们关心的常常是这个文件的内容是什么时候被更改了。

No comments:

Post a Comment