Ich weiß, ls -l
dass die Änderungszeit der Datei angegeben wird, aber es wird die Zeit angegeben, zu der die Datei geöffnet und nicht geschlossen wurde (mit Ctrl+ Doder so etwas).
Bitte sagen Sie mir, wie ich den Zeitpunkt herausfinden kann, zu dem die Datei geschlossen wurde
[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
Hier habe ich eine Datei mit dem Namen erstellt aa
,
Die Datei wurde um 10:33 Uhr erstellt, aber als ich die Datei schloss und das Änderungsdatum der Datei überprüfte, zeigte es immer noch 10:33 Uhr an.
Das Enddatum der Dateierstellung (Schließzeit) ist jedoch 10:41 Uhr.
Gibt es in AIX einen Befehl, um festzustellen, wann die Datei geschlossen wird, oder können wir ein Bash-Skript schreiben, um die Datei automatisch zu verfolgen?
Antwort1
Die einzigen Informationen, die Sie aus einem normalen Dateisystem zu einer Datei erhalten können, sind die Änderungszeit ( ls -l
), der Zugriffszeit ( ls -lu
) und der Änderungsstatus ( ls -lc
).
Die Datei ändert sich beim Schließen nicht, daher gibt es im Status der Datei nichts, das dies widerspiegelt. Die aktuellen Verzeichnisinformationen stat
spiegeln dieses Schließen ebenfalls nicht wider und spiegeln die Änderungs- und Änderungszeiten der Datei wider (bis etwas anderes im Verzeichnis geändert wird).
Die Änderungszeit wird wahrscheinlich anders sein, wenn Sie ungepuffert in eine Datei schreiben, da dann der tatsächliche Festplattenzugriffkönnte, muss aber nicht in dem Moment sein, in dem die Datei geschlossen wird. Ich sehe jedoch keine einfache Möglichkeit, dies über die Befehlszeile zu überprüfen.
Übrigens. Es ist für diese Experimente einfacher zu verwenden stat
, da es eine Sekundengranularität hat, was bedeutet, dass Sie nicht so lange warten müssen, um einen sichtbaren Unterschied zu sehen ;-)
Antwort2
ls -l
listet den Änderungszeitpunkt der Datei auf. Dies ist weder die Zeit, zu der die Datei geöffnet wurde, noch die Zeit, zu der die Datei geschlossen wurde, sondern die Zeit, zu der zuletzt in die Datei geschrieben wurde. Dies liegt normalerweise ziemlich nahe an der Zeit, zu der die Datei geschlossen wurde, ist aber nicht unbedingt identisch.
Du bist wahrscheinlichdie falsche Frage stellenWenn Sie reagieren möchten, wenn ein Programm mit dem Schreiben in eine Datei fertig ist (also etwas tun möchten, wenn das Programm die Datei geschlossen hat), sind die Zeiten irrelevant. Was Sie benötigen, ist eine Benachrichtigung, dass die Datei geschlossen wurde.
Linux hatinotify
dafür und BSD hatkqueue
, aber AIX hat nichts vergleichbares, soweit ich weiß. Es gibt vielleicht einen indirekten Weg über diePrüfungSystem, aber dieser Ansatz wird wahrscheinlich in den meisten Anwendungsfällen nicht funktionieren.
Die einfachste Möglichkeit, Programm B dazu zu bringen, zu reagieren, wenn Programm A mit dem Schreiben fertig ist, besteht darin, Programm A dazu zu veranlassen, eine Benachrichtigung an Programm B zu senden. Dies kann alles Mögliche sein: ein Signal, ein Byte in einer Pipe oder einem Socket oder einfach, dass A B startet oder ein Skript, das A und dann B ausführt.
Wenn dies nicht möglich ist, veranlassen Sie zumindest, dass A die Datei unter einem temporären Namen schreibt und sie dann nach dem Schreiben auf ihren endgültigen Namen verschiebt. Lassen Sie B dann nur nach nicht temporären Dateien Ausschau halten.