Carimbos de data e hora do arquivo Linux explicados: um tempo, mtime y ctime

Conteúdo

Um laptop exibindo uma janela de terminal com janelas de terminal adicionais preenchidas com texto em segundo plano.

Quando “Mudou” não significa “modificado”? Quando falamos sobre carimbos de data / hora de arquivos Linux. Neste guia, vamos explicar como o sistema os atualiza e como editá-los você mesmo.

A diferença entre atime, mtime y ctime

Cada arquivo Linux tem três timestamps: o carimbo de data / hora de acesso (um tempo), o timestamp modificado (mtime) e timestamp modificado (ctime).

O carimbo de data / hora de acesso é a última vez que um arquivo foi lido. Isso significa que alguém usou um programa para mostrar o conteúdo do arquivo ou ler alguns valores dele. Nada foi editado ou adicionado ao arquivo. Foi feita referência aos dados, mas eles não foram modificados.

Um timestamp modificado significa a última vez que o conteúdo de um arquivo foi modificado. Um programa ou procedimento editado ou manipulado o arquivo. "Modificado" significa que algo dentro do arquivo foi modificado ou excluído, ou novos dados foram adicionados.

Os carimbos de data / hora modificados não se referem às alterações feitas no conteúdo de um arquivo. Mais bem, é a hora em que os metadados relacionados ao arquivo foram alterados. Mudanças nas permissões de arquivo, como um exemplo, irá atualizar o timestamp modificado.

O sistema de arquivos ext4 Linux padrão também aloca espaço para um carimbo de data / hora de criação de arquivo em suas estruturas internas do sistema de arquivos., mas isso ainda não foi implementado. As vezes, este carimbo de data / hora está concluído, mas não pode depender dos valores que contém.

A anatomia de um carimbo de data / hora

Os timestamps do Linux contêm um número em vez de uma data e hora. Este número é o número de segundos desde Época Unix, o que era meia noite (00:00:00) do 1 de janeiro de 1970, sobre Tempo Universal Coordenado (UTC). Os segundos bissextos são ignorados nos carimbos de data / hora do Linux, então eles não são análogos ao tempo real.

Quando o Linux precisa mostrar um carimbo de data / hora, traduz o número de segundos em uma data e hora. Isso torna mais fácil para os humanos entenderem.. A localização e o fuso horário do computador que visualiza o arquivo orienta a conversão do número de segundos em uma data e hora. Também garante que o mês esteja no idioma correto.

Então, Quantos segundos podem ser armazenados em um carimbo de data / hora? Muito, 2.147.483.647, para ser precisos. Isso é muito, mas é o suficiente? Se você adicionar isso à época do Unix e, em seguida, traduzi-lo para uma data e hora, vai chegar na terça 19 de janeiro de 2038 no 03:14:07 sou. Precisaremos de um esquema diferente para os carimbos de data / hora antes dessa data.

Exibição de carimbo de data / hora

Quando você usa o -l (Lista longa) opção com ls, Como mostrado abaixo, você pode ver o timestamp modificado:

ls -l dp.c

Se você quiser ver o carimbo de data / hora de acesso, usar el -lu (tempo de acesso) opção como esta:

ls -lu dp.c

E por ultimo, para ver o carimbo de data / hora da mudança, você pode usar o -lc opção (hora de mudança); escreva o seguinte:

ls -lc dp.c

Os carimbos de data / hora acima mostram que o conteúdo do arquivo foi modificado pela última vez no 21 abril 2019. O acesso e os carimbos de data / hora modificados são idênticos porque o arquivo foi copiado de outro computador para este. 20 de janeiro de 2020, e ambos os carimbos de data / hora foram atualizados naquele momento.

Para ver todos os carimbos de data / hora simultaneamente, use o stat comando como segue:

stat dp.c

Os fusos horários são listados na parte inferior da tela. Como você pode ver, têm um componente muito preciso de segundos fracionários. No final de cada carimbo de data / hora, você também verá um -0500 o -0400 .

Estes são compensações de fuso horário. O sistema de arquivos registra carimbos de data / hora em UTC e os converte para o fuso horário local quando os exibe stat. O computador que usamos para pesquisar esta postagem está configurado como se estivesse no fuso horário padrão do leste (É) dos EUA. UU.

Esse fuso horário está cinco horas atrás do UTC quando o EST está em vigor. Apesar disto, está quatro horas atrás do UTC quando o horário de verão do leste está em vigor (Edt). Em abril 2019, quando o timestamp modificado foi alterado, EDT estava em vigor. É por isso que dois dos carimbos de data / hora têm uma compensação de cinco horas, mas o modificado tem uma compensação de quatro horas.

Deslocamentos e fusos horários não são armazenados em nenhum lugar. Não há um inode nem um espaço de sistema de arquivos dedicado a manter esses valores. Você deve calculá-los em tempo real usando o carimbo de data / hora (que está sempre no horário UTC), o fuso horário local do computador exibindo o arquivo e se o horário de verão estava em vigor.

Você também verá um estamp de tempo de “Nascimento”, que está reservado para a data de criação do arquivo. Isso não é implementado e você verá um hífen “-Em vez de um carimbo de data / hora.

RELACIONADO: Tudo o que você sempre quis saber sobre inodes no Linux

Mudança de carimbo de data / hora

Se você desejar, pode alterar os carimbos de data / hora de um arquivo. Você pode usar o touch comando para alterar o acesso ou timestamps modificados, o ambos:

touch -a dp.c

Para determinar um novo carimbo de data / hora de acesso, Eu usaria o -a (tempo de acesso) opção. Este comando define a data e hora de acesso para a hora atual do computador:

stat dp.c

Registro de data e hora de acesso alterado, como esperado. Apesar disto, timestamp modificado também atualizado; isso é normal.

Para alterar o carimbo de data / hora modificado, você pode usar o -m (hora de modificação) opção:

touch -m dp.c
stat dp.c

Desta vez, timestamps modificados e alterados atualizados.

Você pode usar o -d (encontro) se você deseja alterar simultaneamente o acesso e os carimbos de data / hora modificados. Você também pode especificar uma hora e uma data; você não está restrito a alterar carimbos de data / hora para o presente.

Usaremos o seguinte comando para determinar o acesso e os timestamps modificados para o 10:30:45 do 15 de janeiro de 2020:

touch -d "2020-01-15 10:30:45" dp.c
stat dp.c

Agora definimos o acesso e modificamos os carimbos de data / hora para uma data no passado. O carimbo de data / hora modificado também foi atualizado para a hora atual do computador.

Você também pode usar o -r (referência) opção, como é mostrado a seguir, se você deseja determinar os carimbos de data / hora de um arquivo sobre os valores de carimbo de data / hora de outro:

touch dp.c -r dice_words.sl3
stat dp.c

E depois, estamos praticamente de volta ao ponto de partida, com uma mistura de -0400 e -0500 timestamps.

Vamos fazer algo que afeta apenas o timestamp modificado. Nós vamos usar o chmod comando para fornecer um arquivo executável executar permissões para todos os usuários:

chmod + x dp
stat dp

O carimbo de data / hora modificado foi o único que foi atualizado. Isso ocorre porque o próprio arquivo não foi modificado, não foi acessado ou modificado. Apesar disto, os metadados sobre o arquivo era mudança.

RELACIONADO: Como usar o comando chmod no Linux

Como o sistema de arquivos atualiza os carimbos de data / hora

Ao montar um sistema de arquivos, existem opções que você pode usar para especificar como esse sistema de arquivos deve funcionar ou ser tratado. Estes são armazenados no /etc/fstab Arquivo, que é lido e processado no momento da inicialização. Além disso, você pode configurar opções para ditar o esquema que eles devem usar para atualizar o carimbo de data / hora de acesso.

A seguir estão algumas das alternativas mais comuns:

  • estrito (cronograma estrito): Esta opção atualiza a data e hora de acesso dos arquivos cada vez que eles são acessados. Há uma sobrecarga associada a esta abordagem, mas alguns servidores podem se beneficiar deste esquema. Tem pouco mérito em um desktop ou laptop.
  • noatime (sem uma hora): Esta opção desativa completamente a atualização de carimbos de data / hora de acesso para arquivos e diretórios. Apesar disto, timestamps modificados continuarão a ser atualizados.
  • nodiratime (Sin Atime): Esta opção permite o acesso a carimbos de data / hora para arquivos a serem atualizados, mas desativa para diretórios.
  • relatime (atime relativo): Esta opção atualiza o carimbo de data / hora de acesso apenas se houver mais de 24 horas atrás ou se o anterior era mais antigo do que os timestamps modificados ou modificados neste momento. Isso proporciona um bom equilíbrio entre os carimbos de data / hora de acesso que são atualizados com muita frequência ou que nem são atualizados.

Vamos dar uma olhada em /etc/fstab arquivo para este computador e ver quais opções estão definidas:

menos / etc / fstab

a /etc/fstab O arquivo é exibido para nós, como é mostrado a seguir.

Aqui está o conteúdo do arquivo sem o invólucro:

# /etc / fstab: informações estáticas do sistema de arquivos.
#
# Use 'blkid' para imprimir o identificador universalmente único para um
# dispositivo; isso pode ser usado com UUID= como uma maneira mais robusta de nomear dispositivos
# que funciona mesmo se os discos forem adicionados e removidos. Ver fstab(5).
#
# <sistema de ficheiros> <ponto de montagem> <modelo> <opções de opções> <Despejar> <passar>
# / was on /dev/sda1 during installation
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 erros=remount-ro 0 1
/swapfile nenhuma troca sw 0 0

Há apenas duas entradas, e um deles é um arquivo de troca, que podemos ignorar. o outro é montado na raiz do sistema de arquivos ( / ) e estava no dispositivo /dev/sda1 na hora da instalação. Essa é a primeira partição no primeiro disco rígido, e acontece que contém um ext4 Sistema de arquivo.

A única opção que você tem é errors=remount-ro, que diz ao sistema operacional para remontar este sistema de arquivos como somente leitura se houver erros ao tentar montá-lo como um sistema de arquivos de leitura e gravação.

Por isso, nenhuma menção de como o carimbo de data / hora de acesso será tratado. Vamos mergulhar e ver o que /proc/mounts você pode nos dizer. Vamos canalizar a saída de /proc/mounts através de grep. Nossa sequência de pesquisa será “sda”, o identificador do disco rígido.

Nós escrevemos o seguinte:

cat / proc / mounts | grep "sda"

Agora vemos as seguintes opções:

  • rw: O sistema de arquivos será montado como um sistema de arquivos de leitura / gravação.
  • relatiempo: O sistema de arquivos usará o esquema de “tempo relativo” para atualizar os timestamps de acesso.

De onde veio isso? Bem o relatime O esquema é usado nas seguintes situações:

  • Quando o valores predeterminados /etc/fstab a opção é usada.
  • Quando o relatiempo /etc/fstab a opção é usada.
  • Quando as opções de timestamp de acesso não são usadas em /etc/fstabe você está usando o kernel linux 2.6.30 ou mais recente.

Nosso /etc/fstab bilhete para o ext4 o sistema de arquivos não especificou uma opção de atualização de timestamp de acesso, então o Linux tomou a decisão sensata e usou relatime.

RELACIONADO: Como escrever um arquivo fstab no Linux

Timestamps são importantes

Os carimbos de data / hora nos fornecem uma maneira fácil de ver quando ele foi acessado, um arquivo foi modificado ou alterado. Mas, o que é mais importante, fornecem uma maneira de fazer backup e sincronizar o software para determinar quais arquivos devem ser copiados.

A capacidade de manipular carimbos de data / hora será útil sempre que você precisar forçar um programa a incluir ou ignorar um arquivo ou conjunto de arquivos.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.