
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 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

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 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

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

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

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 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 /etc/fstab bestand wordt voor ons weergegeven, zoals hieronder weergegeven.

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"

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/fstaboptie wordt gebruikt. - Wanneer de relatime
/etc/fstaboptie 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.