Por um longo tempo, o Linux não se preocupa com as datas de criação de arquivos, porque nenhum dos sistemas de arquivos que costumava usar os suportava. No entanto, agora, 2 sistemas de arquivos comumente usados (NTFS e ext4) registram as datas de criação de arquivos.
O stat
comando, no entanto, ainda gera Birth: -
um sistema de arquivos ext4, embora possamos ver que o ext4 armazenou a data de criação do arquivo usando debugfs -R 'stat <inode_number>' /dev/file_device
.
Quando examinei o motivo, vi que outra pessoa já havia apresentado um relatório de bug recentemente , e a resposta está vinculada a um problema inicial que simplesmente declara "não existe atualmente nenhuma interface do kernel do Linux para obter essas informações [arquivo data de criação]". Parece-me notável que aparentemente esse ainda seja o caso, pois as pessoas solicitam stat
essas informações há anos (e stat
produzem um Birth
campo, mesmo que aparentemente ainda não o suporte ainda! Eles o adicionaram antecipadamente?)
Então, ainda é verdade que atualmente não existe uma interface do kernel Linux para obter a data de criação do arquivo? Existe um plano para implementar isso sempre?
fonte
debugfs
.ZFS
também registra o tempo de criação do arquivo e permite que eles sejam recuperados por atributos estendidos.Respostas:
EDIT: Boas notícias,
statx()
foi mesclada, portanto deve estar disponível na versão 4.11.O trabalho xstat (), atualmente statx (), foi revisado em 2016.
O processo foi um pouco mais disciplinado dessa vez (menos ciclismo, acordo para descartar atributos controversos, pois eles sempre podem ser adicionados posteriormente). Infelizmente ainda havia objeções à interface exata e não vi nenhuma referência mais recente.
fonte
Pelo que posso dizer (desculpe um monte de links, memória e googlage, nada coesivo o suficiente para listar aqui como referência), nunca foi porque os sistemas subjacentes não suportavam atributos de tempo de criação, mas porque nenhum deles poderia sequer concorda que foi um recurso útil.
Consulte http://www.pathname.com/fhs/pub/fhs-2.3.html
O POSIX estabelece três carimbos de hora. Nenhum deles é hora da criação.
Se bem me lembro, o argumento foi algo como:
Agora, muito disso é memória e leitura de algumas listas de discussão antigas. Eu também não me sentei no centro das discussões. Eu estava em uma lista de discussão por causa de algum trabalho fora das filmagens em um driver gordo para um sistema Linux incorporado. Menciono isso porque, certamente, existem fontes mais autoritativas que minha memória de algo que eu meio que me importava.
Lembro-me de que a grande coisa é uma combinação do fato de que ninguém poderia apresentar um bom caso de uso, ninguém poderia concordar em como lidar com o campo para os outros 40 sistemas de arquivos comumente usados que não suportam o tempo de criação, e até inventar um nome para o campo se transformou em um grande debate.
fonte
debugfs
ler o campo da imagem do disco não é muito uma interface e, de qualquer maneira, precisará de acesso privilegiado.A hora do nascimento está em vários sistemas de arquivos nativos do Linux, não apenas no ext4.
Desde a versão 4.11 do kernel do Linux (abril de 2017), há uma nova
statx()
chamada do sistema para recuperá-lo. No entanto, a função de invólucro correspondente não tenha sido adicionado ao GNU libc ainda (a partir de 2018/06/26. 2019 editar agora adicionado 2,28), e ferramentas como o GNUstat
,ls
,find
não foram actualizadas para usá-lo ( 2019-08- 22 edit O GNUstat
nos sistemas GNU / Linux com glibc 2.28 ou superior suporta desde o coreutils 8.31)Você pode fazer isso
perl
com algo como:Se o seu
syscall.ph
não tiverSYS_statx
, você também pode codificá-lo. É 332 em arquiteturas amd64. Ou tente:Agora essa hora do nascimento raramente é útil. Não é a idade dos dados no arquivo (os dados são gravados nos arquivos após a sua criação), nem necessariamente a hora em que o arquivo apareceu com esse nome em um diretório (poderia ter sido criado com um nome diferente e renomeado ou vinculado lá e o conteúdo ou os atributos foram alterados várias vezes no meio).
fonte
NFSv4
, seria necessário suportar atributos estendidos e há uma entrada possívelcrtime
nos atributos estendidos. Verifique, por exemplo, als.c
fonte Solaris que imprime a hora de criação do arquivols -l -% crtime
.statx()
. Ainda não existe um utilitário padrão que faça interface com ostatx()
Linux, mas a recuperação de atributos estendidos é suportada há décadas. Consulte Como obtenho a data de criação de um arquivo em um volume lógico NTFS?openat(fd, ".", O_RDONLY|O_XATTR)
.