7.3.5 修改文件时间与创建新文件:touch
在介绍ls命令时,提到每个文件在Linux下面都会记录3个主要的修改时间: • modification time(mtime,修改时间):当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性。 • status time(ctime,状态时间):当该文件的”状态(status)”改变时,就会更新这个时间,举例来说,更改了权限与属性,就会更新这个时间。 • access time(atime,存取时间):当“取用文件内容”时,就会更新这个读取时间。举例来说,使用cat去读取 ~/.bashrc,就会更新atime了。举例来说,我们来看一看/etc/man.config文件的时间。
[root@linux ~]# ls -l /etc/man.config -rw-r--r-- 1 root root 4506 Apr 8 19:11 /etc/man.config [root@linux ~]# ls -l --time=atime /etc/man.config -rw-r--r-- 1 root root 4506 Jul 19 17:53 /etc/man.config [root@linux ~]# ls -l --time=ctime /etc/man.config -rw-r--r-- 1 root root 4506 Jun 25 08:28 /etc/man.config |
看到了吗?在默认的情况下,ls显示的是该文件的mtime,也就是这个文件的内容上次更改的时间。我的系统是在6/25安装的,因此,这个文件产生但状态更改的时间就回溯到那个时间点。因为刚才的范例中使用到这个文件,所以,它的atime就会变成刚刚使用的时间了。
文件的时间很重要,因为如果误判文件时间,可能会造成某些程序无法顺利运行。那么,万一我发现了一个文件来自将来(很多时候会有这个问题的。我们在安装的时候,提到的GMT时间就是那个意思),该如何让该文件的时间变成“现在”的时刻呢?很简单,用touch命令即可。
[root@linux ~]# touch [-acdmt] 文件 参数: -a : 仅修改access time。 -c : 仅修改时间,而不建立文件。 -d : 后面可以接日期,也可以使用 --date="日期或时间" -m : 仅修改mtime。 -t : 后面可以接时间,格式为 [YYMMDDhhmm] 范例: 范例一:新建一个空的文件。 [root@linux ~]# cd /tmp [root@linux tmp]# touch testtouch [root@linux tmp]# ls -l testtouch -rw-r--r-- 1 root root 0 Jul 19 20:49 testtouch # 注意,这个文件的大小是0。在默认的状态下,如果touch后面接文件, # 则该文件的3个时间(atime/ctime/mtime)都会更新为当前时间。若该文件不存在, # 则会主动建立一个新的空文件。例如上面这个例子。 范例二:将 ~/.bashrc复制成为bashrc,假设复制完全的属性,检查其日期。 [root@linux tmp]# cp ~/.bashrc bashrc [root@linux tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 bashrc <==这是mtime -rwxr-xr-x 1 root root 395 Jul 19 20:44 bashrc <==这是atime -rwxr-xr-x 1 root root 395 Jul 19 20:53 bashrc <==这是ctime # 在这个案例中,我们使用了 ; 命令分隔符,它的用法我们会在Bash shell中提到。 # 此外,ll是ls -l的命令别名,这个也会在bash shell中再次提及, # 当前可以简单地想成,ll就是ls -l的简写。至于 ; 则是同时发出两个命令, # 且让两个命令“按顺序”执行的意思。上面的结果中可以看到,该文件更改的日期 # Jul 4 11:45,但是atime与ctime不一样。 范例三:修改案例二的bashrc文件,将日期调整为两天前。 [root@linux tmp]# touch -d "2 days ago" bashrc [root@linux tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rwxr-xr-x 1 root root 395 Jul 17 21:02 bashrc -rwxr-xr-x 1 root root 395 Jul 17 21:02 bashrc -rwxr-xr-x 1 root root 395 Jul 19 21:02 bashrc # 与上一个范例比较,本来是19日的变成了17日了(atime/mtime)。 # 不过,ctime并没有跟着改变。 范例四:将上个范例的bashrc日期改为2005/07/15 2:02。 [root@linux tmp]# touch -t 0507150202 bashrc [root@linux tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rwxr-xr-x 1 root root 395 Jul 15 02:02 bashrc -rwxr-xr-x 1 root root 395 Jul 15 02:02 bashrc -rwxr-xr-x 1 root root 395 Jul 19 21:05 bashrc # 注意,日期在atime与mtime都改变了,但ctime则是记录当前的时间。 |
如何用touch命令修改文件change时间: 比如要把,change:2004-10-09 20:20:20 000000000 +0800 改成: change:2005-11-11 22:22:22 000000000 +0800 要如何运用touch? (1). touch 文件名如果该文件存在,会将当前的系统时钟赋予该文件 (2). 生成当前的时间: $ touch test.txt 任意时间: $ touch -d "May 25 3:51 pm" test.txt $ ls -l test.txt 或 $ touch -t 05251551 test.txt