Jeg ved bare, at ls -t og ls -f giver forskellige sortering af filer og underkataloger under en mappe.

  • Hvad er forskellen mellem tidsstempel, ændringstid og oprettet tid for en fil?
  • Hvordan får man og ændrer denne slags information ved hjælp af kommandoer?
  • Med hensyn til hvilken slags information siger folk, at en fil er “nyere” end den anden?
  • Hvad slags information “ændring vil ikke gøre filen anderledes?

For eksempel så jeg nogen skrev:

Som standard ser rsync-programmet kun ud til at se om filerne er forskellige i størrelse og tidsstempel. Det er ligeglad med hvilken fil der er nyere, hvis den er anderledes, bliver den overskrevet. Du kan videregive “–update” -flagget til rsync, som får det til at springe filer over på destinationen, hvis de er nyere end filen i kilden, men kun så længe de er af samme type fil. Hvad dette betyder er, at hvis for eksempel kildefilen er en almindelig fil, og destinationen er et symlink, overskrives destinationsfilen uanset tidsstempel.

På en sidebemærkning betyder filtypen her kun almindelig fil og simlink, ikke typen som pdf, jpg, htm, txt osv.?

Kommentarer

Svar

Der er 3 slags “tidsstempler”:

  • Adgang – den sidste gang filen blev læst
  • Rediger – sidste gang filen blev ændret (indholdet er blevet ændret)
  • Ændring – sidste gang metadata for filen blev ændret (f.eks. tilladelser)

For at få vist disse oplysninger kan du bruge stat , som er en del af kernerne.

stat viser dig også nogle flere oplysninger som enheden, inoder, links osv.

Husk, at denne slags information afhænger meget af filsystem- og monteringsindstillingerne. Hvis du f.eks. Monterer en partition med noatime, skrives der ingen adgangsoplysninger.

Et værktøj til at ændre tidsstemplerne ville være touch. Der er nogle argumenter for at beslutte, hvilket tidsstempel der skal ændres (f.eks. -A for adgangstid, -m for ændringstid) og for at påvirke parseringen af et nyt givet tidsstempel. Se man touch for flere detaljer.

touch kan blive praktisk i kombination med cp -u ( “kopier kun, når SOURCE-filen er nyere end destinationsfilen, eller når destinationsfilen mangler” ) eller til oprettelse af tomme markørfiler.

Kommentarer

  • Tak! For kommandoen rsync i " er det ikke ', hvilken fil der er nyere ", med hensyn til hvilken slags tidsstempel betyder det med " nyere ". På en sidebemærkning betyder den filtype, som rsync bryr sig om, kun almindelig fil og simlink, ikke typen som pdf, jpg, htm, txt osv.?
  • Generelt henvisning til tidspunktet for en fil er " ændret " tidsstempel. For eksempel hvad du ser fra ls -l. Og filtypen henviser til fil vs. symlink (eller andre typer filer som kataloger eller enheder). Ikke hvilken type data i filen er (tekst vs. jpeg osv.).
  • @Tim I den sammenhæng ' s det ændrede tidsstempel; rsync siger, at når det ' beslutter, om det skal sikkerhedskopiere en fil, kontrollerer det ikke ' for at se, om kildefilen er blevet ændret for nylig end den eksisterende sikkerhedskopi (hvilket er almindeligt med sikkerhedskopieringsprogrammer); det kontrollerer bare for at se, om filerne har forskellige størrelser eller forskellige modifikationstider og i givet fald sikkerhedskopierer
  • Og hvordan ved jeg, hvornår filen blev oprettet først? Vedligeholdes denne information et eller andet sted eller går de tabt i opdateringer? for at sige, hvor længe filen har eksisteret ..?
  • stat (2) man-siden beskriver mere detaljeret, når disse tidsstempler ændres.

Svar

Svaret på echox er gyldigt, men jeg vil tilføje oplysninger om filen oprettelsestid.

Understøttelse af filsystem

Nogle filsystemer understøtter en yderligere post i inoden angående oprettelsestid (eller fødselstid). Jeg ved, at ext4 understøtter denne funktion og JFS og BTRFS .

De fleste værktøjer og API er dog endnu ikke opdateret til at læse denne ekstra information.Så selvom det kunne være der, er det ikke tilgængeligt.

For eksempel på Ubuntu 12.04 LTS får jeg følgende for en fil, jeg oprettede i dag:

$ 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, at den nyere stat-funktion har et fødselsfelt, selvom output ser ud til at være forkert. Og via debugfs kan vi få oplysningerne (crtime som jeg er på ext4 filsystem).

statx support

Der er nu siden Kernel 4.11 et nyt statx-systemopkald oven på bedre support af Y2038 eller netværk filsystemer, det bringer også et par ekstra funktioner som btime eller fødselstid (skabelsestid) adgang. Understøttelse af ext4 skal være i samme kerneudgivelse 4.11.

Der har været patches for at tilføje support til denne nye syscall i senere Kernel-udgivelser: f.eks. BTRFS og F2FS i kerne 4.13, SMB3 i 4.14, GFS2 i 4.15, NFS i 4.16 osv.

Den kommende glibc vil give et funktionsopkald til forespørgsel på denne grænseflade (se Phoronix-nyheder om glibc statx-support ). Så vi kan forvente support til denne funktion i brugerområdet temmelig snart.

Kommentarer

  • Ved du, om btime forbliver intakt, når filer fra Windows (Oprettelse) tid) flyttes til ext4 og omvendt, ligesom mtime?
  • @paradroid undskyld, jeg kender ikke svaret. Hvis du mener under Linux, når du kopierer en fil fra NTFS til ext4, skal man kigge i NTFS-driveren, hvis den understøtter oprettelsestid. Hvis du mener under Windows, skal man kigge i ext4-driveren efter Windows.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *