Descubra quando o arquivo foi fechado no Unix

Descubra quando o arquivo foi fechado no Unix

Eu sei ls -lque vai dar a hora de modificação do arquivo, mas está dando a hora em que o arquivo foi aberto, não fechado (usando Ctrl+ Dou algo assim)

Por favor me diga como encontrar a hora do arquivo fechado

[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 

Aqui eu criei um arquivo chamado aa,

O arquivo foi criado às 10h33, mas quando fechei o arquivo e verifiquei a data de modificação do arquivo, ele ainda mostrava 10h33.

Mas a data de término da criação do arquivo (horário de fechamento) é 10:41 .

Existe algum comando no AIX para descobrir quando o arquivo é fechado ou podemos escrever algum script bash para rastrear o arquivo automaticamente?

Responder1

As únicas informações que você pode obter de um sistema de arquivos normal para um arquivo são os tempos de modificação ( ls -l), acesso ( ls -lu) e modificação de status ( ls -lc).

O arquivo não muda quando fechado, portanto não há nada no status do arquivo que reflita isso. As informações atuais do diretório stattambém não refletem esse fechamento e refletem os tempos de modificação e alteração do arquivo (até que algo mais seja alterado no diretório).

O tempo de modificação provavelmente será diferente se você gravar sem buffer em um arquivo, pois o acesso real ao discopoder, mas não precisa estar no momento em que o arquivo é fechado. Não vejo uma maneira fácil de verificar isso na linha de comando.

POR FALAR NISSO. É mais fácil de usar statpara esses experimentos, pois possui granularidade de segundos, o que significa que você não precisa esperar tanto para obter uma diferença visível ;-)

Responder2

ls -llista o horário de modificação do arquivo. Esta não é a hora em que o arquivo foi aberto nem a hora em que o arquivo foi fechado, mas a hora em que o arquivo foi gravado pela última vez. Geralmente, isso ocorre bem próximo ao momento em que o arquivo foi fechado, mas não necessariamente idêntico.

Você provavelmente estáfazendo a pergunta errada. Se você quiser reagir quando um programa terminar de gravar em um arquivo (ou seja, fazer algo quando o programa fechar o arquivo), os horários são irrelevantes, o que você precisa é de uma notificação de que o arquivo foi fechado.

Linux teminotifypara isso e o BSD temkqueue, mas o AIX não tem nada semelhante, até onde eu sei. Pode haver uma forma indireta através doauditoriasistema, mas esta não é uma abordagem que provavelmente funcionará para a maioria dos casos de uso.

A maneira mais simples de fazer o programa B reagir quando o programa A terminar de escrever é fazer com que o programa A envie uma notificação para o programa B. Isso pode ser qualquer coisa que você quiser: um sinal, um byte em um tubo ou soquete, ou simplesmente fazer com que A seja iniciado. B ou ter um script que executa A e depois executa B.

Se isso não for possível, pelo menos providencie para que A grave o arquivo em um nome temporário e, em seguida, mova-o para seu nome final quando terminar de escrever. Em seguida, faça com que B observe apenas arquivos não temporários.

informação relacionada