【Linux】touch

我们在介绍ls这个命令时,提到每个文件在Linux下面都会记录许多的时间参数,其实是有三个主要的变动时间,那么三个时间的意义是什么?

  1. 修改时间(modification time,mtime):当该文件的【内容数据】变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限。
  2. 状态时间(status time,ctime ):当该文件的【状态(status)】改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间。
  3. 读取时间(access time,atime):当【该文件的内容被读取】时,就会更新这个读取时间(access),

举例来说,我们使用cat去读取/etc/man_db.conf,就会更新该文件的atime。

这是个挺有趣的现象,举例来说,我们来看一看你自己的/etc/man_db.conf这个文件的时间吧

看到了吗?

在默认的情况下,Is显示出来的是该文件的mtime,也就是这个文件的内容上次被修改的时间。

至于我的系统是在2023年6月30号的时候安装,因此,这个文件被产生导致状态被修改的时间就回溯到那个时间点了(ctime)。而还记得刚刚我们使用的范例当中,有使用到man_db.conf这个文件,所以,它的atime 就会变成刚刚使用的时间了。

文件的时间是很重要的,因为,如果文件的时间错误的话,可能会造成某些程序无法顺利的运行。 那么万一我发现了一个文件来自未来,该如何让该文件的时间变成【现在】的时刻呢?很简单,就用【touch】这个命令即可。

不要怀疑系统时间会"来自未来",很多时候会有这个问题。

举例来说,在安装过后系统时间可能会被改变,因为中国时区在国际标准时间"格林威治时间,GMT"的右边,所以会比较早看到阳光,也就是说中国时间比GMT时间快了8小时。如果安装不当,我们的系统可能会快8小时,你的文件就有可能来自8小时后了。

至于某些情况下,由于BIOS的设置错误,导致系统时间跑到未来时间,并且你又建立了某些文件,等你将时间改回正确的时间时,该文件不就变成来自未来了吗?

  • touch [-acdmt]文件

选项与参数:

  1. -a:仅自定义 access time;
  2. -c:仅修改文件的时间,若该文件不存在则不建立新文件;
  3. -d:后面可以接欲自定义的日期而不用目前的日期,也可以使用--date="日期或时间";
  4. -m:仅修改mtime;
  5. -t:后面可以接欲自定义的时间而不用目前的时间,格式为[YYYYMMDDhhmm];

范例一:新建一个空文件并观察时间。

注意到,这个文件的大小是0.

在默认的状态下,如果touch后面有接文件,则该文件的三个时间(atime/ctime/mtime)都会更新为目前的时间。

若该文件不存在,则会主动的建立一个新的空文件,例如上面这个例子。

范例二:将~/.bashrc复制成为bashrc,假设复制完全的属性,检查其日期。


从上往下依次是目前的时间,mtime,atime,ctime.

**执行的结果当中,我们可以发现数据的内容与属性是被复制过来的,因此文件修改时间(mtime)与原本文件相同。**但是由于这个文件是刚刚被建立的,因此状态时间(ctime)就变成现在的时间。

那如果你想要变更这个文件的时间?可以这样做:

范例三:修改案例二的bashrc文件,将日期调整为两天前。

#跟上个范例比较看看,本来是 8日变成了6日(atume/mtime)。

不过,ctime 并没有跟着改变。

范例四:将上个范例的bashrc日期改为2014/06/152:02。

注意看看,日期在atime与mtime都改变了,但是ctime则是记录目前的时间

通过touch这个命令,我们可以轻易地自定义文件的日期与时间,并且也可以建立一个空文件。

不过要注意的是,即使我们复制一个文件时,复制所有的属性,但也没有办法复制ctime 这个属性。ctime以记录这个文件最近的状态(status)被改变的时间。

无论如何,还是要告知大家,我们平时看的文件属性中,比较重要的还是mtime。我们关心的常常是这个文件的内容是什么时候被修改,了解了吗?

无论如何,touch这个命令最常被使用的情况是:

  1. 建立一个空文件;
  2. 将某个文件日期自定义为目前(mtime与atime)。
相关推荐
ya888g12 分钟前
GESP C++四级样题卷
java·c++·算法
【D'accumulation】22 分钟前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端
fasewer28 分钟前
第五章 linux实战-挖矿 二
linux·运维·服务器
小叶学C++28 分钟前
【C++】类与对象(下)
java·开发语言·c++
2401_8543910832 分钟前
高效开发:SpringBoot网上租赁系统实现细节
java·spring boot·后端
Cikiss40 分钟前
微服务实战——SpringCache 整合 Redis
java·redis·后端·微服务
wxin_VXbishe41 分钟前
springboot合肥师范学院实习实训管理系统-计算机毕业设计源码31290
java·spring boot·python·spring·servlet·django·php
Cikiss42 分钟前
微服务实战——平台属性
java·数据库·后端·微服务
无敌の星仔1 小时前
一个月学会Java 第2天 认识类与对象
java·开发语言
楚灵魈1 小时前
[Linux]从零开始的网站搭建教程
linux·运维·服务器