Noções básicas sobre timestamps de arquivos do Linux: mtime, ctime e atime
O sistema operacional Linux mantém registro de três carimbos de data / hora para cada arquivo em seu sistema. Esses carimbos de data / hora permitem que você descubra quando um arquivo foi atualizado pela última vez. Mas o que todos eles significam? E como você descobre esses tempos para um arquivo? Existe alguma diferença quando se trata de diretórios?
Uma compreensão de atime, ctime e mtime pode responder a todas essas perguntas. Estes são os três registros de data e hora que os sistemas de arquivos Unix rastreiam. Se você precisar descobrir detalhes sobre o que mudou e quando, continue lendo.
Quais são os três carimbos de data / hora do Unix?
Cada arquivo possui três carimbos de data / hora associados a ele. O Linux os armazena no formato de hora Unix, que mede os segundos desde a época. Os três carimbos de data / hora são comumente chamados de atime, ctime e mtime.
O mtime é o mais comum e frequentemente o mais útil. Significa tempo modificado . É a hora em que o conteúdo do arquivo foi gravado pela última vez no disco.
Um pouco diferente é o ctime, que significa tempo de mudança . Este carimbo de data / hora rastreia alterações de metadados, como propriedade e permissões. Inclui renomear um arquivo – pelo menos, em sistemas operacionais Linux modernos típicos. Mas ele também é atualizado quando o conteúdo do arquivo muda, então está sempre tão atualizado quanto o mtime.
O terceiro carimbo de data / hora é o atime , que armazena a última vez que alguém acessou o arquivo.
Como os carimbos de data / hora se aplicam aos diretórios
Um diretório Linux é, essencialmente, uma lista dos arquivos nesse diretório. Portanto, a criação de um arquivo dentro de um diretório atualizará o mtime desse diretório. Listar os arquivos no diretório, usando o comando ls , por exemplo, atualiza seu tempo de acesso. E, como acontece com um arquivo, alterar as permissões ou o nome de um diretório atualiza seu ctime.
E quanto ao tempo de criação?
Você pode ficar surpreso ao saber que o Linux simplesmente não controla o tempo de criação. Você pode inicialmente assumir que ctime significa hora de criação. Da mesma forma, você pode pensar nisso como algo muito útil para ser descoberto.
Muitos aplicativos salvam arquivos criando-os sempre do zero. Isso tornaria o uso de um tempo de criação enganoso.
Como visualizar os diferentes carimbos de data / hora
A maneira mais simples de obter informações de carimbo de data / hora é com o comando ls . O formato longo padrão mostra detalhes para o mtime:
$ date
Sat Mar 6 16:57:01 GMT 2021
$ echo "hello, world" > tmp
$ ls -l tmp.txt
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp
Em vez disso, você pode exibir o atime usando a sinalização -u :
$ date
Sat Mar 6 16:59:33 GMT 2021
$ cat tmp
hello, world
$ ls -lu tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp
$ ls -l tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp
A última linha confirma que o mtime deste arquivo é diferente do atime. Por fim, use a sinalização -c para visualizar ctime:
$ date
Sat Mar 6 17:02:34 GMT 2021
$ mv tmp tmp2
$ ls -lc tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 17:02 tmp2
$ ls -l tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp2
$ ls -lu tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp2
Desta vez, confirmamos que todas as três vezes são distintas e corretas: modificamos, acessamos e, em seguida, alteramos o arquivo, nessa ordem.
Uma alternativa para ls é o comando stat . Este comando exibe detalhes de baixo nível do inode do arquivo. Isso torna mais fácil verificar todas as três vezes ao mesmo tempo. Ele também contorna o problema do sinalizador -u não intuitivo. Aqui está um exemplo de saída para o mesmo arquivo:
$ stat tmp2
File: `tmp2'
Size: 13 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 327688 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2021-03-06 16:59:45.000000000 +0000
Modify: 2021-03-06 16:57:59.000000000 +0000
Change: 2021-03-06 17:02:43.000000000 +0000
Como atualizar carimbos de data / hora
O comando touch altera os tempos de modificação e acesso de um arquivo. Também é uma maneira conveniente de criar um arquivo vazio, o que fará se o arquivo ainda não existir:
touch tmp
Por padrão, ele definirá mtime e atime para a hora atual. Você pode definir um horário diferente com o sinalizador -t :
touch -t 202103061200 tmp
Você também pode definir apenas mtime ou atime com os sinalizadores -m e -a respectivamente:
touch -t 202103061300 -m tmp
Observe que o ctime sempre é atualizado quando configuramos o atime ou mtime.
Como encontrar arquivos com base em carimbos de data / hora
O comando find é outra ferramenta que atua em carimbos de data / hora. Ele pode filtrar arquivos com base em atime, ctime ou mtime. Por exemplo:
find . -amin 15
encontrará arquivos acessados exatamente 15 minutos atrás, enquanto:
find . -mtime -2
encontrará arquivos modificados nos últimos dois dias.
Linux mantém controle de cada arquivo três vezes
O carimbo de data / hora do arquivo mais comumente referenciado é mtime. Esta é a data e hora que uma lista de arquivos mostra, por exemplo. Mas os outros dois carimbos de data / hora também podem ser úteis, desde que você entenda a que se referem. Em particular, lembre-se sempre de que ctime representa o tempo de mudança , não o tempo de criação .
Comandos como touch e stat são membros úteis da caixa de ferramentas da linha de comando do Linux. Esses comandos irão aprimorar seu fluxo de trabalho do Linux, permitindo que você crie novos arquivos rapidamente.