本文,我們來(lái)介紹一下Linux中的ACM時(shí)間,不過(guò)呢此ACM非彼acm,讓我們一起來(lái)看看吧
前言
我們?cè)趯?xiě)Makefile的時(shí)候,經(jīng)常會(huì)遇到
make: 'xxx' is up to date.
的問(wèn)題,很多同學(xué)都不知道是什么原因,本文我們就從這一點(diǎn)說(shuō)起
- 當(dāng)我們?cè)凇緈ake】的時(shí)候,通常會(huì)執(zhí)行一些編譯命令然后生成可執(zhí)行文件,此時(shí)系統(tǒng)就會(huì)去比對(duì)源文件和可執(zhí)行文件的最近修改時(shí)間
- 如果
.exe
新于.c
源文件,那表明源文件沒(méi)有修改過(guò),此時(shí)不需要再去重新編譯 - 如果
.exe
老于.c
源文件,那表明源文件被修改過(guò)了,此時(shí)是需要再去重新編譯的
- 如果
- 而且一般對(duì)于
.exe
和.c
的最近修改時(shí)間是不會(huì)相同的,因?yàn)榭蓤?zhí)行程序一定是在對(duì)源文件編譯之后產(chǎn)生的
?? 好,講了這么多,究竟這個(gè)時(shí)間在哪里呢?我們馬上來(lái)瞧瞧
- 此處要使用到我們?cè)贚inux基本指令中所學(xué)習(xí)的
stat
指令,現(xiàn)在我查看了一下這個(gè)可執(zhí)行文件的所有屬性,就看到了相應(yīng)的ACM時(shí)間
- 我們先來(lái)簡(jiǎn)單介紹一下這三個(gè)時(shí)間
- Access —— 最近訪(fǎng)問(wèn)時(shí)間
- Modify —— 文件內(nèi)容最近修改的時(shí)間
- Change —— 文件屬性最近修改的時(shí)間
ACM時(shí)間的更新機(jī)制
上面的話(huà)談到了系統(tǒng)會(huì)根據(jù)文件的最近修改時(shí)間來(lái)進(jìn)行判斷,那這三個(gè)時(shí)間的更新機(jī)制又是怎樣的呢?
- 首先是這個(gè)Access訪(fǎng)問(wèn)時(shí)間,當(dāng)我們使用
cat
去查看一下這個(gè)文件的內(nèi)容時(shí),或者使用vim
打開(kāi)它 or 修改它的時(shí)候,都算是在訪(fǎng)問(wèn)它,所以這個(gè)【訪(fǎng)問(wèn)時(shí)間】幾乎你的任何操作都會(huì)去進(jìn)行一個(gè)修改。后面的Modify和Change時(shí)間我們一起說(shuō),一個(gè)是修改時(shí)間,一個(gè)是改變時(shí)間
?? 那有同學(xué)問(wèn),這倆不是一個(gè)意思嗎?你這是在玩文字游戲啊
- 那到不是,還記得我們?cè)?jīng)談到過(guò)的Linux下一切皆文件,而文件又是由【文件內(nèi)容】和【文件屬性】,這個(gè)文件內(nèi)容呢不單單指的是文件里面的內(nèi)容,像文件名、文件的大小、修改日期等等,這些其實(shí)都是屬于文件的內(nèi)容
?? 之前我有問(wèn)過(guò)同學(xué)們一個(gè)問(wèn)題:在Windows下新創(chuàng)建一個(gè)空的文件或者記事本,那它要不要在磁盤(pán)中占據(jù)空間呢?
- 答案是:會(huì)的? 就算一個(gè)文件里面什么東西都沒(méi)有,這個(gè)文件還擁有各種各樣的屬性呢,這些屬性都是屬于這個(gè)文件的數(shù)據(jù),我們就要靠這寫(xiě)數(shù)據(jù)去判別這個(gè)文件是什么類(lèi)型的、誰(shuí)創(chuàng)建的、什么時(shí)候創(chuàng)建的
- 當(dāng)我們對(duì)一個(gè)文件的【文件內(nèi)容】做修改的時(shí)候變化的即為
Modify
時(shí)間,例如使用vim將其打開(kāi)然后對(duì)內(nèi)容做一些修改 - 當(dāng)我們對(duì)一個(gè)文件的【文件屬性】做修改的時(shí)候變化的即為
Change
時(shí)間,我們?cè)贚inux權(quán)限一文中也有講到過(guò)文件
- 那使用像
chmod
、chown
、chgrp
這些指令就可以去修改文件對(duì)應(yīng)的【擁有者】、【所屬組】、【other】的權(quán)限,即修改的文件的相關(guān)屬性
- 我們可以來(lái)修改一下試試看,再去執(zhí)行
stat
指令便可以發(fā)現(xiàn)有了變化
- 看完如何修改
Change
時(shí)間我們?cè)賮?lái)試著修改一下Modify
時(shí)間,例如打開(kāi)vim修改一下里面的內(nèi)容,再去執(zhí)行[stat]
指令就可以發(fā)現(xiàn)Change
時(shí)間和Modify
時(shí)間一同發(fā)生了修改,一般二者是會(huì)有一個(gè)關(guān)聯(lián),后者會(huì)因?yàn)榍罢叩男薷亩薷模?u>文件的內(nèi)容改了,文件的屬性也會(huì)改;把文件內(nèi)容刪了一部分,文件大小size就會(huì)變小 - 但是
Change
時(shí)間的修改不會(huì)導(dǎo)致Modify
時(shí)間發(fā)生變化,這個(gè)我們上面也觀察到過(guò)了
-
那我們就可以來(lái)總結(jié)一下三個(gè)ACM時(shí)間所對(duì)應(yīng)的修改機(jī)制
- 【Access】:拿vim把文件打開(kāi),對(duì)里面的內(nèi)容做修改
- 【Modify】:重定向、vim編寫(xiě)文件內(nèi)容
- 【Change】:chmod、chown、chgrp所做的這些事情
touch命令手動(dòng)更新ACM時(shí)間
對(duì)于這個(gè)ACM時(shí)間,除了通過(guò)我們?nèi)バ薷奈募南嚓P(guān)內(nèi)容和屬性引發(fā)修改之外,還可以手動(dòng)去更新這個(gè)時(shí)間
?? 那就是使用我們所學(xué)習(xí)過(guò)的touch
指令
- 可以看到,這里我使用
touch test.c
,因?yàn)檫@個(gè)文件文身就是存在的,所以呢就會(huì)去更新一下它的ACM時(shí)間,那若是這個(gè)文件本身不存在的話(huà),就會(huì)將其創(chuàng)建出來(lái)
- 當(dāng)然,你也可以實(shí)現(xiàn)像下面這兩條指令去指定更改哪一個(gè)ACM時(shí)間,讀者這邊可以下去自己試一試,每個(gè)操作系統(tǒng)可能不太一樣
touch -m test.c
touch -a test.c
好,以上就是本文所要介紹的Linux下的ACM時(shí)間,你也打acm嗎??文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-535184.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-535184.html
到了這里,關(guān)于原來(lái)Linux里也能打《ACM》?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!