【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)。
相关推荐
lifallen4 分钟前
从Apache Doris 学习 HyperLogLog
java·大数据·数据仓库·算法·apache
fire-flyer4 分钟前
maven-jlink-plugin入门
java·maven
Knight_AL7 分钟前
Java 单元测试全攻略:JUnit 生命周期、覆盖率提升、自动化框架与 Mock 技术
java·junit·单元测试
cominglately11 分钟前
记录一次生产环境数据库死锁的处理过程
java·死锁
用户03321266636715 分钟前
在 Word 文档中插入图片的 Java 指南
java
深圳蔓延科技21 分钟前
单点登录到底是什么?
java·后端
SimonKing23 分钟前
除了 ${},Thymeleaf 的这些用法让你直呼内行
java·后端·程序员
wanhengidc42 分钟前
云手机的挂机功能涉及到哪些内容
运维·服务器·网络·游戏·智能手机
科兴第一吴彦祖43 分钟前
基于Spring Boot + Vue 3的乡村振兴综合服务平台
java·vue.js·人工智能·spring boot·推荐算法
ajassi200044 分钟前
开源 java android app 开发(十八)最新编译器Android Studio 2025.1.3.7
android·java·开源