Quero descobrir a data de criação de um arquivo específico, não a data de modificação ou data de acesso.
Eu tentei com ls -ltrh
e stat filename
.
linux
files
timestamps
stat
Özzesh
fonte
fonte
stat(1)
.stap
para recuperar os tempos de criação.Respostas:
O padrão POSIX define apenas três carimbos de data / hora distintos a serem armazenados para cada arquivo: 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.
Dito isto, os sistemas de arquivos modernos do Linux, como ext4, Btrfs e JFS, armazenam o tempo de criação do arquivo (também conhecido como tempo de nascimento), mas usam nomes diferentes para o campo em questão (
crtime
no ext4,otime
no Btrfs e no JFS). No entanto, atualmente o Linux não fornece uma API do kernel para acessar os horários de criação do arquivo , mesmo nos sistemas de arquivos que os suportam.Como Craig Sanders e Mohsen Pahlevanzadeh apontaram,
stat
suporta os especificadores%w
e de%W
formato para exibir o tempo de nascimento do arquivo (em formato legível por humanos e em segundos desde a Epoch, respectivamente). No entanto,stat
ele próprio acessa a hora do nascimento por meio doget_stat_birthtime()
gnulib (inlib/stat-time.h
), que obtém a hora do nascimento dos camposst_birthtime
est_birthtimensec
dastat
estrutura retornada pelastat()
chamada do sistema. Enquanto, por exemplo, os sistemas BSD (e na extensão OS X) fornecemst_birthtime
viastat
, o Linux não fornece. É por isso que asstat -c '%w' file
saídas-
(indicando um tempo de criação desconhecido) no Linux, mesmo para sistemas de arquivos que armazenam o tempo de criação internamente.Como Stephane Chazelas aponta , alguns sistemas de arquivos, como o ntfs-3g, expõem os tempos de criação do arquivo por meio de atributos de arquivo estendidos.
fonte
stap
para criar sua própria API do kernel. Veja o exemplo na resposta aqui.TLDR; Use
stap
( "SystemTap" ) para criar sua própria API do kernel. Demonstração da extração do tempo de criação ext4 abaixo.Você pode extrair os tempos de criação ext4 nos sistemas Fedora 19. Aqui está o meu:
É claro que os inodes nas minhas partições ext4 têm o tempo de criação. Aqui está um script de shell que determina o inode associado a um nome de arquivo e aumenta a
stat
saída com o tempo de criação usandostap
("systemtap").Nota: Esta é apenas uma demonstração e extremamente ineficiente, pois um módulo do kernel é criado, carregado e descarregado para cada execução. Isso também é provavelmente muito frágil, pois nenhuma verificação de erro é realizada. Uma API apropriada do kernel seria preferível, mas esse script poderia ser muito mais eficiente e ler os tempos de criação de vários arquivos / inodes.
[conteúdo de stap_stat.sh]
Aqui está uma demonstração:
fonte
debugfs + stat
permite obtercrtime
sem que o patch do macaco seja executado .Em
ext4
que é possível; porqueext4
o sistema de arquivos armazena o tempo de criação do arquivo. Mas, ainda assim, você descobrirá que ostat
comando não pode mostrar a data, porque acho que o kernel não está tendo nenhuma API para isso.De qualquer forma, o tempo de nascimento do arquivo é armazenado
ext4
e você pode descobrir, embora não por um método direto, mas usandodebugfs
fonte
xstat filename
/dev/sdxX
estiver montado/some/path
e o arquivo estiver/some/path/some/file
, o caminho a ser especificado é apenassome/file
: seu caminho deve ser referido não à raiz do sistema de arquivos, mas ao ponto de montagem. Caso contrário, o arquivo não será encontrado.Em teoria, com o GNU stat, você pode usar
stat -c '%w'
ou%W
obter a data de criação de um arquivo (também conhecido como data de nascimento).Na prática, a maioria dos sistemas de arquivos não registra essas informações e o kernel do linux não fornece nenhuma maneira de acessá-las.
O mais próximo que você pode chegar é o ctime do arquivo, que não é o horário da criação, é o horário em que os metadados do arquivo foram alterados pela última vez.
O Linux Weekly News teve um artigo interessante sobre isso alguns anos atrás - http://lwn.net/Articles/397442/
fonte
Diferença entre
FreeBSD
eGNU\Linux
sobrestat command
:Se você chamar
stat
command,GNU\Linux
ele invoca a-x
opção, mas no FreeBSD, você mesmo deve invocar a-x
opção.Consulte também Quais sistemas de arquivos no Linux armazenam o horário da criação?
Notas:
--printf
é muito útil emscripting
....!fonte
Em OS X pode utilizar
ls -lU
,stat -f%B
,GetFileInfo -d
oumdls -n kMDItemFSCreationDate
:fonte
Veja isso:
BTW, isso funciona apenas no ext4. Ainda não encontrei uma solução para o BtrFS ...;)
fonte