【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)。
相关推荐
Lakers-2415 分钟前
1987年5月29日晚上19-21点出生性格、运势和命运
java
AI人工智能+电脑小能手20 分钟前
【大白话说Java面试题 第194题】【08_Kafka篇】第10题:简述 Kafka 的 Rebalance 机制?
java·kafka·消费者组·rebalance·分布式消息队列
__log25 分钟前
幂等性设计:从“重复提交“到“稳如磐石“的系统防护
java·开发语言·spring boot
spider_xcxc26 分钟前
Helm 部署 K8s 集群完整笔记
java·开发语言·kubernetes
祐樹28 分钟前
1987年5月23日下午15-17点出生性格、运势和命运
java
zhangjw3428 分钟前
第35篇:Spring Boot入门:自动配置+快速搭建,简化企业开发
java·spring boot·后端
发量惊人的中年网工38 分钟前
AI服务器托管怎么选机房?GPU集群对机柜、电力和网络的硬要求
服务器·网络·人工智能
盐焗鹌鹑蛋38 分钟前
【Linux】权限
linux
geovindu1 小时前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
NWU_LK1 小时前
【WebFlux】第六篇 —— 全链路响应式与数据库交互
java·数据库