Найти, когда файл был закрыт в Unix

Найти, когда файл был закрыт в Unix

Я знаю, 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 нет ничего похожего, насколько я знаю. Может быть есть косвенный путь черезаудитсистема, но это не тот подход, который будет работать в большинстве случаев.

Самый простой способ заставить программу B отреагировать, когда программа A закончит запись, — заставить программу A отправить уведомление программе B. Это может быть что угодно: сигнал, байт в канале или сокет, или просто запуск A B или скрипта, который запускает A, а затем запускает B.

Если это невозможно, то хотя бы организуйте запись файла A под временным именем, а затем переместите его под конечным именем, когда он закончит запись. Затем пусть B следит только за невременными файлами.

Связанный контент