Eu sei ls -l
que 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 stat
també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 stat
para 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 -l
lista 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 teminotify
para 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.