什麼時候“更改”不是“修改”的意思?當我們談論Linux檔案時間戳時。在本指南中,我們將解釋系統如何更新它們,以及如何自己修改它們。
每個Linux檔案都有三個時間戳:訪問時間戳(atime)、修改時間戳(mtime)和更改時間戳(ctime)。
訪問時間戳是上次讀取檔案的時間。這意味著有人使用程式來顯示檔案的內容或從中讀取一些值。沒有對檔案進行編輯或新增任何內容。資料已被引用,但未更改。
修改的時間戳表示上次修改檔案內容的時間。編輯或操縱檔案的程式或過程。“修改”是指檔案中的某些內容被修改或刪除,或者添加了新資料。
更改的時間戳不是指對檔案內容所做的更改。相反,它是與檔案相關的元資料更改的時間。例如,檔案許可權更改將更新更改的時間戳。
標準的ext4linux檔案系統也在其內部檔案系統結構中為檔案建立時間戳分配空間,但這還沒有實現。有時,填充了這個時間戳,但不能依賴於它中的值。
Linux時間戳儲存的是一個數字,而不是日期和時間。此數字是自Unix紀元(協調世界時,1970年1月1日午夜(00:00:00))以來的秒數。在Linux時間戳中,閏秒被忽略了,因此它們與實時不相似。
當Linux需要顯示時間戳時,它會將秒數轉換為日期和時間。這使得人類更容易理解。檢視檔案的計算機所在的位置和時區指導將秒數轉換為日期和時間。它還可以確保月份使用正確的語言。
那麼,一個時間戳可以儲存多少秒?準確地說是2147483647。這是一個很大的數字,但足夠嗎?如果您將其新增到Unix epoch中,然後將其轉換為日期和時間,您將得到2038年1月19日星期二凌晨03:14:07的時間戳。不過,在此之前,我們需要一個不同的時間戳方案。
將-l(long listing)選項與ls一起使用時,如下圖所示,可以看到修改後的時間戳:
ls -l dp.c如果要檢視訪問時間戳,請使用-lu(訪問時間)選項,如下所示:
ls -lu dp.c最後,要檢視更改時間戳,可以使用-lc(更改時間)選項;鍵入以下內容:
ls -lc dp.c上面的時間戳顯示檔案內容最後一次修改是在2019年4月21日。訪問和更改的時間戳是相同的,因為檔案是在2020年1月20日從另一臺計算機複製到這臺計算機上的,並且兩個時間戳都是在那時更新的。
要同時檢視所有時間戳,請使用stat命令,如下所示:
stat dp.c時區列在顯示屏底部。如你所見,它們有一個非常精確的分數秒分量。在每個時間戳的末尾,還可以看到-0500或-0400。
這些是時區偏移。檔案系統以UTC格式記錄時間戳,並在stat顯示時將其轉換為本地時區。我們用於研究本文的計算機配置為美國東部標準時區(EST)。
當東部標準時間生效時,該時區比UTC晚5個小時。然而,當東部夏令時(EDT)生效時,它比UTC晚了四個小時。2019年4月,修改後的時間戳發生變化,EDT生效。這就是為什麼兩個時間戳的偏移量為5小時,而修改的時間戳的偏移量為4小時。
偏移量和時區不會儲存在任何地方。沒有inode或檔案系統空間專門用來儲存這些值。您必須使用時間戳(始終是UTC時間)、顯示檔案的計算機的本地時區以及DST是否有效來動態計算這些時間。
您還會看到一個“出生”時間戳,它是為檔案的建立日期保留的。這沒有實現,您會看到連字元“-”而不是時間戳。
相關:你想知道的關於Linux上inodes的一切
如果需要,可以更改檔案上的時間戳。您可以使用touch命令更改訪問或修改的時間戳,或者兩者兼有:
touch -a dp.c要設定新的訪問時間戳,可以使用-a(訪問時間)選項。此命令將訪問時間戳設定為計算機的當前時間:
stat dp.c訪問時間戳已按預期更改。但是,更改的時間戳也被更新了;這是正常的。
要更改修改的時間戳,可以使用-m(修改的時間)選項:
touch -m dp.c stat dp.c這一次,修改和更改的時間戳被更新。
如果要同時更改訪問和修改的時間戳,可以使用-d(date)選項。您還可以指定一個時間和日期,而不限於將時間戳更改為現在。
我們將使用以下命令將訪問和修改的時間戳設定為2020年1月15日10:30:45:
touch -d "2020-01-15 10:30:45" dp.c stat dp.c我們現在將訪問和修改的時間戳設定為過去的日期。更改的時間戳也被更新為計算機的當前時間。
如果要將一個檔案的時間戳設定為另一個檔案的時間戳值,還可以使用-r(引用)選項,如下所示:
touch dp.c -r dice_words.sl3 stat dp.c然後,我們差不多回到了我們開始的地方,時間戳是-0400和-0500的混合。
讓我們做一些隻影響更改的時間戳的事情。我們將使用chmod命令為所有使用者授予可執行檔案執行許可權:
chmod +x dp stat dp更改的時間戳是唯一更新的時間戳。這是因為檔案本身沒有改變,它既沒有被訪問也沒有被修改。但是,有關該檔案的元資料已更改。
相關:如何在Linux上使用chmod命令
安裝檔案系統時,可以使用一些選項來指定該檔案系統的操作或處理方式。它們儲存在/etc/fstab檔案中,該檔案在引導時被讀取和處理。您還可以設定選項來指定他們應該用來更新訪問時間戳的方案。
以下是一些最常見的選項:
讓我們檢視此計算機的/etc/fstab檔案,並檢視設定了哪些選項:
less /etc/fstab將為我們顯示/etc/fstab檔案,如下所示。
以下是不帶環繞的檔案內容:
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <opti***> <dump> <pass> # / was on /dev/sda1 during installation UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1 /swapfile none swap sw 0 0只有兩個條目,其中一個是交換檔案,我們可以忽略它。另一個安裝在檔案系統的根目錄(/)上,安裝時在裝置/dev/sda1上。這是第一個硬碟上的第一個分割槽,它恰好包含一個ext4檔案系統。
傳遞給它的唯一選項是errors=remount ro,它告訴作業系統,如果嘗試將此檔案系統作為讀寫檔案系統裝載時出錯,則將其作為只讀檔案系統重新裝載。
所以,沒有提到如何處理訪問時間戳。讓我們深入研究一下/proc/mounts能告訴我們什麼。我們將透過grep將/proc/mounts的輸出管道。我們的搜尋字串將是“sda”,硬碟驅動器識別符號。
我們鍵入以下內容:
cat /proc/mounts | grep "sda"現在我們看到以下選項:
那是從哪裡來的?那麼,在以下情況下使用RelasTime方案:
ext4檔案系統的/etc/fstab條目沒有指定任何訪問時間戳更新選項,因此Linux做出了明智的選擇並使用relatime。
相關:如何在Linux上編寫fstab檔案
時間戳為我們提供了一種檢視檔案何時被訪問、修改或更改的簡單方法。但是,更重要的是,它們提供了一種備份和同步軟體的方法,以確定需要備份哪些檔案。
當您需要強制說服程式包含或忽略一個檔案或一組檔案時,操縱時間戳的能力將被證明是有用的。
...間戳也被大量使用,所以它們的儲存會增加。例如,每個檔案都有三個與之關聯的時間戳。 ...
...。要勾選所有方框,我們的服務必須是: 透過服務單元檔案與systemd整合 啟動時啟動 使用systemd的控制介面systemctl進行控制 能夠寫日記 建立服務程式 我們需要一個systemd會啟動的程式。我們將建立一個簡單的指令碼,稱為“htg....
...的改變。根據建立日誌的服務或守護程式,日誌通常位於檔案系統中的不同位置。但他們都有一個共同點。它們是純文字檔案。 使用systemd,所有系統、引導和核心日誌檔案都由一個集中的、專用的日誌解決方案收集和管理。它...
...rep命令是一個字串和模式匹配實用程式,它顯示來自多個檔案的匹配行。它還可以處理其他命令的管道輸出。我們教你怎麼做。 格雷普背後的故事 grep命令在Linux和Unix界很有名,原因有三個。首先,它非常有用。第二,豐富的...
Linux檔案系統依賴於inode。檔案系統內部工作的這些重要部分經常被誤解。讓我們看看他們到底是什麼,他們做了什麼。 檔案系統的元素 根據定義,檔案系統需要儲存檔案,而且它們還包含目錄。檔案儲存在目錄中,這些目錄...
...令,可以鍵入負數,如下所示: history -d -5 手動更新歷史檔案 當您登入或開啟終端會話時,歷史記錄列表將從歷史記錄檔案中讀取。在Bash中,預設的歷史檔案是.Bash\u history。 在當前終端視窗會話中所做的任何更改僅在關閉終端...
...挖個洞。你可以像剝洋蔥一樣剝Linux。 ls將向您顯示有關檔案的大量資訊,例如對其設定了哪些許可權、檔案的大小以及檔案是檔案還是符號連結。為了顯示這個資訊,ls從一個叫做inode的檔案系統結構中讀取它。 每個檔案和目...
...彩色顯示,請使用以下命令: sudo dmesg --color=always 人類時間戳 預設情況下,dmesg使用自核心啟動以來秒和納秒的時間戳表示法。要以更人性化的格式呈現,請使用-H(human)選項。 sudo dmesg -H 這導致兩件事發生。 輸出自動以較...
...項,包括一些您應該新增到命令列庫中的選項。 ls列出檔案和目錄 ls命令可能是大多數Linux使用者遇到的第一個命令。我們這些整天圍著命令列轉的人日復一日地使用它,甚至沒有想過它。這也許可以解釋為什麼這個命令比大...