原来Linux里也能打《ACM》?

在这里插入图片描述

本文,我们来介绍一下Linux中的ACM时间,不过呢此ACM非彼acm,让我们一起来看看吧

前言

我们在写Makefile的时候,经常会遇到make: 'xxx' is up to date.的问题,很多同学都不知道是什么原因,本文我们就从这一点说起

  • 当我们在【make】的时候,通常会执行一些编译命令然后生成可执行文件,此时系统就会去比对源文件可执行文件最近修改时间
    • 如果.exe新于.c源文件,那表明源文件没有修改过,此时不需要再去重新编译
    • 如果.exe老于.c源文件,那表明源文件被修改过了,此时是需要再去重新编译的
  • 而且一般对于.exe.c的最近修改时间是不会相同的,因为可执行程序一定是在对源文件编译之后产生的

好,讲了这么多,究竟这个时间在哪里呢?我们马上来瞧瞧

  • 此处要使用到我们在Linux基本指令中所学习的stat指令,现在我查看了一下这个可执行文件的所有属性,就看到了相应的ACM时间

原来Linux里也能打《ACM》?_第1张图片

  • 我们先来简单介绍一下这三个时间
    1. Access —— 最近访问时间
    2. Modify —— 文件内容最近修改的时间
    3. Change —— 文件属性最近修改的时间

ACM时间的更新机制

上面的话谈到了系统会根据文件的最近修改时间来进行判断,那这三个时间的更新机制又是怎样的呢?

  • 首先是这个Access访问时间,当我们使用cat去查看一下这个文件的内容时,或者使用vim打开它 or 修改它的时候,都算是在访问它,所以这个【访问时间】几乎你的任何操作都会去进行一个修改。后面的ModifyChange时间我们一起说,一个是修改时间,一个是改变时间

那有同学问,这俩不是一个意思吗?你这是在玩文字游戏啊

  • 那到不是,还记得我们曾经谈到过的Linux下一切皆文件,而文件又是由【文件内容】和【文件属性】,这个文件内容呢不单单指的是文件里面的内容,像文件名、文件的大小、修改日期等等,这些其实都是属于文件的内容

之前我有问过同学们一个问题:在Windows下新创建一个空的文件或者记事本,那它要不要在磁盘中占据空间呢?

  • 答案是:会的✔ 就算一个文件里面什么东西都没有,这个文件还拥有各种各样的属性呢,这些属性都是属于这个文件的数据,我们就要靠这写数据去判别这个文件是什么类型的、谁创建的、什么时候创建的

  • 当我们对一个文件的【文件内容】做修改的时候变化的即为Modify时间,例如使用vim将其打开然后对内容做一些修改
  • 当我们对一个文件的【文件属性】做修改的时候变化的即为Change时间,我们在Linux权限一文中也有讲到过文件

原来Linux里也能打《ACM》?_第2张图片

  • 那使用像chmodchownchgrp这些指令就可以去修改文件对应的【拥有者】、【所属组】、【other】的权限,即修改的文件的相关属性

原来Linux里也能打《ACM》?_第3张图片

  • 我们可以来修改一下试试看,再去执行stat指令便可以发现有了变化

原来Linux里也能打《ACM》?_第4张图片

  • 看完如何修改Change时间我们再来试着修改一下Modify时间,例如打开vim修改一下里面的内容,再去执行[stat]指令就可以发现Change时间和Modify时间一同发生了修改,一般二者是会有一个关联,后者会因为前者的修改而修改,即文件的内容改了,文件的属性也会改;把文件内容删了一部分,文件大小size就会变小
  • 但是Change时间的修改不会导致Modify时间发生变化,这个我们上面也观察到过了

原来Linux里也能打《ACM》?_第5张图片


  • 那我们就可以来总结一下三个ACM时间所对应的修改机制
    1. 【Access】:拿vim把文件打开,对里面的内容做修改
    2. 【Modify】:重定向、vim编写文件内容
    3. 【Change】:chmod、chown、chgrp所做的这些事情

touch命令手动更新ACM时间

对于这个ACM时间,除了通过我们去修改文件的相关内容和属性引发修改之外,还可以手动去更新这个时间

那就是使用我们所学习过的touch指令

  • 可以看到,这里我使用touch test.c因为这个文件文身就是存在的,所以呢就会去更新一下它的ACM时间,那若是这个文件本身不存在的话,就会将其创建出来

原来Linux里也能打《ACM》?_第6张图片

  • 当然,你也可以实现像下面这两条指令去指定更改哪一个ACM时间,读者这边可以下去自己试一试,每个操作系统可能不太一样
touch -m test.c
touch -a test.c

原来Linux里也能打《ACM》?_第7张图片


好,以上就是本文所要介绍的Linux下的ACM时间,你也打acm吗

在这里插入图片描述

你可能感兴趣的:(#,Linux基础入门篇,linux,运维,ACM时间)