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