對atime mtime和ctime的研究

2022-08-13 13:51:33 字數 2985 閱讀 3494

前期準備

在實驗之前我們在討論為何會出現兩種修改時間,為此我們推測因為修改的不是檔案的同一資料,或者說同一地方,那麼我們就要先搞清楚檔案的結構。

linux檔案系統是linux系統的心臟部分,提供了層次結構的目錄和檔案。檔案系統將磁碟空間劃分為每1024個位元組一組,稱為塊(也有用512位元組為一塊的,如:scoxenix)。編號從0到整個磁碟的最大塊數。

全部塊可劃分為四個部分,塊0稱為引導塊,檔案系統不用該塊;塊1稱為專用塊,專用塊含有許多資訊,其中有磁碟大小和全部塊的其他兩部分的大小。從塊2開始是i節點表,i節點表中含有i節點,表的塊數是可變的。i節點表之後是空閒儲存塊(資料儲存塊),可用於存放檔案內容。i節點是乙個64位元組長的表,含有有關乙個檔案的資訊,其中有檔案大小、檔案所有者、檔案訪問許可方式,以及檔案為普通檔案、目錄檔案還是特別檔案等。linux系統中,系統把檔案內容資料與i節點資料是分別存放的,i節點資料存放了檔案許可權與檔案屬主之類的資料。結合這些知識,我們猜測修改時間或者改變時間乙個對應了對檔案內容的修改,乙個對應對檔案許可權或屬性的修改即對i節點資料的修改。

在此之前還有乙個時間,即檔案的訪問時間,這個沒有爭議,就是檔案最後的訪問時間。下面我們開始進行實驗。

實驗過程:

首先我們建立乙個檔案test

用stat命令檢視下屬性

可以看到三個時間都是一樣的23:06:32

修改前修改後

看下時間

我們發現只有change時間發生變化。下面我們對test.c的內容進行更改

更改前更改後

看一下時間變化

修改時間和改變時間都變化了,與假設不相符,證明假設是錯誤的,那我們再次提出假設,只要檔案發生變化,change時間就會改變,只有對檔案內容更改時modify(修改時間)才會變化。

下面驗證這一假設

我們用mv指令對test.c進行操作

看下時間變化

只有change時間發生了變化,接下來對test.c的內容進行更改

可以看到修改時間和change時間都發生了變化,我們再實驗一下,這次用ln指令(軟連線)

可以看到改變檔案的屬性只有change時間改變,而modify時間未變。

為了保證嚴謹性,我們換個檔案再試驗一次

我們更改檔案內容

可以看多到兩個時間都改變了,下面我們更改檔案許可權

檢視時間

可以看到只有change時間改變了

綜上,我們可以得出結論

access時間是最後的訪問時間,modify是指最後修改檔案內容的時間,change是指最後對檔案進行修改操作的時間。

最後附上基本操作對這三個時間的影響

操作

atime

mtime

ctime

mv

________

________

cp

√________

________

touch

√(被設定的時間)

√(被設定的時間)

cat/more/less

√________

________

ls

________

________

________

chmod/chmown

________

________

ln

________

________

echo

________

________

________

vi

√________

________

Stream和Reader Writer物件學習

1.stream是所有流的抽象基類。流是位元組序列的抽象概念,例如檔案 輸入 輸出裝置 內部程序通訊管道或者 tcp ip 套接字。stream類及其派生類提供這些不同型別的輸入和輸出的一般檢視,使程式設計師不必了解作業系統和基礎裝置的具體細節。常用的stream的子類有 system.io.fil...

Stream和Reader Writer物件學習

1.stream是所有流的抽象基類。流是位元組序列的抽象概念,例如檔案 輸入 輸出裝置 內部程序通訊管道或者 tcp ip 套接字。stream類及其派生類提供這些不同型別的輸入和輸出的一般檢視,使程式設計師不必了解作業系統和基礎裝置的具體細節。常用的stream的子類有 system.io.fil...

python 和 區別 Python 對 和

在其他語言中,屬性以 開頭一般用於表示這個屬性是私有屬性,不能在外部訪問。在python中是不存在私有屬性這種說法的。以 開頭的屬性,只是表名是私有屬性,和api的呼叫沒有關係。但是也是可以呼叫的 classa def init self self.private am i private?a a ...