timestamp, hora da modificação e hora de criação de um arquivo

92

Eu sei que ls -t e ls -f fornecem uma classificação diferente de arquivos e subdiretórios em um diretório.

  • Quais são as diferenças entre registro de data e hora, hora da modificação e hora de criação de um arquivo?
  • Como obter e alterar esses tipos de informações por comandos?
  • Em termos de que tipo de informação as pessoas dizem que um arquivo é "mais novo" que o outro?
  • Que tipo de alteração de informação não fará com que o arquivo diferente?

Por exemplo, vi alguém escrever:

By default, the rsync program only looks to see if the files are different in size and timestamp. It doesn't care which file is newer, if it is different, it gets overwritten. You can pass the '--update' flag to rsync which will cause it to skip files on the destination if they are newer than the file on the source, but only so long as they are the same type of file. What this means is that if, for example, the source file is a regular file and the destination is a symlink, the destination file will be overwritten, regardless of timestamp.

Em uma nota lateral, o tipo de arquivo aqui significa apenas arquivo regular e simlink, não o tipo como pdf, jpg, htm, txt etc?

    
por Tim 27.09.2010 / 16:45

2 respostas

124

Existem 3 tipos de "timestamps":

  • Acesso - a última vez que o arquivo foi lido
  • Modificar - a última vez que o arquivo foi modificado (o conteúdo foi modificado)
  • Alterar - a última vez que os metadados do arquivo foram alterados (por exemplo, permissões)

Para exibir essas informações, você pode usar stat , que é parte dos coreutils.

stat mostrará também mais algumas informações, como o dispositivo, inodes, links, etc.

Lembre-se de que esse tipo de informação depende muito do sistema de arquivos e das opções de montagem. Por exemplo, se você montar uma partição com a opção noatime , nenhuma informação de acesso será gravada.

Um utilitário para alterar os timestamps seria touch . Existem alguns argumentos para decidir qual registro de data e hora deve ser alterado (por exemplo, -a para tempo de acesso, -m para modificação, etc.) e para influenciar a análise de um novo registro de data e hora. Veja man touch para mais detalhes.

touch pode ser útil em combinação com cp -u ( "copiar somente quando o arquivo SOURCE for mais recente que o arquivo de destino ou quando o arquivo de destino estiver ausente" ) ou para a criação de arquivos de marcadores vazios.

    
por 27.09.2010 / 17:18
31

A resposta do echox é válida, mas eu quero adicionar informações sobre o tempo de criação do arquivo.

Suporte ao sistema de arquivos

Alguns sistemas de arquivos suportam uma entrada adicional no inode em relação ao tempo de criação (ou horário de nascimento). Eu sei que o ext4 suporta este recurso e também JFS e BTRFS .

No entanto, a maioria das ferramentas e da API ainda não foi atualizada para ler essas informações extras. Então, mesmo que possa estar lá, não é acessível.

Por exemplo, no Ubuntu 12.04 LTS, recebo o seguinte para um arquivo que criei hoje:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

Você pode ver que a função stat mais recente tem um campo de nascimento, embora a saída pareça incorreta. E via debugfs podemos obter as informações (crtime como estou no sistema de arquivos ext4).

suporte a statx

Existe agora desde o Kernel 4.11 uma nova chamada de sistema statx , além de melhor suporte de Y2038 ou sistemas de arquivos de rede, ele também traz alguns recursos extras, como o acesso btime ou tempo de nascimento (tempo de criação). O suporte para o ext4 deve estar na mesma versão do kernel 4.11.

Houve correções para adicionar suporte a este novo syscall em versões posteriores do Kernel: por exemplo, BTRFS e F2FS no Kernel 4.13, SMB3 no 4.14, GFS2 no 4.15, NFS no 4.16, etc.

A próxima versão da glibc fornecerá uma chamada de função para consultar essa interface (consulte Notícias da Phoronix sobre suporte ao glibc statx ). Então podemos esperar suporte para esse recurso no espaço do usuário em breve.

    
por 05.06.2012 / 13:36