Jag vet bara att ls -t och ls -f ge olika sortering av filer och underkataloger under en katalog.

  • Vilka är skillnaderna mellan tidsstämpel, ändringstid och skapad tid för en fil?
  • Hur får jag och ändrar den här typen av information med kommandon?
  • När det gäller vilken typ av information säger människor att en fil är ”nyare” än den andra?
  • Vad typer av information ”ändring kommer inte att göra filen annorlunda?

Till exempel såg jag någon skriva:

Som standard ser rsync-programmet bara ut om filerna är olika i storlek och tidsstämpel. Det bryr sig inte vilken fil som är nyare, om den är annorlunda skrivs den över. Du kan skicka flaggan ”–update” till rsync vilket gör att den hoppar över filer på destinationen om de är nyare än filen i källan, men bara så länge de är av samma typ av fil. Vad detta betyder är att om exempelvis källfilen är en vanlig fil och destinationen är en symlänk, kommer destinationsfilen att skrivas över, oavsett tidsstämpel.

På sidomärket betyder filtypen här bara vanlig fil och simlänk, inte typen som pdf, jpg, htm, txt etc?

Kommentarer

Svar

Det finns tre slags ”tidsstämplar”:

  • Access – den sista gång filen lästes
  • Ändra – senaste gången filen ändrades (innehållet har modifierats)
  • Ändring – den senaste gången metadata för filen ändrades (t.ex. behörigheter)

För att visa denna information kan du använda stat som är en del av kärnan.

stat visar dig också några fler information som enhet, inoder, länkar osv.

Kom ihåg att denna typ av information beror mycket på filsystem och monteringsalternativ. Till exempel om du monterar en partition med alternativet noatime, kommer ingen åtkomstinformation att skrivas.

Ett verktyg för att ändra tidsstämplarna skulle vara touch. Det finns några argument för att bestämma vilken tidsstämpel som ska ändras (t.ex. -a för åtkomsttid, -m för modifieringstid) och för att påverka analyseringen av en ny given tidsstämpel. Se man touch för mer information.

touch kan bli praktiskt i kombination med cp -u ( ”kopiera bara när SOURCE-filen är nyare än målfilen eller när destinationsfilen saknas” ) eller för att skapa tomma markörfiler.

Kommentarer

  • Tack! För rsync-kommando, i " bryr det sig inte ' vilken fil som är nyare ", i termer av vilken typ av tidsstämpel betyder det med " nyare ". På en sidoanteckning betyder också filtypen som rsync bryr sig om bara vanlig fil och simlink, inte typen som pdf, jpg, htm, txt etc?
  • I allmänhet hänvisning till tiden för en fil är " modifierad " tidsstämpel. Till exempel vad du ser från ls -l. Och filtypen avser fil jämfört med symlink (eller andra typer av filer som kataloger eller enheter). Inte vilken typ av data i filen är (text vs. jpeg, etc).
  • @Tim I det sammanhanget ' s den modifierade tidsstämpeln; rsync säger att när den ' bestämmer om den ska säkerhetskopiera en fil, kontrollerar den inte ' för att se om källfilen har modifierats nyligen än den befintliga säkerhetskopian (vilket är vanligt med säkerhetskopieringsprogram); det kontrollerar bara om filerna har olika storlekar eller olika ändringstider och säkerhetskopierar i så fall
  • Och hur vet jag när filen skapades först? Underhålls denna information någonstans eller går den förlorad i uppdateringar? så att säga, hur länge filen har funnits ..?
  • stat (2) man-sidan beskriver mer detaljerat när dessa tidsstämplar ändras.

Svar

Svaret på echox är giltigt men jag vill lägga till information om filen skapelsestid.

Stöd för filsystem

Vissa filsystem stöder ytterligare en post i inoden angående skapelsestid (eller födelsetid). Jag vet att ext4 stöder den här funktionen och även JFS och BTRFS .

De flesta verktyg och API har dock ännu inte uppdaterats för att läsa denna extra information.Så även om den kunde vara där är den inte tillgänglig.

Till exempel på Ubuntu 12.04 LTS får jag följande för en fil som jag skapade idag:

$ echo Just another test > /tmp/mytest $ sleep 3 $ touch /tmp/mytest $ sleep 2 $ cat /tmp/mytest > /dev/null $ stat /tmp/mytest [...] Access: 2012-06-05 13:33:44.279774711 +0200 Modify: 2012-06-05 13:33:34.611893317 +0200 Change: 2012-06-05 13:33:34.611893317 +0200 Birth: - $ sudo debugfs -R "stat /tmp/mytest" /dev/sda1 [...] ctime: 0x4fcdee8e:91e30114 -- Tue Jun 5 13:33:34 2012 atime: 0x4fcdee98:42b417dc -- Tue Jun 5 13:33:44 2012 mtime: 0x4fcdee8e:91e30114 -- Tue Jun 5 13:33:34 2012 crtime: 0x4fcdee46:01258f1c -- Tue Jun 5 13:32:22 2012 [...] 

Du kan se att den nyare stat-funktionen har ett födelsefält, även om utdata verkar felaktiga. Och via debugfs kan vi få informationen (crtime som jag är på ext4-filsystem).

statx-stöd

Det finns nu sedan Kernel 4.11 ett nytt statx-systemanrop , utöver bättre stöd för Y2038 eller nätverk filsystem, det ger också några extra funktioner som btime eller födelsetid (skapelsetid). Stöd för ext4 bör finnas i samma kärnutgåva 4.11.

Det har funnits korrigeringar för att lägga till stöd till den här nya syskallen i senare Kernel-utgåvor: t.ex. BTRFS och F2FS i kärnan 4.13, SMB3 i 4.14, GFS2 i 4.15, NFS i 4.16, etc.

Den kommande glibc ger ett funktionsanrop för att fråga detta gränssnitt (se Phoronix-nyheter om stöd för glibc statx ). Så vi kan förvänta oss stöd för den här funktionen i användarutrymmet ganska snart.

Kommentarer

  • Vet du om btime förblir intakt när filer från Windows (skapande tid) flyttas till ext4 och vice versa, som mtime?
  • @paradroid ledsen jag vet inte svaret. Om du menar under Linux när du kopierar en fil från NTFS till ext4, måste man titta i NTFS-drivrutinen om den stöder skapandetid. Om du menar under Windows måste du leta efter ext4-drivrutinen för Windows.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *