Encontre quando o arquivo foi fechado no Unix

1

Eu sei que ls -l dará o tempo de arquivo modificado, mas está dando o tempo quando o arquivo foi aberto, não fechado (usando Ctrl + D ou alguma coisa)

Por favor, diga-me 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 (tempo fechado) é 10:41.

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

    
por Jeyanthinath 07.05.2014 / 10:01

2 respostas

4

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

O arquivo não muda quando fechado, então não há nada no status do arquivo que reflita isso. O diretório atual stat information não reflete esse fechamento e reflete os tempos de modificação e alteração do arquivo (até que alguma outra coisa seja alterada no diretório).

A hora da modificação provavelmente será diferente se você fizer uma gravação sem buffer em um arquivo, assim como o acesso ao disco real pode , mas não precisa estar no momento em que o arquivo é fechado. Eu não vejo uma maneira fácil de verificar isso a partir da linha de comando.

BTW. É mais fácil usar stat para esses experimentos, já que tem segundos de granularidade, o que significa que você não precisa esperar tanto tempo para obter uma diferença visível; -)

    
por 07.05.2014 / 10:23
2

ls -l lista a hora da modificação do arquivo. Este não é o momento 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. Isso geralmente é bem perto do 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 tiver fechado o arquivo), os horários são irrelevantes, o que você precisa é de uma notificação de que o arquivo foi fechado.

O Linux tem inotify para isso e o BSD tem kqueue , mas o AIX não tem nada de semelhante, tanto quanto eu sei. Pode haver uma maneira indireta através do auditoria do sistema, mas essa 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 terminou de escrever é fazer com que o programa A envie uma notificação para o programa B. Isso pode ser o que você quiser: um sinal, um byte em um tubo ou soquete ou simplesmente ter um lançamento B ou ter um script que executa A e, em seguida, 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. Depois, observe B apenas para arquivos não temporários.

    
por 08.05.2014 / 04:24