Como descobrir a data da criação de um arquivo no Linux

Postado em: 27 de novembro de 2013 - Por: Bezaleel Ramos

terminal-linux

 

E você? Sabe como descobrir a real data da criação de um arquivo no Linux? Esta sempre foi uma dificuldade de usuários da plataforma Linux com sistemas de arquivos mais antigos como ext2 e ext3. Mas se você está usando ext4 como file system, isto é possível usando o comando debugfs e inode, como vamos ver a seguir.

Inode

Mas antes de começarmos, vale uma breve explicação sobre inode.

Inodes são estruturas responsáveis por conter informações básicas sobre arquivos e pastas, tais como: permissões de acesso; identificação de donos dos arquivos; data e hora do último acesso e alterações; tamanho e o mais importante, os famosos ponteiros para o arquivo em si. Podemos dizer, que por conter informações únicas, o inode é a identidade de um arquivo ou diretório.

Ao ler qualquer arquivo ou diretório, no processo de leitura do kernel, a primeira leitura é do inode do arquivo, em seguida o arquivo e diretório. A partir desta estrutura, são conferidas as permissões, e só então o usuário tem, ou não, acesso ao arquivo. A famosa Permission denied tem origem aí.

nuvem_hibrida_reduz_custo_ti

 

File System

Antes de usarmos o comando debugfs, para descobrirmos a data de criação do arquivo, precisamos de algumas informações do file system.

No meu caso, eles está montando a minha /home em /dev/sda5.

# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 50G 9.7G 37G 21% /

/dev/sda1 477M 231M 217M 52% /boot

/dev/sda5 94G 28G 61G 32% /home

Vamos criar um arquivo, inserir alguma informação nele, e em seguida pegar o inode.

# > testeintegridade.txt
#echo integridade_do_arquivo >> testeintegridade.txt

Ao executarmos o comando stat, veja que a informação do birth (data da criação) ainda está vazia.

# stat testeintegridade.txt

File: ‘testeintegridade.txt’
Size: 23 Blocks: 8 IO Block: 4096 regular file

Device: 805h/2053d Inode: 527332 Links: 1

Access: (0664/-rw-rw-r--) Uid: ( 1000/ beza) Gid: ( 1000/ beza)

Access: 2013-11-27 10:32:18.956290498 -0200

Modify: 2013-11-27 10:34:09.971497183 -0200

Change: 2013-11-27 10:34:09.971497183 -0200

Birth: -

Agora vamos pegar o Inode do arquivo que foi criado:

#ls -lhi testeintegridade.txt

527332 -rw-rw-r-- 1 bramos bramos 23 Nov 27 10:34 testeintegridade.txt

Comando debugfs

Agora que já temos o inode, podemos usar os comandos debugfs e stat para descobrir a data de criação.

#sudo debugfs -R 'stat <527332>' /dev/sda5

debugfs 1.42.7 (21-Jan-2013)

Inode: 527332 Type: regular Mode: 0664 Flags: 0x80000

Generation: 3457845330 Version: 0x00000000:00000001

User: 1000 Group: 1000 Size: 23

File ACL: 0 Directory ACL: 0

Links: 1 Blockcount: 8

Fragment: Address: 0 Number: 0 Size: 0

ctime: 0x5295e6c1:e79f7b7c -- Wed Nov 27 10:34:09 2013

atime: 0x5295e97d:2a5230d0 -- Wed Nov 27 10:45:49 2013

mtime: 0x5295e6c1:e79f7b7c -- Wed Nov 27 10:34:09 2013

crtime: 0x5295e652:e3ff5708 -- Wed Nov 27 10:32:18 2013

Size of extra inode fields: 28

EXTENTS:

(0):2133558

E o que são todas estas informações?

Das informações acima, o que realmente nos interessa são ctime, atime, mtime, crtime.

  • atime: data do último acesso ao arquivo
  • mtime: data da última modificação do arquivo
  • ctime: data da última alteração de status do arquivo (por exemplo, mudança de dono)
  • crtime: data da criação do arquivo

Ou seja, o arquivo testeintegridade.txt foi criado em 27/11/2013 as 10:32:18 2013.

E com isso, descobrimos o Birthday do arquivo \o/.

Leia também