registro de data e hora, hora da modificação e hora criada de um arquivo

105

Eu apenas sei disso ls -te ls -fdou uma classificação diferente de arquivos e subdiretórios em um diretório.

  • Quais são as diferenças entre carimbo de data e hora, hora da modificação e hora criada 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ções não tornará o arquivo diferente?

Por exemplo, vi alguém escrever:

Por padrão, o programa rsync procura apenas ver se os arquivos têm tamanho e carimbo de data / hora diferentes. Não importa qual arquivo é mais novo; se for diferente, ele será sobrescrito. Você pode passar o sinalizador '--update' para o rsync, o que fará com que ele ignore os arquivos no destino, se forem mais novos que o arquivo na fonte, mas apenas enquanto forem do mesmo tipo de arquivo. O que isso significa é que, por exemplo, se o arquivo de origem for um arquivo regular e o destino for um link simbólico, o arquivo de destino será substituído, independentemente do registro de data e hora.

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?

Tim
fonte
Veja também askubuntu.com/questions/62492/…
rogerdpack

Respostas:

138

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 o statque faz parte dos coreutils.

stat também mostrará mais algumas informações, como 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 noatimeopção, nenhuma informação de acesso será gravada.

Um utilitário para alterar os carimbos de data e hora seria touch. Existem alguns argumentos para decidir qual carimbo de data e hora alterar (por exemplo, -a para horário de acesso, -m para horário de modificação) e influenciar a análise de um novo carimbo de data / hora. Veja man touchpara mais detalhes.

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

echox
fonte
1
Obrigado! Para o comando rsync, em "ele não se importa com o arquivo mais recente", em termos de qual tipo de carimbo de data / hora significa "mais novo". Além disso, em uma nota lateral, o tipo de arquivo que o rsync se importa apenas significa arquivo regular e simlink, não o tipo como pdf, jpg, htm, txt etc?
Tim
2
Geralmente, a referência à hora de um arquivo é o registro de data e hora "modificado". Por exemplo, o que você vê ls -l. E o tipo de arquivo refere-se a arquivo versus link simbólico (ou outros tipos de arquivos, como diretórios ou dispositivos). Não é o tipo de dados no arquivo (texto x jpeg, etc).
Seth L
2
@ Tim Nesse contexto, é o carimbo de data / hora modificado; O rsync está dizendo que, ao decidir se deve fazer backup de um arquivo, não verifica se o arquivo de origem foi modificado mais recentemente do que o backup existente (o que é comum nos programas de backup); apenas verifica se os arquivos têm tamanhos diferentes ou diferentes tempos de modificação e, em caso afirmativo, faz backup
Michael Mrozek
1
E como sei quando o arquivo foi criado primeiro? Essas informações são mantidas em algum lugar ou são perdidas nas atualizações? por assim dizer, há quanto tempo o arquivo existe ..?
Xyz
1
A página do manual stat (2) descreve com mais detalhes quando esses registros de data e hora são alterados.
Cristian Ciupitu
35

A resposta do echox é válida, mas 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 à hora de criação (ou hora de nascimento). Eu sei que o ext4 suporta esse recurso e também JFS e BTRFS .

No entanto, a maioria das ferramentas e da API ainda não foram atualizadas para ler essas informações extras. Portanto, 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 possui 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 statx

Agora, desde o Kernel 4.11, uma nova chamada de sistema statx , além de um melhor suporte ao Y2038 ou aos sistemas de arquivos de rede, ele também traz alguns recursos extras, como o acesso btimeou na hora do nascimento (hora da criação). O suporte ao ext4 deve estar na mesma versão 4.11 do kernel.

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

A próxima glibc fornecerá uma chamada de função para consultar esta interface (consulte as notícias do Phoronix sobre o suporte à glibc statx ). Portanto, podemos esperar suporte para esse recurso no espaço do usuário em breve.

Huygens
fonte
Você sabe se o btime permanece intacto quando os arquivos do Windows (tempo de criação) são movidos para ext4 e vice-versa, como o mtime?
paradroid 20/01
@paradroid desculpe, eu não sei a resposta. Se você quer dizer no Linux ao copiar um arquivo do NTFS para o ext4, seria necessário procurar no driver NTFS se ele suportar o tempo de criação. Se você quer dizer no Windows, é necessário procurar no driver ext4 o Windows.
Huygens