linux文件时间知多少?(转)
时间:2010-06-10 来源:championwxd
linux文件时间知多少?
来自: 杨志刚 博客 (http://yangzhigang.cublog.cn)
在windows下,一个文件有:创建时间、修改时间、访问时间。
而在Linux下,一 个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间。
两者有此不同,在Linux下没有创建时间的概念,也就是不能知道文件的 建立时间,但如果文件建立后就没有修改过,修改时间=建立时间;如果文件建立后,状态就没有改动过,那么状态改动时间=建立时间;如果文件建立后,没有被 读取过,那么访问时间=建立时间,因为不好判断文件是否被改过、读过、其状态是否变过,所以判断文件的建立时间基本上能为不可能。 如何查一个文件的三个时间呢? 先用下面的命令来建立一个文件
# date && echo "this is file be used test time of file" >filetime.txt && ll --full-time filetime.txt
Tue Aug 4 15:13:44 HKT 2009
-rw-r--r-- 1 root root 39 2009-08-04 15:13:44.000000000 +0800 filetime.txt 通过stat filename.txt来查,如:
# stat filetime.txt
File: `filetime.txt'
Size: 39 Blocks: 8 IO Block: 4096 Regular File
Device: 802h/2050d Inode: 17 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 15:13:44.000000000 +0800
Modify: 2009-08-04 15:13:44.000000000 +0800
Change: 2009-08-04 15:13:44.000000000 +0800
说明:Access访问时间。Modify修改时间。Change状态改 动时间。可以stat *查看这个目录所有文件的状态。 ctime=change time
atime=access time
mtime=modifiy time 因为这是一个新的文件(filetime.txt),没做过内容、属性的更改,也没读过这个文 件,所以三者(访问时间、修改时间、状态改动时间)的时间是一致的,这时文件的修改时间与这三个时间是一样的,是没有疑问的。 1、访问时间,读一次这个文件的内容,这个时间就 会更新。比如对这个文件运用 more、cat等命令。ls、stat命令都不会修改文件的访问时间。
2、修改时间,修改时间是文件内容最后一次 被修改时间。比如:vi后保存文件。ls -l列出的时间就是这个时间。
3、状态改动时间。是该文件的i节点最后一次被修改的时间,通过 chmod、chown命令修改一次文件属性,这个时间就会更新。 另个除了可以通过stat来查看文件的mtime,ctime,atime等属性,也可以通过 ls命令来查看,具体如下: ls -lc filename 列出文件的 ctime (最后更改时间) ls -lu filename 列出文件的 atime(最后存取时间) ls -l filename 列出文件的 mtime (最后修改时间) 在linux中stat函数中,用st_atime表示文件数据最近的存取时间(last accessed time);用st_mtime表示文件数据最近的修改时间(last modified time);使用st_ctime表示文件i节点数据最近的修改时间(last i-node's status changed time)。 字段 说明 例子 ls(-l)
st_atime 文件数据的最后存取时间 read -u
st_mtime 文件数据的最后修改时间 write 缺省
st_ctime 文件数据的最后更改时间 chown,chmod -c 在linux系统中,系统把文件内容数据与i节点数据是分别存放的,i节点数据存放了文件权限与文件属主之类的数据。 另外,可以格式化输出文件的三种时间,如: find . -name file -printf "%AY-%Am-%Ad %AH:%AM:%AS"
find . -name file -printf "%TY-%Tm-%Td %TH:%TM:%TS"
find . -name file -printf "%CY-%Cm-%Cd %CH:%CM:%CS" linux的ctime代表的是文件修改时间,如果文件被修改过就很难知道文件的创建时间,在某些特殊情况下,需要查看文件的创建时间,正常情 况下查看文件的ctime是无法实现的。可以使用一个变通的方法来实现保留文件创建时间,但是同时也会牺牲一些其它特性。 可以在mount文件的时候使用参数-o noatime,来把系统更新atime的特性关闭。使用了noatime参数挂载后,在文件被修改后文件的atime是不会被改变的,使用stat查看 到的atime就是文件的创建时间。 如: # / sbin/mkfs -t ext3 /dev/ram10 # mount -t ext3 -o noatime /dev/loop0 /mnt/foo # mount /dev/ram10 on /mnt/foo type ext3 (rw,noatime) # cd /mnt/foo # touch filetime1.txt # stat filetime1.txt
File: `filetime1.txt'
Size: 0 Blocks: 0 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:51:32.000000000 +0800
Modify: 2009-08-04 20:51:32.000000000 +0800
Change: 2009-08-04 20:51:32.000000000 +0800 # echo foo.ok >> filetime1.txt
[root@logs-bak foo]# stat filetime1.txt
File: `filetime1.txt'
Size: 14 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:51:32.000000000 +0800
Modify: 2009-08-04 20:53:27.000000000 +0800
Change: 2009-08-04 20:53:27.000000000 +0800 # cat filetime1.txt
foo.ok
#stat filetime1.txt
File: `filetime1.txt'
Size: 14 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:51:32.000000000 +0800
Modify: 2009-08-04 20:53:27.000000000 +0800
Change: 2009-08-04 20:53:27.000000000 +0800 # 通过以上实验可以看出文件的access time 是不变的。 接着向下多测试一下. # vi filetime1.txt # stat filetime1.txt
File: `filetime1.txt'
Size: 23 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 14 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:55:05.000000000 +0800
Modify: 2009-08-04 20:55:05.000000000 +0800
Change: 2009-08-04 20:55:05.000000000 +0800 # chmod 777 filetime1.txt
# stat filetime1.txt
File: `filetime1.txt'
Size: 23 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 14 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:55:05.000000000 +0800
Modify: 2009-08-04 20:55:05.000000000 +0800
Change: 2009-08-04 20:57:36.000000000 +0800 可见,chmod后,Ctime的变化。
######################################################### 说到这里,大概大家也对在linux下文件的时间有所了解了吧! 那么以下的操作对文件的时间有什么影响呢? 操作 atime mtime ctime ---------------------------------------------------------- mv ---------------------------------------------------------- cp ---------------------------------------------------------- touch ---------------------------------------------------------- cat/more/less ---------------------------------------------------------- ls ---------------------------------------------------------- chmod/chown ---------------------------------------------------------- ln ---------------------------------------------------------- echo ---------------------------------------------------------- vi ---------------------------------------------------------- (请大家测试完成这个表吧!!!!做完测试可以给我留言啊!) ############################################################## 另外,从kernel2.6.29开,还默认集成了一个relatime的属性。可能是因为在文件读操作很频繁的系统 中,atime更新所带来的开销很大,所以很多SA都在挂装文件系统的时候使用noatime属性来停止更新atime。但是有些程序需要根据 atime进行一些判断和操作,所以Linux就推出了一个relatime特性。
使用这个特性来挂装文件系统后,只有当mtime比atime 更新的时候,才会更新atime。事实上,这个时候atime和mtime已经是同一个东西了。所以这个选项就是为了实现对atime的兼容才推出的。并 不是一个新的时间属性。使用方法就是通过mount -o relatime /dir来挂装目录。
而在Linux下,一 个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间。
两者有此不同,在Linux下没有创建时间的概念,也就是不能知道文件的 建立时间,但如果文件建立后就没有修改过,修改时间=建立时间;如果文件建立后,状态就没有改动过,那么状态改动时间=建立时间;如果文件建立后,没有被 读取过,那么访问时间=建立时间,因为不好判断文件是否被改过、读过、其状态是否变过,所以判断文件的建立时间基本上能为不可能。 如何查一个文件的三个时间呢? 先用下面的命令来建立一个文件
# date && echo "this is file be used test time of file" >filetime.txt && ll --full-time filetime.txt
Tue Aug 4 15:13:44 HKT 2009
-rw-r--r-- 1 root root 39 2009-08-04 15:13:44.000000000 +0800 filetime.txt 通过stat filename.txt来查,如:
# stat filetime.txt
File: `filetime.txt'
Size: 39 Blocks: 8 IO Block: 4096 Regular File
Device: 802h/2050d Inode: 17 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 15:13:44.000000000 +0800
Modify: 2009-08-04 15:13:44.000000000 +0800
Change: 2009-08-04 15:13:44.000000000 +0800
说明:Access访问时间。Modify修改时间。Change状态改 动时间。可以stat *查看这个目录所有文件的状态。 ctime=change time
atime=access time
mtime=modifiy time 因为这是一个新的文件(filetime.txt),没做过内容、属性的更改,也没读过这个文 件,所以三者(访问时间、修改时间、状态改动时间)的时间是一致的,这时文件的修改时间与这三个时间是一样的,是没有疑问的。 1、访问时间,读一次这个文件的内容,这个时间就 会更新。比如对这个文件运用 more、cat等命令。ls、stat命令都不会修改文件的访问时间。
2、修改时间,修改时间是文件内容最后一次 被修改时间。比如:vi后保存文件。ls -l列出的时间就是这个时间。
3、状态改动时间。是该文件的i节点最后一次被修改的时间,通过 chmod、chown命令修改一次文件属性,这个时间就会更新。 另个除了可以通过stat来查看文件的mtime,ctime,atime等属性,也可以通过 ls命令来查看,具体如下: ls -lc filename 列出文件的 ctime (最后更改时间) ls -lu filename 列出文件的 atime(最后存取时间) ls -l filename 列出文件的 mtime (最后修改时间) 在linux中stat函数中,用st_atime表示文件数据最近的存取时间(last accessed time);用st_mtime表示文件数据最近的修改时间(last modified time);使用st_ctime表示文件i节点数据最近的修改时间(last i-node's status changed time)。 字段 说明 例子 ls(-l)
st_atime 文件数据的最后存取时间 read -u
st_mtime 文件数据的最后修改时间 write 缺省
st_ctime 文件数据的最后更改时间 chown,chmod -c 在linux系统中,系统把文件内容数据与i节点数据是分别存放的,i节点数据存放了文件权限与文件属主之类的数据。 另外,可以格式化输出文件的三种时间,如: find . -name file -printf "%AY-%Am-%Ad %AH:%AM:%AS"
find . -name file -printf "%TY-%Tm-%Td %TH:%TM:%TS"
find . -name file -printf "%CY-%Cm-%Cd %CH:%CM:%CS" linux的ctime代表的是文件修改时间,如果文件被修改过就很难知道文件的创建时间,在某些特殊情况下,需要查看文件的创建时间,正常情 况下查看文件的ctime是无法实现的。可以使用一个变通的方法来实现保留文件创建时间,但是同时也会牺牲一些其它特性。 可以在mount文件的时候使用参数-o noatime,来把系统更新atime的特性关闭。使用了noatime参数挂载后,在文件被修改后文件的atime是不会被改变的,使用stat查看 到的atime就是文件的创建时间。 如: # / sbin/mkfs -t ext3 /dev/ram10 # mount -t ext3 -o noatime /dev/loop0 /mnt/foo # mount /dev/ram10 on /mnt/foo type ext3 (rw,noatime) # cd /mnt/foo # touch filetime1.txt # stat filetime1.txt
File: `filetime1.txt'
Size: 0 Blocks: 0 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:51:32.000000000 +0800
Modify: 2009-08-04 20:51:32.000000000 +0800
Change: 2009-08-04 20:51:32.000000000 +0800 # echo foo.ok >> filetime1.txt
[root@logs-bak foo]# stat filetime1.txt
File: `filetime1.txt'
Size: 14 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:51:32.000000000 +0800
Modify: 2009-08-04 20:53:27.000000000 +0800
Change: 2009-08-04 20:53:27.000000000 +0800 # cat filetime1.txt
foo.ok
#stat filetime1.txt
File: `filetime1.txt'
Size: 14 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:51:32.000000000 +0800
Modify: 2009-08-04 20:53:27.000000000 +0800
Change: 2009-08-04 20:53:27.000000000 +0800 # 通过以上实验可以看出文件的access time 是不变的。 接着向下多测试一下. # vi filetime1.txt # stat filetime1.txt
File: `filetime1.txt'
Size: 23 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 14 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:55:05.000000000 +0800
Modify: 2009-08-04 20:55:05.000000000 +0800
Change: 2009-08-04 20:55:05.000000000 +0800 # chmod 777 filetime1.txt
# stat filetime1.txt
File: `filetime1.txt'
Size: 23 Blocks: 2 IO Block: 4096 Regular File
Device: 10ah/266d Inode: 14 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-04 20:55:05.000000000 +0800
Modify: 2009-08-04 20:55:05.000000000 +0800
Change: 2009-08-04 20:57:36.000000000 +0800 可见,chmod后,Ctime的变化。
######################################################### 说到这里,大概大家也对在linux下文件的时间有所了解了吧! 那么以下的操作对文件的时间有什么影响呢? 操作 atime mtime ctime ---------------------------------------------------------- mv ---------------------------------------------------------- cp ---------------------------------------------------------- touch ---------------------------------------------------------- cat/more/less ---------------------------------------------------------- ls ---------------------------------------------------------- chmod/chown ---------------------------------------------------------- ln ---------------------------------------------------------- echo ---------------------------------------------------------- vi ---------------------------------------------------------- (请大家测试完成这个表吧!!!!做完测试可以给我留言啊!) ############################################################## 另外,从kernel2.6.29开,还默认集成了一个relatime的属性。可能是因为在文件读操作很频繁的系统 中,atime更新所带来的开销很大,所以很多SA都在挂装文件系统的时候使用noatime属性来停止更新atime。但是有些程序需要根据 atime进行一些判断和操作,所以Linux就推出了一个relatime特性。
使用这个特性来挂装文件系统后,只有当mtime比atime 更新的时候,才会更新atime。事实上,这个时候atime和mtime已经是同一个东西了。所以这个选项就是为了实现对atime的兼容才推出的。并 不是一个新的时间属性。使用方法就是通过mount -o relatime /dir来挂装目录。
相关阅读 更多 +