Förklaring av Linux-filtidsstämplar för: atime, mtime och ctime

När betyder "ändra" inte "ändra"? När vi pratar om tidsstämplar för Linux-filer. I den här guiden kommer vi att förklara hur systemet uppdaterar dem och hur du själv ändrar dem.

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Skillnaden mellan atime, mtime och ctime

Varje Linux-fil har tre tidsstämplar: åtkomsttidsstämpeln (atime), den modifierade tidsstämpeln (mtime) och den ändrade tidsstämpeln (ctime).

Åtkomsttidsstämpeln är sista gången filen lästes. Det betyder att någon använde ett program för att se innehållet i filen eller läsa några värden från den. Inget har ändrats eller lagts till i filen. Uppgifterna är refererade men oförändrade.

Den ändrade tidsstämpeln anger när innehållet i filen senast ändrades. Ett program eller en process redigerar eller manipulerar filen. "Ändrad" betyder att något i filen har ändrats eller raderats, eller att ny data har lagts till.

Ändrade tidsstämplar indikerar inte ändringar som gjorts i filens innehåll. Det är snarare den tidpunkt då metadata relaterade till filen ändrades. Till exempel kommer ändringar av filbehörigheter att uppdatera den ändrade tidsstämpeln.

Standardfilsystemet Linux ext4 allokerar också utrymme för tidsstämpeln för filskapandet i dess interna filsystemstrukturer, men detta är ännu inte implementerat. Ibland är denna tidsstämpel ifylld, men du kan inte lita på värdena i den.

Detaljerad tidsstämpel

Linux-tidsstämplar innehåller ett nummer istället för datum och tid. Detta nummer är antalet sekunder sedan Unix-eran, som var midnatt (00:00:00) den 1 januari 1970, Coordinated Universal Time (UTC). Språngsekunder ignoreras i Linux-tidsstämplar, så de är ingenting som realtid.

När Linux behöver visa en tidsstämpel översätter det antalet sekunder till ett datum och en tid. Detta gör det lättare för människor att förstå. Platsen och tidszonen där datorn tittar på filen instruerar datorn att konvertera antalet sekunder till ett datum och en tid. Det säkerställer också att månaden är på rätt språk.

Så, hur många sekunder kan lagras i en tidsstämpel? Mycket – 2,147,483,647 19 2038 03 för att vara exakt. Detta är ett stort antal, men räcker det? Om du lägger till det i Unix-eran och sedan översätter det till ett datum och en tid får du tisdagen den 14 januari 07 kl. XNUMX:XNUMX:XNUMX. Vi behöver ett annat system för tidsstämplar innan dess.

Visa tidsstämplar

När alternativet -l (långlista) används med ls, som visas nedan, Du kan se den ändrade tidsstämpeln:

ls -l dp.c

Om du vill se åtkomsttidsstämpeln, använd alternativet -lu (åtkomsttid) enligt följande:

ls -lu dp.c

Slutligen, för att se tidsstämpeln för ändringen, kan du använda alternativet -lc (ändra tid); Skriv följande:

ls -lc dp.c

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Tidsstämplarna ovan visar att filinnehållet senast ändrades den 21 april 2019. Tidsstämplarna för åtkomst och ändring är identiska eftersom filen kopierades från en annan dator till den här datorn den 20 januari 2020, och båda tidsstämplarna uppdaterades vid den tiden.

Läs också:  Nybörjarguide till Shell-programmering i Linux

att se Alla tidsstämplar på en gång, använd kommandot stat enligt följande:

stat dp.c

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Tidszoner listas längst ner på skärmen. Som du kan se har de en mycket exakt sekundkomponent. I slutet av varje tidsstämpel ser du också -0500 eller -0400.

Dessa är tidszonförskjutningar. Filsystemet registrerar UTC-tidsstämplar och konverterar dem till den lokala tidszonen när de visas av statistik. Datorn vi använde för att undersöka den här artikeln var konfigurerad som om den var i zonen Eastern Standard Time (EST) i USA.

Den här tidszonen ligger fem timmar efter UTC (Coordinated Universal Time) när Eastern Time är i kraft. Det är dock fyra timmar efter Coordinated Universal Time (UTC) när Eastern Daylight Time (EDT) är i kraft. I april 2019, när den reviderade tidsstämpeln ändrades, trädde US Eastern Standard Time i kraft. Det är därför två av tidsstämplarna har fem timmars offset, men den redigerade versionen har fyra timmars offset.

Offset och tidszoner lagras inte någonstans. Det finns ingen inod och inget filsystemsutrymme tilldelat för att hålla dessa värden. Du måste snabbt beräkna detta med hjälp av tidsstämpeln (som alltid är UTC), den lokala tidszonen för datorn som tittar på filen och om sommartid är aktiv eller inte.

Du kommer också att se tidsstämpeln "Födelse", som är reserverad för det datum då filen skapades. Detta är inte implementerat, och du kommer att se ett bindestreck "-" istället för tidsstämpeln.

Ändra tidsstämplar

Om du vill kan du ändra tidsstämplarna på filen. Du kan använda pekkommandot för att ändra åtkomst eller ändrade tidsstämplar, Eller båda:

tryck på -a dp.c

För att ställa in en ny åtkomsttidsstämpel kan du använda alternativet -a (åtkomsttid). Detta kommando ställer in åtkomsttidsstämpeln till datorns aktuella tid:

stat dp.c

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Åtkomsttidsstämpeln har ändrats, som förväntat. Den ändrade tidsstämpeln har dock också uppdaterats; Det är normalt.

För att ändra den modifierade tidsstämpeln kan du använda alternativet -m (modifierad tid):

beröring -m dp.c
stat dp.c

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Den här gången har de ändrade och ändrade tidsstämplarna uppdaterats.

Du kan använda alternativet -d (datum) om du vill ändra både tidsstämplar och modifierad åtkomst på en gång. Du kan också ange tid och datum - du är inte begränsad till att ändra tidsstämplar till nutid.

Vi kommer att använda följande kommando för att ställa in åtkomst och ändrade tidsstämplar till 10:30:45 den 15 januari 2020:

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

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Vi har nu satt åtkomst och ändrade tidsstämplar till ett datum i det förflutna. Den ändrade tidsstämpeln uppdateras också till datorns aktuella tid.

Du kan också använda alternativet -r (referens), som visas nedan, om du vill ställa in tidsstämplarna för en fil till tidsstämpelvärdena för en annan fil:

tryck på dp.c -r dice_words.sl3
stat dp.c

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Efter det är vi nästan tillbaka där vi började, med en blandning av -0400 och -0500 tidsstämplar.

Läs också:  Tyvärr Linux, HDMI 2.1 kan inte ha drivrutiner med öppen källkod

Låt oss göra något som bara påverkar den variabla tidsstämpeln. Vi kommer att använda kommandot chmod för att bevilja den körbara filen Utför behörigheter för alla användare:

chmod +x dp
stat dp

Den ändrade tidsstämpeln var den enda som uppdaterades. Detta beror på att själva filen inte har ändrats, inte heller har nåtts eller modifierats. Men metadata om filen har ändrats.

Hur uppdaterar filsystemet tidsstämplar?

När ett filsystem är installerat finns det alternativ som du kan använda för att ange hur det filsystemet körs eller hur det ska interagera med det. De lagras i filen /etc/fstab, som läses och bearbetas vid uppstart. Du kan också ställa in alternativ för att diktera vilket system som ska användas för att uppdatera åtkomsttidsstämpeln.

Här är några av de mest populära alternativen:

strictatime: Det här alternativet uppdaterar filåtkomstens tidsstämpel varje gång de används. Det finns ytterligare kostnader förknippade med detta tillvägagångssätt, men vissa servrar kan dra nytta av detta schema. Det har få fördelar jämfört med en stationär eller bärbar dator.
noatime(no atime): Detta alternativ inaktiverar helt åtkomsttidsstämplar för filer och kataloger från att uppdateras. De ändrade tidsstämplarna kommer dock att uppdateras.
nodiratime (ingen dir atime): Det här alternativet tillåter åtkomst till tidsstämplar för filer som ska uppdateras, men inaktiverar dem för kataloger.
relatime: Det här alternativet uppdaterar åtkomsttidsstämpeln endast om den är mer än 24 timmar gammal, eller om den föregående är äldre än den nuvarande ändrade eller ändrade tidsstämpeln. Detta ger en bra balans mellan att uppdatera åtkomsttidsstämplar ofta eller att inte uppdatera alls.
Låt oss ta en titt på filen /etc/fstab för den här datorn och se vilka alternativ som är inställda:

mindre / etc / fstab

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Filen /etc/fstab visas som visas nedan.

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Här är filinnehållet utan omslag:

# /etc/fstab: statisk filsysteminformation.
#
# Använd 'blkid' för att skriva ut den universellt unika identifieraren för en
#enhet; Detta kan användas med UUID= som ett mer robust sätt att namnge enheter
# som fungerar även om diskar läggs till och tas bort. Se fstab(5).
#
# <fil system> <montera punkt> <Typ> <alternativ> <dumpa> <passera>
# / var på / dev / sda1 under installationen
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1 /swapfil ingen swap sw 0 0

Det finns bara två poster, varav en är en växlingsfil, som vi kan ignorera. Den andra är installerad på roten av filsystemet ( / ) och fanns på enheten /dev/sda1 vid installationstillfället. Detta är den första partitionen på den första hårddisken, och den råkar innehålla filsystemet ext4.

Det enda alternativet som skickas till den är errors=remount-ro, som säger åt operativsystemet att montera om detta filsystem som ett skrivskyddat system om det finns fel när man försöker montera det som ett läs-skriv-filsystem.

Därför nämns det inget om hur man hanterar åtkomsttidsstämpeln. Låt oss gräva djupare och kolla vad /proc/mounts kan berätta för oss. Vi kommer att ansluta utgången från /proc/mounts via grep. Vår söksträng kommer att vara "sda", hårddiskidentifierare.

Läs också:  Linux Kernel 6.8 kommer med framtida funktioner

Vi skriver följande:

cat /proc/mounts | grep "sda"

Förklaring av Linux-filtidsstämplar för: atime, mtime, ctime - %categories

Nu ser vi följande alternativ:

rw: Filsystemet kommer att monteras som ett läs-skriv-filsystem.
relatime: Filsystemet kommer att använda systemet "relativ tid" för att uppdatera åtkomsttidsstämplar.
Var kom detta ifrån? Tja, ett länkdiagram används i följande situationer:

När du använder standardalternativet /etc/fstab.
När du använder relatime /etc/fstab.
När åtkomsttidsstämpelalternativen i /etc/fstab inte används och du använder Linuxkärna 2.6.30 eller senare.
Vår /etc/fstab-post för ext4-filsystemet angav inga alternativ för att uppdatera åtkomsttidsstämpeln, så Linux gjorde det förnuftiga valet och använde relatid.

Tidsstämplar är viktiga

Tidsstämplar ger oss ett enkelt sätt att veta när en fil öppnades, ändrades eller ändrades. Men ännu viktigare, det ger ett sätt att säkerhetskopiera och synkronisera programvaran för att identifiera filer som behöver säkerhetskopieras.

Möjligheten att manipulera tidsstämplar kommer väl till pass när du med kraft måste övertyga ett program att inkludera eller ignorera en fil eller grupp av filer.

Linux kommandon
Filer tjära·pv·hur·tac·chmod·grep ·diff·törst·ar·människa·PUSHD·popd·fsck·Testdisk·seq·fd·pandoc·cd·$ PATH·awk·delta·jq·vika ihop·unik·journalctl·svans·stat·ls·fstab·missar·mindre·chgrp·chown·rev·se·strängar·Typ·döpa·zip·packa·montera·umount·installera·fdisk·mkfs·rm·rmdir·rsync·df·gpg·vi·nano·mkdir·du·ln·plåster·konvertera·rclone·strimla·SRM·scp·gzip·prat·klippa·finna·umask·wc· tr
Processer alias·screen·topp·trevligt·renice·framsteg·strace·SYSTEMD·tmux·chsh·historia·at·sats·kostnadsfria ·som·dmesg·chfn·användarmod·ps·chroot·xargs·tty·pinky·lsof·vmstat·timeout·vägg·ja·döda·sova·sudo·su·tid·gruppadd·användarmod·grupper·lshw·avstängning·omstart·stanna·Stäng av·passwd·lscpu·crontab·datum·bg·fg·pidof·nohup·pmap
nätverk netstat·ping·traceroute·ip·ss·whois·fail2ban·bmon·gräva·finger·nmap·ftp·curl·wget·som·whoami·w·iptables·ssh-keygen·ufw·arping·firewalld
Du kanske också gillar