我知道ls -l
會給出文件的修改時間,但它給出的是文件打開而不是關閉的時間(使用Ctrl+D或其他東西)
請告訴我如何找到文件關閉時間
[BASH]$date
Wed May 7 10:33:01 EEST 2014
[BASH]$cat >aa
adf
adsf
#waited 8 mins before closing file (time of closing: 10:41)
[BASH]$ls -l aa
-rw------- 1 orclschd staff 9 May 7 10:33 aa
[BASH]$date
Wed May 7 10:41:47 EEST 2014
[BASH]$stat aa
bash: stat: command not found
[BASH]$uname
AIX
在這裡我創建了一個名為的文件aa
,
該文件是在 10:33 建立的,但是當我關閉文件並檢查文件的修改日期時,它仍然顯示 10:33。
但檔案建立結束日期(關閉時間)是 10:41 。
AIX 中是否有任何命令可以查找檔案何時關閉,或者我們可以編寫任何 bash 腳本來自動追蹤檔案嗎?
答案1
您可以從普通檔案系統取得檔案的唯一資訊是修改 ( ls -l
)、存取 ( ls -lu
) 和狀態修改 ( ls -lc
) 時間。
文件關閉時不會更改,因此文件狀態中沒有任何內容反映這一點。當前目錄stat
資訊也不反映此關閉,而是反映文件的修改和更改時間(直到目錄中的其他內容發生更改)。
如果您對檔案進行無緩衝寫入,則修改時間可能會有所不同,因為實際的磁碟訪問可能,但不一定是在文件關閉時。不過,我認為沒有簡單的方法可以從命令列檢查這一點。
順便提一句。它更容易用於stat
這些實驗,因為它具有秒粒度,這意味著您不必等待那麼長時間才能獲得明顯的差異;-)
答案2
ls -l
列出文件的修改時間。這既不是開啟檔案的時間,也不是關閉檔案的時間,而是上次寫入檔案的時間。這通常與文件關閉的時間非常接近,但不一定相同。
你可能是問錯問題。如果您想在程式完成寫入檔案時做出反應(即在程式關閉檔案時執行某些操作),則時間無關緊要,您需要的是檔案已關閉的通知。
Linux 有inotify
為此,BSD 有kqueue
,但據我所知,AIX 沒有類似的東西。可能有一種間接的方式,透過審計系統,但這並不是一種適用於大多數用例的方法。
當程式A 完成寫入時,讓程式B 做出反應的最簡單方法是讓程式A 向程式B 發送通知。只是讓A 啟動B 或有一個運行 A 然後運行 B 的腳本。
如果這不可能,請至少安排 A 將檔案寫入一個臨時名稱,然後在寫入完成後將其移至最終名稱。然後讓 B 僅監視非臨時檔案。