linux的ctime,atime,mtime

xiaoxiao2021-02-27  248

题外话:今天在杭州找了一天的房子,才明白我的工资在杭州快连房租都付不起了。而且找了一天还没找到合适的。找的好累,本来都不想写了。但是作为一名菜鸡,我明白落下一天,就会落下第二天。坚持坚持,我要成为大菜鸡。

今天说的是linux中的ctime,mtime,atime这三种time。

一贯的拿来主义: 转载地址:http://blog.csdn.net/wodeqingtian1234/article/details/53975744 转载地址:http://www.linuxidc.com/Linux/2015-02/113358.htm 要去看原文的可以点击上面链接,比我排版好多了。毕竟我菜鸡。

简称全称含义ctimechange time是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态最后一次被改变的时间。atimeaccess time是在读取文件或者执行文件时更改,即文件最后一次被读取的时间。mtimemodified time 是在写入文件时随文件内容的更改而更改,是指文件内容最后一次被修改的时间

这几推荐大家记住英文名字,反正前几遍我试图去记含义,记了就忘,并没有效果。还是记英文好

这里我讲的很简单,想要详细的话,可以去 看原文,推荐。 注意: 1、修改是文本本身的内容发生了变化(mtime) 改变是文件的索引节点发生了改变(ctime) 2、如果修改了文件内容,则同时更新ctime和mtime 3、如果只改变了文件索引节点,比如修改权限,则只是改变了ctime

4、如果使用ext3文件系统的时候,在mount的时候使用了noatime参数则不会更新atime的信息,即访问文件之后atime不会被修改,而这个不代表真实情况

小知识:这三个 time stamp 都放在 inode 中。若mtime,atime修改, inode 就一定会改,相应的inode改了,那ctime 也就跟着要改了,之所以在mount option中使用 noatime, 就是不想 file system 做太多的修改, 从而改善读取性能. 抄完别人的,就在抄下别人的代码:

[root@VM_157_218_centos ~]# stat test_shell_dir #这里看的是一个目录 File: `test_shell_dir' #一切皆文件嘛 Size: 4096 Blocks: 8 IO Block: 4096 directory Device: fc01h/64513d Inode: 491535 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-07-08 22:12:01.000000000 +0800 #atime Modify: 2017-07-08 22:46:40.000000000 +0800 #mtime Change: 2017-07-08 22:46:40.000000000 +0800 #ctime #我ls下这个目录,理论上我看了目录(目录也是文件哎。)里面的内容呀,但是它的atime没有变。 [root@VM_157_218_centos ~]# ls test_shell_dir 2017_8_9.log creat_log_file.sh test.sh [root@VM_157_218_centos ~]# stat test_shell_dir File: `test_shell_dir' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: fc01h/64513d Inode: 491535 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-07-08 22:12:01.000000000 +0800 Modify: 2017-07-08 22:46:40.000000000 +0800 Change: 2017-07-08 22:46:40.000000000 +0800 #你看什么都没变。 #cd 进这个目录,在退出来看看改变了什么。 [root@VM_157_218_centos ~]# stat test_shell_dir File: `test_shell_dir' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: fc01h/64513d Inode: 491535 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-07-08 22:12:01.000000000 +0800 Modify: 2017-07-08 22:46:40.000000000 +0800 Change: 2017-07-08 22:46:40.000000000 +0800 #可以看到的是,也什么没变。再去试试修改目录名字看看。 [root@VM_157_218_centos ~]# mv test_shell_dir/ test_dir [root@VM_157_218_centos ~]# stat test_dir/ File: `test_dir/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: fc01h/64513d Inode: 491535 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-07-08 22:12:01.000000000 +0800 Modify: 2017-07-08 22:46:40.000000000 +0800 Change: 2017-07-09 22:08:01.000000000 +0800 #改变了哦 #这次changetime ,即ctime改变了。

注意:下面是是抄袭别人的一段话,作者 :阮一峰 看过他的python笔记,挺喜欢他的。、、题外话

一、inode是什么? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。 文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。 每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。 二、inode的内容 文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。 inode包含文件的元信息,具体来说有以下内容: 文件的字节数。 文件拥有者的User ID。 文件的Group ID。 文件的读、写、执行权限。 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。 链接数,即有多少文件名指向这个inode。 文件数据block的位置。

目录中保存着它底下文件的文件名以及该文件名对应的inode号。当然目录也是文件,也有自己的inode。

#

其实我个人理解有谬误。 真实的应该是下面抄袭别人中的说明部分,更容易理解。

atime:Access time,是在读取文件或者执行文件时更改,即文件最后一次被读取的时间。 说明: st_atime Time when file data was last accessed. Changed by the following functions: creat(), mknod(), pipe(), utime(2), and read(2).

mtime:Modified time,是在写入文件时随文件内容的更改而更改,是指文件内容最后一次被修改的时间。 说明: st_mtime Time when data was last modified. Changed by the fol- lowing functions: creat(), mknod(), pipe(), utime(), and write(2).

ctime:Change time,是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态最后一次被改变的时间。 说明: st_ctime Time when file status was last changed. Changed by the following functions: chmod(), chown(), creat(), link(2), mknod(), pipe(), unlink(2), utime(), and write().

不扯了,我得说下的场景。 假如在/tmp下有一大堆文件,上万个,而且文件名都是随机生成的(或者说,我比较笨,根本发现不了规律)。比方说:

[root@VM_157_218_centos test_dir]# cat creat_log_file.sh #!/bash/bin PATH=$PATH for((i=1;i<=10;i++)) do x=$(date +%N) touch /tmp/$x done [root@VM_157_218_centos test_dir]# cd /tmp;ls 388680818 392158387 395707895 399200377 402962619 ap_1004.pid hsperfdata_root sagent.pid 390383802 393864715 397425697 401034062 404776968 cvm_init.log net_affinity.log setRps.log

现在我先把今天生成的文件删了,或者说,你想把除今天以外的文件删了。这里使用find就十分不错。

下面看看find命令 查找文件更新日时在距现在时刻二天以内的文件 find ./ -mtime -2 查找文件更新日时在距现在时刻二天以上的文件 find ./ -mtime +2 查找文件更新日时在距现在时刻一天以上二天以内的文件 find ./ -mtime 2 查找文件更新日时在距现在时刻二分以内的文件 find ./ -mmin -2 查找文件更新日时在距现在时刻二分以上的文件 find ./ -mmin +2 查找文件更新日时在距现在时刻一分以上二分以内的文件 find ./ -mmin 2 查找文件更新时间比文件abc的内容更新时间新的文件 find ./ -newer abc 查找文件访问时间比文件abc的内容更新时间新的文件 find ./ -anewer abc #########################格式######################### find ./ -type f -mtime -1 -print -exec rm -rf {} \; (1) "." 表示从当前目录开始递归查找 (2) “ -name '*.exe' "根据名称来查找,要查找所有以.exe结尾的文件夹或者文件 (3) " -type f "查找的类型为文件 (4) "-print" 输出查找的文件目录名 (5) 最主要的是是-exec了,-exec选项后边跟着一个所要执行的命令,表示将find出来的文件或目录执行该命令。 exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个,最后是一个分号

我要删除今天的文件:

[root@VM_157_218_centos tmp]# find ./ -type f -mtime -1 -print -exec rm -rf {} \; ./395707895 ./397425697 ./392158387 ./399200377 ./388680818 ./401034062 ./402962619 ./404776968 ./.PATH ./390383802 ./393864715 [root@VM_157_218_centos tmp]# ls ap_1004.pid cvm_init.log hsperfdata_root net_affinity.log sagent.pid setRps.log #删了

睡觉

转载请注明原文地址: https://www.6miu.com/read-8657.html

最新回复(0)