2

2.20Linux下修改文件时间和创建新文件

Posted by 撒得一地 on 2015年11月25日 in 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。我们关心的常常是这个文件的内容是什么时候被更改了。

标签:,

上一篇:

下一篇:

相关推荐

2 Comments

Comments are closed. Would you like to contact the author directly?
网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.