Linux 檔案時間戳記說明:atime、mtime 和 ctime

什麼時候「改變」不等於「修改」?當我們談論 Linux 檔案的時間戳記時。在本指南中,我們將解釋系統如何更新它們以及如何自行修改它們。

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

atime、mtime、ctime 的區別

每個Linux檔案都有三個時間戳記:存取時間戳記(atime)、修改時間戳記(mtime)和更改時間戳(ctime)。

訪問時間戳記是上次讀取檔案的時間。這意味著有人使用程式查看文件的內容或從中讀取一些值。文件中沒有任何內容被修改或新增。數據已引用但未更改。

修改時間戳表示上次修改文件內容的時間。程式或進程編輯或操作檔案。 「修改」表示檔案中的某些內容已被修改或刪除,或已新增資料。

更改的時間戳並不表示對文件內容的更改。相反,它是與文件相關的元資料發生更改的時間。例如,檔案權限變更將更新變更的時間戳記。

標準Linux ext4檔案系統也在其內部檔案系統結構中為檔案建立時間戳記分配空間,但這尚未實現。有時,這個時間戳會被填滿,但你不能依賴其中的值。

詳細時間戳

Linux 時間戳包含數字而不是日期和時間。這個數字是秒前的數字 Unix時代,即 00 年 00 月 00 日午夜 (1:1970:XNUMX), 協調世界時 (UTC)。 Linux 時間戳中忽略了閏秒,因此它們與即時完全不同。

當Linux需要顯示時間戳記時,它將秒數轉換為日期和時間。這使得人類更容易理解。電腦檢視檔案的位置和時區指示電腦將秒數轉換為日期和時間。它還確保月份使用正確的語言。

那麼,一個時間戳可以儲存多少秒呢?很多——準確地說是 2,147,483,647。這是一個很大的數字,但這足夠嗎?如果將其添加到 Unix 時代,然後將其轉換為日期和時間,則會得到 19 年 2038 月 03 日星期二凌晨 14:07:XNUMX。在此之前我們需要一個不同的時間戳系統。

顯示時間戳

當-l(長列表)選項與ls一起使用時,如下所示, 可以看到修改後的時間戳記:

ls -l dp.c

如果您想查看訪問時間戳,請使用 -lu(訪問時間)選項,如下所示:

ls-lu dp.c

最後,要查看更改的時間戳,可以使用-lc(更改時間)選項;寫下以下內容:

ls -lc dp.c

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

上面的時間戳顯示文件內容的最後修改時間是21 年2019 月20 日。訪問時間戳和更改時間戳是相同的,因為文件是在2020 年XNUMX 月XNUMX 日從另一台計算機複製到這台計算機的,並且兩個時間戳記都是在那時更新的。

另請閱讀:  如何從 Ubuntu 遠程反向仿真和控制 Android

查看 一次所有時間戳,使用stat指令如下:

統計dp.c

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

時區列在螢幕底部。正如您所看到的,它們具有非常精確的秒組件。在每個時間戳的末尾,您還會看到 -0500 或 -0400。

這些是時區偏移。檔案系統記錄UTC時間戳,並在統計顯示時將其轉換為本地時區。我們用於研究本文的計算機的配置就好像它位於美國東部標準時間 (EST) 區域一樣。

當東部時間生效時,該時區比協調世界時 (UTC) 晚 2019 小時。然而,當東部夏令時 (EDT) 生效時,它比協調世界時 (UTC) 晚四個小時。 XNUMX 年 XNUMX 月,修訂後的時間戳發生更改時,美國東部標準時間生效。這就是為什麼其中兩個時間戳記有五小時的偏移,但編輯後的版本有四小時的偏移。

偏移量和時區不儲存在任何地方。沒有指派 inode 和檔案系統空間來保存這些值。您必須使用時間戳記(始終為 UTC)、查看文件的電腦的本地時區以及夏令時是否有效來快速計算此值。

您還會看到「出生」時間戳,該時間戳記是為檔案建立日期保留的。這尚未實現,您將看到連字符“-”而不是時間戳。

更改時間戳

如果需要,您可以更改文件上的時間戳記。您可以使用 touch 指令來變更存取或修改時間戳, 或兩者:

touch-a dp.c

要設定新的存取時間戳,可以使用 -a(存取時間)選項。此命令將存取時間戳記設定為電腦的當前時間:

統計dp.c

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

正如預期的那樣,訪問時間戳記已更改。不過,改變的時間戳記也被更新了;這是正常的。

若要變更修改的時間戳,可以使用 -m(修改時間)選項:

touch-m dp.c
統計dp.c

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

這次,修改和變更的時間戳已經更新。

如果您想同時變更時間戳記和修改的存取權限,可以使用 -d(日期)選項。您也可以指定時間和日期 - 您不限於將時間戳更改為現在。

我們將使用以下指令將存取和修改時間戳設定為10年30月45日15:2020:XNUMX:

觸碰-d“2020-01-15 10:30:45”dp.c
統計dp.c

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

我們現在已將存取和修改時間戳設置為過去的日期。更改後的時間戳也會更新為計算機的當前時間。

如果要將一個檔案的時間戳記設定為另一個檔案的時間戳記值,也可以使用 -r(參考)選項,如下所示:

touch dp.c -r dice_words.sl3
統計dp.c

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

之後,我們幾乎回到了開始的地方,混合了 -0400 和 -0500 時間戳。

另請閱讀:  如何使用 SCP 在 Linux 中安全地傳輸文件

讓我們做一些只影響變數時間戳記的事情。我們將使用 chmod 命令來授予可執行文件 所有使用者的執行權限:

chmod +x dp
統計dp

更改後的時間戳記是唯一更新的時間戳記。這是因為文件本身沒有改變,也沒有被存取或修改。但是,有關該文件的元資料已更改。

檔案系統如何更新時間戳記?

安裝檔案系統後,您可以使用一些選項來指定該檔案系統的運作方式或與其互動的方式。它們儲存在檔案 /etc/fstab 中,該檔案在啟動時被讀取並處理。您也可以設定選項來指示應使用哪個系統來更新存取時間戳記。

以下是一些最受歡迎的選項:

strictatime:此選項在每次存取檔案時更新檔案存取時間戳記。這種方法會產生額外的成本,但某些伺服器可以從這種方案中受益。與桌上型電腦或筆記型電腦相比,它幾乎沒有什麼優勢。
noatime(no atime):此選項完全禁止更新檔案和目錄的存取時間戳記。但是,修改後的時間戳將會更新。
nodiratime(無 dir atime):此選項允許存取要更新的檔案的時間戳,但停用目錄的時間戳。
relatime:此選項僅在訪問時間戳超過 24 小時或前一個時間戳早於當前修改或更改的時間戳時更新訪問時間戳。這在頻繁更新訪問時間戳和根本不更新之間取得了良好的平衡。
讓我們來看看這台電腦的 /etc/fstab 文件,看看設定了哪些選項:

少/ etc / fstab

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

檔案 /etc/fstab 如下所示。

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

這是沒有換行的文件內容:

# /etc/fstab:靜態檔案系統資訊。
#
# 使用 'blkid' 列印通用唯一識別符
#裝置;這可以與 UUID= 一起使用,作為命名設備的更可靠的方式
# 即使新增和刪除磁碟也能正常運作。請參閱 fstab(5)。
#
# <文件 系統> <安裝 關鍵> <類型> <方案> <傾倒> <通過>
# 安裝期間 / 位於 /dev/sda1
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 錯誤=重新安裝-ro 0 1 /swapfile 無交換sw 0 0

只有兩個條目,其中之一是交換文件,我們可以忽略它。另一個安裝在檔案系統的根目錄 ( / ) 上,並且在安裝時位於裝置 /dev/sda1 上。這是第一個硬碟上的第一個分割區,它恰好包含 ext4 檔案系統。

傳遞給它的唯一選項是errors=remount-ro,它告訴作業系統如果在嘗試將其安裝為讀寫檔案系統時出現錯誤,則將該檔案系統重新安裝為唯讀系統。

因此,沒有提及如何處理訪問時間戳。讓我們更深入地研究一下 /proc/mounts 能告訴我們什麼。我們將透過 grep 連接 /proc/mounts 的輸出。 我們的搜尋字串將是“sda”,硬碟標識符。

另請閱讀:  如何在 Linux 中使用 Tomb 加密文件

我們寫如下:

貓 /proc/掛載 | grep “sda”

Linux 檔案時間戳記說明:atime、mtime、ctime - %categories

現在我們看到以下選項:

rw:檔案系統將會掛載為讀寫檔案系統。
relatime:檔案系統將使用「相對時間」系統來更新存取時間戳記。
這個是從哪裡來的?那麼,連結圖表用於以下情況:

使用預設選項 /etc/fstab 時。
使用相關時間 /etc/fstab 時。
當未使用 /etc/fstab 中的存取時間戳選項,且您使用的是 Linux 核心 2.6.30 或更高版本時。
我們的 ext4 檔案系統的 /etc/fstab 條目沒有指定任何更新存取時間戳的選項,因此 Linux 做出了明智的選擇並使用了 relatime。

時間戳很重要

時間戳為我們提供了一個簡單的方法來了解檔案何時被存取、修改或更改。但更重要的是,它提供了一種備份和同步軟體的方式來識別需要備份的檔案。

當您需要強制說服程式包含或忽略一個文件或一組文件時,操作時間戳記的能力將派上用場。

Linux命令
焦油·pv··TAC·CHMOD·grep的 ·差異·口渴·ar··PUSHD·波普德·fsck的·testdisk··fd·潘多克·cd·$ PATH·AWK·加入·jq··優衣庫·journalctl·尾巴·統計·ls·fstab文件·錯過··chgrp·喬敦···字符串·類型·重命名·拉鍊·拉開拉鍊·安裝·數量·安裝·FDISK·的mkfs·rm·命令rmdir·rsync的·df·GPG·vi·納米·MKDIR·du·ln·補丁·轉換·rclone·撕碎·SRM·SCP·GZIP·聊天室···遮罩·wc· tr
流程 別號·屏幕·最佳·尼斯·雷尼斯·進步·痕跡·systemd·TMUX·chsh·歷史·at·批量· ·哪一個·dmesg的·瑞士法郎·用戶模組·ps·chroot環境·參數·TTY·小指··vmstat的·超時····睡覺·須藤·su·時間·組添加·用戶模組·團體·lshw·關閉·重啟··關機·passwd文件·lscpu·crontab中·日期·bg·fg·皮多夫·Nohup·映射圖
網路相關 netstat命令··跟踪路由·ip·ss·域名·fail2ban·濛濛··手指·NMAP·FTP·捲曲·wget的··WHOAMI·w·iptables的·SSH-凱基·UFW·琶音·firewalld
你可能也會喜歡