Les horodatages des fichiers Linux expliqués: à l'heure, mtime y ctime

Contenu

Un ordinateur portable affichant une fenêtre de terminal avec des fenêtres de terminal supplémentaires remplies de texte en arrière-plan.

Lorsque “changé” ne signifie pas “modifié”? Quand on parle d'horodatage des fichiers Linux. Dans ce guide, nous vous expliquerons comment le système les met à jour et comment les éditer vous-même.

La différence entre l'heure, mtime y ctime

Chaque fichier Linux a trois horodatages: l'horodatage d'accès (à l'heure), l'horodatage modifié (mtime) et horodatage modifié (ctemps).

L'horodatage d'accès est la dernière fois qu'un fichier a été lu. Cela signifie que quelqu'un a utilisé un programme pour afficher le contenu du fichier ou en lire certaines valeurs. Rien n'a été modifié ou ajouté au fichier. Il a été fait référence aux données, mais ils n'ont pas été modifiés.

Un horodatage modifié signifie la dernière fois que le contenu d'un fichier a été modifié. Un programme ou une procédure a modifié ou manipulé le fichier. "Modifié" signifie que quelque chose dans le fichier a été modifié ou supprimé, ou de nouvelles données ont été ajoutées.

Les horodatages modifiés ne font pas référence aux modifications apportées au contenu d'un fichier. Très bien, est l'heure à laquelle les métadonnées liées au fichier ont été modifiées. Modifications des autorisations de fichiers, par exemple, mettra à jour l'horodatage modifié.

Le système de fichiers Linux ext4 standard alloue également de l'espace pour un horodatage de création de fichier dans ses structures de système de fichiers internes., mais cela n'a pas encore été mis en œuvre. Parfois, cet horodatage est terminé, mais il ne peut pas dépendre des valeurs qu'il contient.

L'anatomie d'un horodatage

Les horodatages Linux contiennent un nombre au lieu d'une date et d'une heure. Ce nombre est le nombre de secondes depuis L'ère Unix, qu'était-ce que minuit (00:00:00) du 1 de janvier de 1970, au Temps universel coordonné (UTC). Les secondes intercalaires sont ignorées dans les horodatages Linux, donc ils ne sont pas analogues au temps réel.

Quand Linux doit afficher un horodatage, traduire le nombre de secondes en date et heure. Cela facilite la compréhension pour les humains.. L'emplacement et le fuseau horaire de l'ordinateur affichant le fichier guident la conversion du nombre de secondes en date et heure. Il garantit également que le mois est dans la bonne langue.

Ensuite, Combien de secondes peuvent être stockées dans un horodatage? Beaucoup, 2.147.483.647, pour être précis. C'est beaucoup, mais est-ce suffisant? Si vous ajoutez cela à l'époque Unix et que vous le traduisez ensuite en une date et une heure, aura le mardi 19 de janvier de 2038 à 03:14:07 un m. Nous aurons besoin d'un schéma différent pour les horodatages avant cette date.

Affichage de l'horodatage

Lorsque vous utilisez le -l (longue liste) option avec ls, Comme indiqué ci-dessous, vous pouvez voir l'horodatage modifié:

ls -l dp.c

Si vous voulez voir l'horodatage d'accès, utiliser el -lu (temps d'accès) option comme celle-ci:

ls -lu dp.c

Et finalement, pour voir l'horodatage du changement, vous pouvez utiliser le -lc option (changer le temps); écris ce qui suit:

ls -lc dp.c

Les horodatages ci-dessus montrent que le contenu du fichier a été modifié pour la dernière fois le 21 avril 2019. Les horodatages d'accès et modifiés sont identiques car le fichier a été copié d'un autre ordinateur vers celui-ci. 20 de janvier de 2020, et les deux horodatages ont été mis à jour à ce moment-là.

Pour afficher tous les horodatages simultanément, Utilisez le stat commande comme suit:

stat dp.c

Les fuseaux horaires sont répertoriés en bas de l'écran. Comme tu peux le voir, avoir une fraction de seconde très précise. A la fin de chaque horodatage, vous verrez également un -0500 O -0400 .

Ceux-ci sont décalages de fuseau horaire. Le système de fichiers enregistre les horodatages en UTC et les convertit dans le fuseau horaire local lorsqu'il les affiche stat. L'ordinateur que nous avons utilisé pour rechercher ce message est configuré comme s'il se trouvait dans le fuseau horaire de l'Est (EST) des Etats-Unis. UU.

Ce fuseau horaire a cinq heures de retard sur l'UTC lorsque l'EST est en vigueur. Malgré cela, a quatre heures de retard sur UTC lorsque l'heure avancée de l'Est est en vigueur (EDT). En avril 2019, quand l'horodatage modifié a été changé, HAE était en vigueur. C'est pourquoi deux des horodatages ont une compensation de cinq heures, mais le modifié a une compensation de quatre heures.

Les décalages et les fuseaux horaires ne sont stockés nulle part. Il n'y a ni inode ni espace de système de fichiers dédié à la conservation de ces valeurs. Vous devez les calculer à la volée en utilisant l'horodatage (qui est toujours en heure UTC), le fuseau horaire local de l'ordinateur affichant le fichier et si l'heure d'été était en vigueur.

Vous verrez également un horodatage de “Naissance”, qui est réservé à la date de création du fichier. Ceci n’est pas implémenté et vous verrez un trait d’union “-Au lieu d'un horodatage.

EN RELATION: Tout ce que vous avez toujours voulu savoir sur les inodes sous Linux

Changement d'horodatage

Si vous le souhaitez, peut changer les horodatages d'un fichier. Vous pouvez utiliser le touch commande pour changer l'accès ou les horodatages modifiés, les deux:

toucher -a dp.c

Pour déterminer un nouvel horodatage d'accès, j'utiliserais le -a (temps d'accès) option. Cette commande définit l'horodatage d'accès à l'heure actuelle de l'ordinateur:

stat dp.c

Horodatage d'accès modifié, comme prévu. Malgré cela, horodatage modifié également mis à jour; c'est normal.

Pour changer l'horodatage modifié, vous pouvez utiliser le -m (heure de modification) option:

toucher -m dp.c
stat dp.c

Cette fois, horodatages modifiés et modifiés mis à jour.

Vous pouvez utiliser le -d (Date) si vous souhaitez modifier simultanément les horodatages d'accès et modifiés. Vous pouvez également spécifier une heure et une date; vous n'êtes pas limité à changer les horodatages au présent.

Nous utiliserons la commande suivante pour déterminer l'accès et les horodatages modifiés au 10:30:45 du 15 de janvier de 2020:

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

Nous avons maintenant défini l'accès et modifié les horodatages à une date dans le passé. L'horodatage modifié a également été mis à jour à l'heure actuelle de l'ordinateur.

Vous pouvez également utiliser le -r (référence) option, comme il est montré dans ce qui suit, si vous souhaitez déterminer les horodatages d'un fichier sur les valeurs d'horodatage d'un autre:

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

et après, nous sommes pratiquement de retour où nous avons commencé, avec un mélange de -0400 Oui -0500 horodatages.

Faisons quelque chose qui n'affecte que l'horodatage modifié. Nous utiliserons le chmod commande pour donner un fichier exécutable autorisations d'exécution pour tous les utilisateurs:

chmod +x dp
stat dp

L'horodatage modifié était le seul qui a été mis à jour. C'est parce que le fichier lui-même n'a pas été modifié, il n'a pas été accédé ou modifié. Malgré cela, les métadonnées sur le fichier ère changement.

EN RELATION: Comment utiliser la commande chmod sous Linux

Comment le système de fichiers met à jour les horodatages

Lors du montage d'un système de fichiers, il existe des options que vous pouvez utiliser pour spécifier comment ce système de fichiers doit fonctionner ou être traité. Ceux-ci sont stockés dans le /etc/fstab déposer, qui est lu et traité au démarrage. De plus, vous pouvez configurer des options pour dicter le schéma qu'elles doivent utiliser pour mettre à jour l'horodatage d'accès.

Voici quelques-unes des alternatives les plus courantes:

  • strictatime (horaire strict): Cette option met à jour l'horodatage d'accès des fichiers à chaque accès. Il y a un surcoût lié à cette approche, mais certains serveurs peuvent bénéficier de ce schéma. A peu de mérite sur un ordinateur de bureau ou un ordinateur portable.
  • pas d'heure (sans une heure): Cette option désactive complètement la mise à jour des horodatages d'accès aux fichiers et répertoires. Malgré cela, les horodatages modifiés continueront à être mis à jour.
  • nodiratime (Péché à l'heure): Cette option permet d'accéder aux horodatages des fichiers à mettre à jour, mais le désactive pour les répertoires.
  • temps de relai (temps relatif): Cette option met à jour l'horodatage d'accès uniquement s'il a plus de 24 heures ou si le précédent était plus ancien que les horodatages modifiés ou modifiés à ce moment. Cela établit un bon équilibre entre les horodatages d'accès qui sont mis à jour trop fréquemment ou pas du tout mis à jour.

Jetons un coup d'oeil à /etc/fstab fichier pour cet ordinateur et voir quelles options sont définies:

moins /etc/fstab

Les /etc/fstab Le fichier s'affiche pour nous, comme il est montré dans ce qui suit.

Voici le contenu du fichier sans le wrapper:

# /etc/fstab: informations sur le système de fichiers statiques.
#
# Utilisez 'blkid' pour imprimer l’identifiant universellement unique d’un
# appareil; cela peut être utilisé avec UUID= comme un moyen plus robuste de nommer les périphériques
# qui fonctionne même si des disques sont ajoutés et supprimés. Voir fstab(5).
#
# <système de fichiers> <point de montage> <taper> <options options> <Dépotoir> <passer>
# / was on /dev/sda1 during installation
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1
/swapfile none swap sw 0 0

Il n’y a que deux entrées, et l’un d’eux est un fichier d’échange, que nous pouvons ignorer. l’autre est monté à la racine du système de fichiers ( / ) et était sur l’appareil /dev/sda1 au moment de l'installation. C'est la première partition sur le premier disque dur, et il s'avère qu'il contient un ext4 Système de fichiers.

La seule option que vous obtenez est errors=remount-ro, qui indique au système d'exploitation de remonter ce système de fichiers en lecture seule s'il y a des erreurs en essayant de le monter en tant que système de fichiers en lecture-écriture.

Pour cela, aucune mention de la façon dont l'horodatage d'accès sera géré. Plongeons et voyons ce que /proc/mounts pouvez vous nous dire. Nous canaliserons la sortie de /proc/mounts à travers de grep. Notre chaîne de recherche sera “sda”, l'identifiant du disque dur.

Nous écrivons ce qui suit:

cat /proc/montages | grep "sda"

Maintenant, nous voyons les options suivantes:

  • rw: Le système de fichiers sera monté en tant que système de fichiers en lecture/écriture.
  • relatiempo: Le système de fichiers utilisera le schéma de “temps relatif” pour mettre à jour les horodatages d’accès.

D'où vient cela? Eh bien le relatime Le schéma est utilisé dans les situations suivantes:

  • Quand il valeurs prédéterminées /etc/fstab l'option est utilisée.
  • Quand il relatiempo /etc/fstab l'option est utilisée.
  • Lorsque les options d'horodatage d'accès ne sont pas utilisées dans /etc/fstabet vous utilisez le noyau Linux 2.6.30 ou plus récent.

Notre /etc/fstab billet pour le ext4 le système de fichiers n'a pas spécifié d'option de mise à jour d'horodatage d'accès, alors Linux a pris la décision judicieuse et a utilisé relatime.

EN RELATION: Comment écrire un fichier fstab sous Linux

Les horodatages sont importants

Les horodatages nous donnent un moyen facile de voir quand il a été consulté, un fichier a été modifié ou changé. Mais, ce qui est plus important, fournir un moyen de sauvegarder et de synchroniser le logiciel pour déterminer quels fichiers doivent être sauvegardés.

La possibilité de manipuler les horodatages s'avérera utile chaque fois que vous devrez convaincre de force un programme d'inclure ou d'ignorer un fichier ou un ensemble de fichiers.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.