Como verificar todos os timestamps de um arquivo?

52

Existe um comando no Linux para verificar todos os carimbos de data e hora de um arquivo?

Estou tentando ver as datas da última modificação, criação e toque no arquivo.

Mechaflash
fonte
4
Apenas para salientar, os arquivos Linux não têm datas de nascimento. Portanto, não é possível determinar a data em que um arquivo foi criado.
FatalError
notei que = (. Obrigado por apontar para mim.
Mechaflash 7/12/12
4
@FatalError: Vários sistemas de arquivos já suportam carimbos de data / hora de nascimento / criação; o verdadeiro problema é acessar essas informações extras. (Não se pode apenas estender struct statsem quebrar as coisas, infelizmente ...) Você pode experimentar o debugfs -R "stat <1234>" /dev/sdXYext4, substituindo 1234por um ino.
grawity
@ grrawity: Neat! Eu sempre me perguntei por que nenhum fs tinha ... mas acho que sim, mas, como você disse, não pode simplesmente quebrar a ABI dos binários existentes. Obrigado pela dica :).
FatalError
1
@FatalError, A hora do nascimento pode ser exibida com o statcomando Linux , consulte Como encontrar a data de criação do arquivo? e Quais sistemas de arquivos no Linux armazenam o tempo de criação? .
Franklin Piat 27/03

Respostas:

73

O comando é chamado stat.

$ stat test
234881026 41570368 -rw-r--r-- 1 werner staff 0 0 "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" 4096 0 0 test

Se você deseja ajustar o formato, consulte as páginas de manual, pois a saída é específica do SO e varia em Linux / Unix.

Geralmente, você também pode obter os horários através de uma lista de diretórios normal:

  • ls -l saída da última vez que o conteúdo do arquivo foi modificado, o mtime
  • ls -lcgera a última vez que foi modificado o status do arquivo, o ctime( Qual é a diferença? )
  • ls -lugera o último tempo de acesso, o atime(embora a utilidade desse conceito esteja sujeita a discussão )

E, claro, ctimenão registra quando um arquivo foi "criado". A especificação POSIX define apenas três carimbos de data e hora, mas alguns sistemas de arquivos Linux armazenam Hora de Nascimento / Hora de Criação. Como encontrar a data de criação do arquivo? Nessa configuração suportada, pode-se usar

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'
slhck
fonte
staté realmente detalhado. Mas lsprecisa apenas de uma linha. Seria bom se também pudesse exibir segundos. No entanto, ao criar listas de arquivos, o primeiro é perfeitamente adequado.
neverMind9
ls -l foi a solução rápida para mim
Andrew
Percebi que o resultado de ls -lpode mostrar um formato de data diferente quando o BusyBox está instalado (no Android). Eu acho que sem ele, é como "2019-07-26 14:41" e, com ele, é como "6 de maio às 21:27". Por que o ano está faltando? Existe uma maneira de forçá-lo usando o formato de sem ele?
desenvolvedor android
@androiddeveloper Como eu disse, a resposta depende do sistema operacional. Eu acho que você deveria abrir uma nova pergunta. Se você está falando especificamente sobre o Android, talvez o Stack Overflow ou os entusiastas do Android sejam mais adequados.
slhck 26/07
@ slhck Bem, é o mesmo sistema operacional, apenas com o BusyBox instalado. Perguntei se é possível (ou seja: existe um comando para usar) obter o formato que será mostrado.
desenvolvedor android
21

Existem apenas TRÊS valores de tempos armazenados para cada um de seus arquivos, conforme definido pelo padrão POSIX : http://pubs.opengroup.org/onlinepubs/9699919799/ (consulte a seção Definições básicas -> 4. Conceitos gerais -> arquivo 4.8 Times Update)

Cada arquivo possui três carimbos de data e hora associados distintos: a hora do último acesso aos dados , a hora da última modificação dos dados e a hora em que o status do arquivo foi alterado pela última vez . Esses valores são retornados na estrutura de características do arquivo struct stat, conforme descrito em <sys / stat.h> .

E de <sys / stat.h> :

atime is for Last data access timestamp.
mtime is for Last data modification timestamp.
ctime is for Last file status change timestamp.

Os exemplos a seguir mostram a diferença entre atime , mtime e ctime , esses exemplos estão no GNU / Linux BASH. Você pode usar stat -xno Mac OS X ou em outro BSD Dist. para ver o formato de saída semelhante.

$ stat --version
stat (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ touch test
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:58:28.609223953 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

Quando o arquivo acaba de ser criado, três carimbos de data e hora são iguais.


1. atime

Primeiro, vamos acessar os dados do arquivo lendo-os ( lessou vim), imprimindo-os ( cat) ou copiando-os para outro arquivo ( cp).

$ cat test #Nothing will be printed out, since the file is empty
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800  <-- atime Changed!
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

2. tempo

Agora vamos alterar o status do arquivo, alterando a permissão ( chmod) ou renomeando-a ( mv)

$ chmod u+x test
$ stat stet
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:04:10.178285430 +0800  <-- ctime Changed!
$    
$ mv test testing
$ stat testing
  File: `testing'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:06:33.342207679 +0800  <-- ctime Changed again!

Observe que até agora, o conteúdo ( dados ) do arquivo ainda é o mesmo de quando foi criado.


3. mtime

Finalmente, vamos modificar o conteúdo do arquivo editando o arquivo.

$ echo 'Modify the DATA of the file' > testing
$ echo 'Modify the DATA of the file also change the file status' > testing
$ stat testing
  File: `testing'
  Size: 56          Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 11:09:48.247345148 +0800  <-- mtime Changed!
Change: 2014-03-16 11:09:48.247345148 +0800  <-- ctime also Changed!

4. hora do nascimento

Observe também que a versão mais recente do stat(por exemplo, stat --version 8.13no Ubuntu 12.04) possui a quarta informação do registro de data e hora - a Hora do Nascimento (hora da criação do arquivo). Embora possa não mostrar a hora correta por enquanto:

$ stat --version
stat (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ stat birth_time
  File: `birth_time'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 4073946     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ bingyao)   Gid: ( 1000/ bingyao)
Access: 2014-03-16 10:46:48.838718970 +0800
Modify: 2014-03-16 10:46:48.838718970 +0800
Change: 2014-03-16 10:46:48.838718970 +0800
 Birth: -
YaOzI
fonte
Qual é o significado de 10: 46: 48.838718970? HH: MM: SS. nanossegundos?
Dzung Nguyen 13/09/16
2
Sim . "Desde o kernel 2.5.48, a estrutura stat suporta resolução de nanossegundos para os três campos de registro de data e hora do arquivo ...."
Tom Lord
O tempo de criação pode ser calculado com acesso root e debugfs, se necessário: moiseevigor.github.io/software/2015/01/30/…
Mikko Rantalainen
2
Hora do nascimento ... de bom grado. Porque a última modificação e a última alteração têm quase o mesmo objetivo, mas ainda são distintas. É bom se todos os quatro existirem.
neverMind9