2016年12月18日 星期日

修改 Linux 系統中檔案的『存取、修改時間』

在比對兩台電腦中檔案的新舊時,最常用的是比對兩個檔案的時間。可是 Linux 系統中的檔案卻有好幾個時間,
時 間 分 類說  明
存取 (Access)最近一次『存取檔案』的時間,未修改檔案內容。
修改 (Modify)最後一次『修改檔案內容』的時間,為一般查詢時所顯示的時間。
改變 (Change)最後一次『修改後設資料 (metadata)』的時間。
:『後設資料』類似於檔案的屬性資料,如『擁有者』、『權限』等。
  查詢上述的檔案時間有許多方法,如:由「終端機」下的 stat 命令,
[SiB@Core-i7 ~]$ stat rocketraid-linux-3.11-patch-r2.tar.bz2
File: 'rocketraid-linux-3.11-patch-r2.tar.bz2'
Size: 11534Blocks: 32IO Block: 4096  普通檔案
Device: 10304h/66308d Inode: 17565020 Links: 1
Access: (0640/-rw-r-----)    Uid: ( 1000/ SiB)    Gid: ( 1000/  SiB)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2015-04-21 10:45:49.421006638 +0800
Modify: 2015-04-21 10:42:52.421742032 +0800
Change: 2015-04-21 10:43:05.916533481 +0800
  Birth:-
或由「檔案管理員」查詢檔案屬性。

修改檔案的時間,可用 touch 這個命令,幾個常用之參數列表說明如下:
參  數作  用  說  明
-a只修改「存取時間」。
-d 字串使用『字串』所表示的時間,而非現在時間。
--date=字串
-h只改變『鏈結』本身的時間,而非『所鏈結的檔案』之時間。
--no-dereference
-m只修改「修改時間」。
-r 檔名使用『檔名』所指定該檔的時間,而非現在時間。
--reference=檔名
-t 字串使用『字串』所表示的時間,而非現在時間,『字串』格式為 [[CC]YY]MMDDhhmm[.ss]。
--time=字串

試過上述幾個參數的組合後,覺得這兩個命令就夠了。
[SiB@Celeron-D ~]# touch rocketraid-linux-3.11-patch-r2.tar.bz2 -a -d "2015-04-21 10:45:49.421006638 +0800"
[SiB@Celeron-D ~]# touch rocketraid-linux-3.11-patch-r2.tar.bz2 -m -d "
2015-04-21 10:42:52.421742032 +0800"
上例中,第一列命令是修改檔案的『存取時間』,第二列命令是修改檔案的『修改時間』。而『時間字串』則取自另一個檔案的查詢結果。

:檔案的『改變時間』在 Linux 系統是不能修改的,這是基於安全性的理由。是有一些方法可以修改,不過不建議使用。

已測試版本:

  • Fedora: 23, 25

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)