Linux File Timestamps uitgelegd: atime, mtime en ctime

Een laptop met een terminalvenster met extra met tekst gevulde terminalvensters op de achtergrond.
Fatmawati Achmad Zaenuri / Shutterstock

Wanneer betekent “gewijzigd” niet “gewijzigd”? Als we het hebben over tijdstempels van Linux-bestanden. In deze handleiding leggen we uit hoe het systeem ze bijwerkt en hoe u ze zelf kunt wijzigen.

Het verschil tussen atime, mtime en ctime

Elk Linux-bestand heeft drie tijdstempels: het toegangstijdstempel (atime), het gewijzigde tijdstempel (mtime) en het gewijzigde tijdstempel (ctime).

Het toegangstijdstempel is de laatste keer dat een bestand is gelezen. Dit betekent dat iemand een programma heeft gebruikt om de inhoud van het bestand weer te geven of om er waarden uit te lezen. Er is niets gewijzigd of toegevoegd aan het bestand. Er werd naar de gegevens verwezen maar ongewijzigd.

Een aangepast tijdstempel geeft de laatste keer aan dat de inhoud van een bestand is gewijzigd. Een programma of proces heeft het bestand bewerkt of gemanipuleerd. “Gewijzigd” betekent dat iets in het bestand is gewijzigd of verwijderd, of dat er nieuwe gegevens zijn toegevoegd.

Gewijzigde tijdstempels verwijzen niet naar wijzigingen die zijn aangebracht in de inhoud van een bestand. Het is eerder het tijdstip waarop de metagegevens met betrekking tot het bestand zijn gewijzigd. Wijzigingen in bestandsrechten zullen bijvoorbeeld de gewijzigde tijdstempel bijwerken.

Het standaard ext4 Linux-bestandssysteem wijst ook ruimte toe voor een tijdstempel voor het maken van bestanden in de interne bestandssysteemstructuren, maar dit is nog niet geïmplementeerd. Soms wordt dit tijdstempel ingevuld, maar u kunt niet afhankelijk zijn van de waarden erin.

De anatomie van een tijdstempel

Linux-tijdstempels bevatten een nummer in plaats van een datum en tijd. Dit aantal is het aantal seconden sinds het Unix-tijdperk, dat middernacht (00:00:00) was op 1 januari 1970, in Coordinated Universal Time (UTC). Schrikkelseconden worden genegeerd in Linux-tijdstempels, dus ze zijn niet analoog aan realtime.

Wanneer Linux een tijdstempel moet weergeven, vertaalt het het aantal seconden naar een datum en tijd. Dit maakt het gemakkelijker voor mensen om te begrijpen. De locatie en tijdzone waarin de computer het bestand bekijkt, begeleidt de conversie van het aantal seconden naar een datum en tijd. Het zorgt er ook voor dat de maand in de juiste taal is.

Dus hoeveel seconden kunnen er in een tijdstempel worden opgeslagen? Veel – 2.147.483.647, om precies te zijn. Dat is een groot aantal, maar is het genoeg? Als je dat toevoegt aan het Unix-tijdperk en het vervolgens vertaalt naar een datum en tijd, krijg je dinsdag 19 januari 2038 om 03:14:07 uur. Voor die tijd hebben we echter een ander schema voor tijdstempels nodig.

Tijdstempels bekijken

Wanneer u de -l (lange lijst) optie met ls, zoals hieronder getoond, kunt u de gewijzigde tijdstempel zien:

ls -l dp.c

Als u de toegangstijdstempel wilt zien, gebruikt u de -lu (toegangstijd) optie zoals:

ls -lu dp.c

En tot slot, om het tijdstempel van de wijziging te zien, kunt u de -lc (verander tijd) optie; typ het volgende:

ls -lc dp.c

De "ls -l dp.c" -opdrachten in een terminalvenster.

De bovenstaande tijdstempels laten zien dat de inhoud van het bestand voor het laatst is gewijzigd op 21 april 2019. De toegangs- en gewijzigde tijdstempels zijn identiek omdat het bestand op 20 januari 2020 van een andere computer naar deze is gekopieerd en beide tijdstempels op dat moment zijn bijgewerkt.

Om alle tijdstempels tegelijk te zien, gebruikt u de stat commando als volgt:

stat dp.c

Het "stat dp.c" commando in een terminalvenster.

De tijdzones worden onder aan het scherm weergegeven. Zoals u kunt zien, hebben ze een zeer nauwkeurige, fractionele secondencomponent. Aan het einde van elk tijdstempel ziet u ook een -0500 of -0400 .

Dit zijn tijdzone-offsets. Het bestandssysteem registreert de tijdstempels in UTC en converteert ze naar de lokale tijdzone wanneer ze worden weergegeven door stat. De computer die we hebben gebruikt om dit artikel te onderzoeken, is geconfigureerd alsof deze zich in de Eastern Standard Time (EST) -zone van de VS bevindt

Die tijdzone ligt vijf uur achter UTC wanneer EST van kracht is. Het is echter vier uur achter UTC wanneer Eastern Daylight Time (EDT) van kracht is. In april 2019, toen de gewijzigde tijdstempel werd gewijzigd, was EDT van kracht. Daarom hebben twee van de tijdstempels een offset van vijf uur, maar de gewijzigde heeft een offset van vier uur.

De offsets en tijdzones worden nergens opgeslagen. Er is noch een inode, noch een bestandssysteemruimte gewijd aan het bewaren van deze waarden. U moet deze direct berekenen met behulp van het tijdstempel (dat altijd in UTC-tijd is), de lokale tijdzone van de computer die het bestand weergeeft en of de zomertijd van kracht was.

U ziet ook een “Geboorte” -tijdstempel, die is gereserveerd voor de aanmaakdatum van het bestand. Dit is niet geïmplementeerd en u ziet een koppelteken “-”In plaats van een tijdstempel.

VERWANT: Alles wat u ooit wilde weten over inodes op Linux

Tijdstempels wijzigen

Als je wilt, kun je de tijdstempels van een bestand wijzigen. U kunt de touch opdracht om de toegang of gewijzigde tijdstempels te wijzigen, of beide:

touch -a dp.c

Om een ​​nieuw toegangstijdstempel in te stellen, gebruikt u de -a (toegangstijd) optie. Deze opdracht stelt het toegangstijdstempel in op de huidige tijd van de computer:

stat dp.c

Het "touch -a dp.c" commando in een terminalvenster.

Het toegangstijdstempel is gewijzigd, zoals verwacht. De gewijzigde tijdstempel is echter ook bijgewerkt; dit is normaal.

Om de gewijzigde tijdstempel te wijzigen, kunt u de -m (gewijzigde tijd) optie:

touch -m dp.c
stat dp.c

Het "touch -m dp.c" commando in een terminalvenster.

Deze keer zijn de gewijzigde en gewijzigde tijdstempels bijgewerkt.

U kunt de -d (datum) optie als u zowel de toegangstijd als de gewijzigde tijdstempels tegelijkertijd wilt wijzigen. U kunt ook een tijd en datum specificeren – u bent niet beperkt tot het wijzigen van de tijdstempels naar het heden.

We gebruiken de volgende opdracht om de toegang en gewijzigde tijdstempels in te stellen op 10:30:45 op 15 januari 2020:

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

De

We hebben nu de toegangs- en gewijzigde tijdstempels ingesteld op een datum in het verleden. De gewijzigde tijdstempel is ook bijgewerkt naar de huidige tijd van de computer.

U kunt ook de -r (referentie) optie, zoals hieronder getoond, als u de tijdstempels van een bestand wilt instellen op de tijdstempels van een ander:

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

Het "touch dp.c -r dice_words.sl3" commando in een terminalvenster.

En dan zijn we vrijwel terug waar we begonnen, met een mix van -0400 en -0500 tijdstempels.

Laten we iets doen dat alleen de gewijzigde tijdstempel beïnvloedt. We gebruiken de chmod commando om een ​​uitvoerbaar bestand uitvoerrechten te geven voor alle gebruikers:

chmod +x dp
stat dp

De "chmod + x dp" en "stat dp" opdrachten in een terminalvenster.

De gewijzigde tijdstempel was de enige die is bijgewerkt. Dit komt doordat het bestand zelf niet is gewijzigd – het is niet geopend of gewijzigd. De metagegevens over het bestand was veranderd.

VERWANT: Hoe de chmod-opdracht op Linux te gebruiken

Hoe het bestandssysteem tijdstempels bijwerkt

Als een bestandssysteem is aangekoppeld, zijn er opties die u kunt gebruiken om aan te geven hoe dat bestandssysteem moet werken of moet worden behandeld. Deze worden opgeslagen in het /etc/fstab bestand, dat tijdens het opstarten wordt gelezen en verwerkt. U kunt ook opties instellen om het schema te dicteren dat ze moeten gebruiken om het toegangstijdstempel bij te werken.

De volgende zijn enkele van de meest voorkomende opties:

  • strikt (strikt tijd): Met deze optie wordt het toegangstijdstempel van bestanden bijgewerkt telkens wanneer ze worden geopend. Er is een overhead aan deze aanpak verbonden, maar sommige servers kunnen profiteren van dit schema. Het heeft weinig voordelen op een desktop- of laptopcomputer.
  • middag (geen tijd): Met deze optie worden de toegangstijdstempels voor bestanden en mappen volledig uitgeschakeld. De gewijzigde tijdstempels worden echter nog steeds bijgewerkt.
  • nodiratime (geen dir atime): Deze optie maakt toegangstijdstempels mogelijk voor het bijwerken van bestanden, maar schakelt deze uit voor mappen.
  • relatime (relatieve tijd): Met deze optie wordt de toegangstijdstempel alleen bijgewerkt als deze meer dan 24 uur oud was, of de vorige ouder was dan de huidige gewijzigde of gewijzigde tijdstempels. Dit zorgt voor een goede balans tussen toegangstijdstempels die te vaak worden bijgewerkt of helemaal niet worden bijgewerkt.

Laten we eens kijken naar de /etc/fstab bestand voor deze computer en kijk welke opties zijn ingesteld:

less /etc/fstab

De "less / etc / fstab" in een terminalvenster.

De /etc/fstab bestand wordt voor ons weergegeven, zoals hieronder weergegeven.

Het "/ etc / fstab" -bestand in less in een terminalvenster.

Hier is de inhoud van het bestand zonder de wrap-around:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1
/swapfile none swap sw 0 0

Er zijn slechts twee vermeldingen, en een daarvan is een wisselbestand, dat we kunnen negeren. De andere wordt gemount in de root van het bestandssysteem ( / ) en was op het apparaat /dev/sda1 op het moment van installatie. Dat is de eerste partitie op de eerste harde schijf en deze bevat toevallig een ext4 bestandssysteem.

De enige optie die eraan wordt doorgegeven is errors=remount-ro, die het besturingssysteem vertelt om dit bestandssysteem opnieuw te koppelen als alleen-lezen als er fouten zijn bij het mounten als een lees- en schrijfbestandssysteem.

Er wordt dus niet vermeld hoe het toegangstijdstempel zal worden afgehandeld. Laten we dieper graven en kijken wat /proc/mounts kan het ons vertellen. We zullen de output van /proc/mounts door grep. Onze zoekreeks is “sda”, de identificatie van de harde schijf.

We typen het volgende:

cat /proc/mounts | grep "sda"

De

Nu zien we de volgende opties:

  • rw: Het bestandssysteem wordt aangekoppeld als een lees- en schrijfbestandssysteem.
  • relatime: Het bestandssysteem zal het “relatieve atime” -schema gebruiken om de toegangstijdstempels bij te werken.

Waar kwam dat vandaan? Nou, de relatime schema wordt gebruikt in de volgende situaties:

  • Wanneer de standaardwaarden /etc/fstab optie wordt gebruikt.
  • Wanneer de relatime /etc/fstab optie wordt gebruikt.
  • Als er geen toegangstijdstempelopties worden gebruikt in /etc/fstab, en je gebruikt Linux-kernel 2.6.30 of nieuwer.

Onze /etc/fstab vermelding voor de ext4 bestandssysteem specificeerde geen update-opties voor toegangstijdstempels, dus Linux maakte de verstandige keuze en gebruikte relatime.

VERWANT: Hoe een fstab-bestand op Linux te schrijven

Tijdstempels zijn belangrijk

Tijdstempels geven ons een gemakkelijke manier om te zien wanneer een bestand is geopend, gewijzigd of gewijzigd. Maar wat nog belangrijker is, ze bieden een manier om een ​​back-up te maken van en software te synchroniseren om te bepalen van welke bestanden een back-up moet worden gemaakt.

De mogelijkheid om tijdstempels te manipuleren zal nuttig zijn wanneer u een programma met geweld moet overtuigen om een ​​bestand of een reeks bestanden op te nemen of te negeren.

Nieuwste artikelen

Gerelateerde artikelen