Por que a classificação dos arquivos por tempo de acesso não está funcionando?

12

Eu tentei usar o comando ls --time=atime

estava trabalhando em um diretório, mas não estava trabalhando em outro diretório. Abri certos arquivos no vim, evince e outros aplicativos, mas após o tempo de acesso aos arquivos de comando não foram alterados.

Quando digito, touch file.txto tempo de acesso é alterado, mas quando digito, vim file.txto tempo de acesso não é alterado.

O que há de errado aqui?

xralf
fonte
Qual sistema operacional você está executando? Muitas distribuições modernas do Linux desativam o atime; está desativado por padrão nos kernels recentes do Linux.
Gilles 'SO- stop be evil'
Estou executando o Ubuntu 10.04.
precisa saber é o seguinte
O que você faz depois de correr vim file.txt? Você sai do vim por :qou :wq? Se você não escreve, vimnão modifica o tempo de acesso do arquivo - isso ocorre por design.
rozcietrzewiacz
Agora tenho menos arquivos no diretório e os tempos de acesso são alterados com o vim e não preciso editar o arquivo, mas quando abro o arquivo com .jpgextensão, ele não é alterado. Quando o abro no visualizador de imagens, ele também não é alterado. Eu preciso que o tempo de acesso seja alterado toda vez que o arquivo foi lido por algum aplicativo.
xralf

Respostas:

14

Com as opções padrão de montagens, os tempos de acesso são tratados de uma maneira especial no linux:

relatime- Uma montagem do sistema de arquivos com esta opção faz com que o tempo de acesso seja atualizado se eles (antes da atualização) ocorrerem antes do tempo de modificação. Isso reduz significativamente as gravações causadas por atualizações atime.

A relatimeopção de montagem tornou-se a opção padrão desde o kernel do Linux 2.6.30. Essa é a razão para ls --time=atimenão listar o que você espera.

Solução: Para usar um comportamento estrito (herdado) para atime, use astrictatimeopção mount (por exemplo, in/etc/fstab).

Nota: Para desativar completamente as atualizações do atime, é possível usar noatime.

Stéphane Gimenez
fonte
Isso ajudou. Obrigado. Quanto mais lento o sistema ficará strictatime?
xralf 14/09/11
as atualizações do atime são bastante caras (um acesso agendado ao disco para atualizar os inodes toda vez que o conteúdo do arquivo é acessado). Em particular, se muitos arquivos pequenos estiverem envolvidos, as atualizações do atime poderão dobrar a carga do disco. Na maioria das vezes, os programas que dependem de tempos de acesso querem apenas verificar se atime> mtime ou não. Portanto, a nova opção padrão relatimepreserva a compatibilidade para esses programas. De fato, muito poucos programas ainda dependem disso, e geralmente é seguro de usar noatime.
Stéphane Gimenez
Gosto do strictatimerecurso como o teste hoje, mas se tornar o sistema lento, gostaria de definir strictatimeapenas em alguns diretórios, se for possível.
xralf 14/09/11
1
Na prática, é no máximo 1% ou 2% mais lento, talvez até 5% em um servidor com alta carga de disco. Bem, se você realmente se importa com o desempenho, é possível restringir as atualizações do atime para um diretório específico usando um fs dedicado montado com ele strictatimeque usaria esse diretório como ponto de montagem.
Stéphane Gimenez
2

Você pode desativar a gravação do tempo de acesso para alguns sistemas de arquivos (procure noatimeem/etc/fstab ). Para testar isso, tente touch -a file; ls -l --time=atime filee repita touch -a file; ls -l --time=atime filepara ver se ele muda.

O lscomportamento é explicado por man ls:ls -l --time=atime mostra a hora de acesso na coluna data / hora. Para classificar por essa chave, você precisa usar --sort=timetambém.

Se você por "o horário não for alterado" significa que ele mostra o mesmo resultado, ou porque o atime está desativado para o sistema de arquivos (consulte /etc/fstab ) ou porque o tempo de acesso é realmente o mesmo que o tempo de modificação (bastante comum).

Observe que a listagem de arquivos não altera seu tempo de acesso - Os arquivos não são acessados lsapenas pelo cache do inode .

l0b0
fonte
Quando digito, ls -l --time=atimea hora não é alterada (presumo que a coluna com hora é atime) e a ordem de classificação não é alterada, os arquivos com a última atime devem estar no início ou no final da lista (se eles foram acessados ​​pela última vez )
xralf 01/09/11
@xralf Você repetiu os dois touch e ls? Eu editei a resposta para torná-la mais evidente.
rozcietrzewiacz
Quando digito touch file.txt, o tempo de acesso é alterado, mas quando digito vim file.txt, o tempo de acesso não é alterado.
Xralf
1

Também pode ser útil ao testar como esse para adicionar o --full-timesinalizador, para lsque você possa ver segundos e sub-segundos, para poder ver o efeito sem ser limitado por limites de minutos.

ssb
fonte