Encuentra cuándo se cerró el archivo en Unix

Encuentra cuándo se cerró el archivo en Unix

ls -lque dará la hora de modificación del archivo, pero indica la hora en que se abrió el archivo, no en que se cerró (usando Ctrl+ Do algo así).

Por favor dígame cómo encontrar la hora del cierre del archivo.

[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 

Aquí he creado un archivo llamado aa,

El archivo se creó a las 10:33, pero cuando lo cerré y verifiqué la fecha de modificación del archivo, todavía mostraba 10:33.

Pero la fecha de finalización de la creación del archivo (hora de cierre) es las 10:41.

¿Existe algún comando en AIX para saber cuándo está cerrado el archivo o podemos escribir algún script bash para rastrear el archivo automáticamente?

Respuesta1

La única información que puede obtener de un sistema de archivos normal para un archivo son los tiempos de modificación ( ls -l), acceso ( ls -lu) y modificación de estado ( ls -lc).

El archivo no cambia cuando se cierra, por lo que no hay nada en el estado del archivo que lo refleje. La información del directorio actual stattampoco refleja este cierre y refleja los tiempos de modificación y cambio del archivo (hasta que se cambie algo más en el directorio).

El tiempo de modificación probablemente será diferente si escribe un archivo sin búfer, ya que entonces el acceso real al discopodría, pero no tiene por qué serlo en el momento en que se cierra el archivo. Sin embargo, no veo una manera fácil de comprobarlo desde la línea de comandos.

POR CIERTO. Es más fácil de usar statpara estos experimentos, ya que tiene una granularidad de segundos, lo que significa que no tienes que esperar tanto para obtener una diferencia visible ;-)

Respuesta2

ls -lenumera la hora de modificación del archivo. Esta no es la hora en que se abrió el archivo ni la hora en que se cerró, sino la hora en la que se escribió por última vez. Suele ser bastante cercano al momento en que se cerró el archivo, pero no necesariamente idéntico.

Usted está probablementehaciendo la pregunta equivocada. Si desea reaccionar cuando un programa haya terminado de escribir en un archivo (es decir, hacer algo cuando el programa haya cerrado el archivo), los tiempos son irrelevantes, lo que necesita es una notificación de que el archivo se ha cerrado.

Linux tieneinotifypara esto y BSD tienekqueue, pero hasta donde yo sé, AIX no tiene nada similar. Puede haber una forma indirecta a través delauditoríasistema, pero este no es un enfoque que probablemente funcione para la mayoría de los casos de uso.

La forma más sencilla de hacer que el programa B reaccione cuando el programa A haya terminado de escribir es hacer que el programa A envíe una notificación al programa B. Esto puede ser cualquier cosa que desee: una señal, un byte en una tubería o enchufe, o simplemente hacer que A se inicie. B o tener un script que ejecuta A y luego ejecuta B.

Si esto no es posible, al menos haga arreglos para que A escriba el archivo con un nombre temporal y luego muévalo a su nombre final cuando termine de escribir. Luego haga que B observe solo los archivos no temporales.

información relacionada