私は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
情報はこの閉鎖を反映していませんが、代わりにファイルの変更と変更時間(ディレクトリ内の他のエントリが変更されるまで)を反映しています。
ファイルへのバッファリングされていない書き込みを行う場合、物理ディスクへのアクセスにより変更時間が異なる場合があります。可能しかし、ファイルが閉じられているときは必ずしもそうではありません。しかし、コマンドラインでこれを確認する簡単な方法はないと思います。
ところで。 2番目のレベルの粒度があるため、これらの実験に使用する方が簡単です。stat
つまり、目立つ違いを得るために長く待つ必要はありません。 ;-)
答え2
ls -l
ファイル変更時間をリストします。これは、ファイルが開かれた時間または閉じられた時間ではなく、ファイルが最後に書き込まれた時間です。これは通常、ファイルが閉じられた時間と非常に似ていますが、必ずしも同じではありません。
あなたはおそらく間違った質問をする。プログラムがファイルの書き込みが終了したときに応答する(たとえば、プログラムがファイルを閉じるときにアクションを実行する)、時間は重要ではありません。必要なのは、ファイルが閉じられたという通知です。
Linuxはinotify
このために、BSDはkqueue
しかし、私が知っている限り、AIXに似たものはありません。間接的な方法があるかもしれません。審査システムですが、これはほとんどのユースケースに適したアプローチではありません。
プログラムBが反応する最も簡単な方法は、プログラムAが書き込みを完了したときにプログラムAにプログラムBに通知を送信させることです。信号、パイプ、ソケットのバイトなど、必要なものは何でも構いません。あるいは、AにBを起動させるか、Aを実行してからBを実行するスクリプトを含めることもできます。
これが不可能な場合は、少なくともAがファイルを一時的な名前で書き、書き込みが完了したら最終的な名前に移動するようにしてください。次に、Bに一時以外のファイルのみを監視させます。