Linux常⽤命令之查命令find——细说-atime,-mtime,-ctime
我们知道 Linux⾥⾯⼀切皆⽂件,那么我们能否查看⼀个⽂件是何时创建的呢?答案是否定的。那我们可以知道些⽂件关于时间的什么信息呢?那就不得不说⽂件状态的三个时间了,它们分别是 -atime, -ctime 和 -mtime。
先让我们来看⼀个Linux下的⽂件信息:
我们可以从中看到,关于时间的信息有三个:最近访问时间 access time (-atime)、最近更改时间 modify time (-mtime)和最近状态改动时间 change time(-ctime),当然我们也看到了创建时间那⼀项为空⽩,也证实了Linux系统下是⽆法查看⽂件的创建时间的。
下⾯具体解释这三个时间:
atime : 它代表着最近⼀次访问⽂件的时间,显⽰⼀个⽂件的内容或者运⾏⼀个shell脚本会更新⽂件的atime。可⽤ls -lu命令查看。有⼀个要注意的就是,在kernel版本2.6.30之前,linux的核⼼开发⼈员针对Ext3/Ext4⽂件系统的性能进⾏了讨论,其中包括atime。在kernel 2.6.30之前,⽂件系统中默认会及时的更新atime,⽽在此之后的版本⾥,只有发⽣以下三种情况之⼀才会更新atime
1. 将分区mount的挂载的时候指定采⽤⾮relatime⽅式
2. atime⼩于ctime或者⼩于mtime的时候
3. 本次的access time和上次的atime超过24个⼩时
mtime : 它代表着最近⼀次⽂件内容被修改的时间。可⽤ls -l 命令查看。
ctime : 它代表着最近⼀次⽂件状态改变的时间 ,是status change time,是在写⼊⽂件、更改所有者、权限或链接设置时随 Inode 的内容更改⽽更改,即⽂件状态最后⼀次被改变的时间。可⽤ls -lc 命令查看。
演⽰⼀下命令的运⾏结果:
现在来看⼀下查看⽂件之后atime有什么变化
可以看到,在执⾏查看命令cat之后,⽂件的atime进⾏了更新。那如果对⽂件内容进⾏了更改呢?
在更改了⽂件内容之后,在对⽂件的详细信息进⾏查看,对⽐之后我们可以看到,mtine和ctime都改变了,那这意味着mtime和ctime是⼀样的么?前⾯已经说过,ctime是指 inode 的改变。那既然我们对⽂件的内容进⾏了更改,那它的mtime已经改变,所以ctime也就会改变咯。也就是说只要mtime改变,ctime就⼀定会改变。那怎样使得ctime改变⽽其他不变呢?我们可以通过改变⽂件的权限、⽤户、所属组等来实现。下⾯举例:
当然,我们既然可以查看当前的atime、mtime、ctime,那肯定也可以查看⼏天前或者⼏天之内被改过或者访问过的⽂件。Linux为我们提供了⼀个简便的查询⽅式,那就是 +n 和 -n。下⾯以 -mtime 举例说明:
-mtime n : n为数字,意思为在n天之前的“⼀天之内”被更改过内容的⽂件
find查命令的使用 -mtime +n : 列出在n天之前(不含n天本⾝)被更改过内容的⽂件名
-mtime -n : 列出在n天之内(含n天本⾝)被更改过内容的⽂件名
例如:将系统24⼩时内更改过内容的档案列出。
find / -mtime 0
那么, “5天之内被更改过的档案名” 就是find / -mtime -5 ,“5天前的那⼀天被更改过的档案名” 就是 find / -mtime 5 ,“5天之前被更改过的档案名” 就是 find / -mtime +5。我们可以看出有没有 “+,-”的差别是很⼤的。下⾯⽤图来说明⼀下:
由这个时光轴我们可以知道,最右边为当前时,+5 代表⼤于等于 6 天前的档案名, -5 代表⼩于等于 5 天内的档案名,5 则是代表 5-6 那⼀天的档案名。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论