Я знаю, 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 следит только за невременными файлами.