文件时间戳修改touch和查看stat和ls --time

查看文件时间戳命令:stat awk.txt
File: `awk.txt'
Size: 20  Blocks: 8  IO Block: 4096  regular file
Device: 801h/2049d  Inode: 380730  Links: 1
Access: (0644/-rw-r--r--) Uid: (  0/  root)  Gid: (  0/  root)
Access: 2008-04-26 01:50:44.000000000 +0800
Modify: 2008-04-26 01:48:18.000000000 +0800
Change: 2008-04-26 01:48:18.000000000 +0800node

说明:Access访问时间。Modify修改时间。Change状态改变时间。能够stat *查看这个目录全部文件的状态。
如今是要过滤出Modify的时间戳,并以yyyyMMddHHSS格式保存,则能够利用下面这条命令:
stat awk.txt | grep -i Modify | awk -F. '{print $1}' | awk '{print $2$3}'| awk -F- '{print $1$2$3}' | awk -F: '{print $1$2$3}'
输出结果:20080426014818linux

修改文件时间与建立新文件:touchshell

在介绍ls命令时,提到每一个文件在Linux下面都会记录3个主要的修改时间:
• modification time(mtime,修改时间):当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性。
• status time(ctime,状态时间):当该文件的”状态(status)”改变时,就会更新这个时间,举例来讲,更改了权限与属性,就会更新这个时间。
• access time(atime,存取时间):当“取用文件内容”时,就会更新这个读取时间。举例来讲,使用cat去读取 ~/.bashrc,就会更新atime了。
举例来讲,咱们来看一看/etc/man.config文件的时间。bash

[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就会变成刚刚使用的时间了。io

文件的时间很重要,由于若是误判文件时间,可能会形成某些程序没法顺利运行。那么,万一我发现了一个文件来自未来(不少时候会有这个问题的。咱们在安装的时候,提到的GMT时间就是那个意思),该如何让该文件的时间变成“如今”的时刻呢?很简单,用touch命令便可。test

[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命令,能够轻松地修改文件的日期与时间。而且,也能够创建一个空文件。不过,要注意的是,即便复制一个文件,复制全部属性,但也没有办法复 制ctime属性。ctime能够记录文件最近改变状态(status)的时间。不管如何,仍是要说明一下,咱们平时看的文件属性中,比较重要的仍是 mtime。咱们关心的经常是这个文件的“内容”是何时更改的。
touch这个命令最经常使用的状况是:
• 创建一个空文件。
• 将某个文件日期修改成当前日期(mtime与atime)。awk

与文件相关的几个时间:date

一、访问时间,读一次这个文件的内容,这个时间就会更新。好比对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。file

二、修改时间,对文件内容修改一次,这个时间就会更新。好比:vi后保存文件。ls -l列出的时间就是这个时间。权限

三、状态改变时间。经过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,能够经过stat命令 文件名。

相关文章
相关标签/搜索