Jeg vet bare at ls -t og ls -f gir forskjellig sortering av filer og underkataloger under en katalog.

  • Hva er forskjellen mellom tidsstempel, modifikasjonstid og opprettet tid for en fil?
  • Hvordan få og endre denne typen informasjon med kommandoer?
  • Når det gjelder hva slags informasjon sier folk at en fil er «nyere» enn den andre?
  • Hva typer informasjon «endring vil ikke gjøre filen annerledes?

For eksempel så jeg noen skrev:

Som standard ser rsync-programmet bare ut til å se om filene er forskjellige i størrelse og tidsstempel. Det bryr seg ikke hvilken fil som er nyere, hvis den er annerledes blir den overskrevet. Du kan sende flagget «–update» til rsync, som får det til å hoppe over filer på destinasjonen hvis de er nyere enn filen på kilden, men bare så lenge de er av samme type fil. Hva dette betyr er at hvis for eksempel kildefilen er en vanlig fil og målet er en symlink, vil destinasjonsfilen bli overskrevet, uavhengig av tidsstempel.

På sidemerket betyr filtypen her bare vanlig fil og simlink, ikke typen som pdf, jpg, htm, txt osv.?

Kommentarer

Svar

Det er tre slags «tidsstempler»:

  • Tilgang – den siste gang filen ble lest
  • Endre – siste gang filen ble endret (innholdet er endret)
  • Endring – siste gang metadata for filen ble endret (f.eks. tillatelser)

For å vise denne informasjonen kan du bruke stat som er en del av kjernemutlene.

stat viser deg også noen flere informasjon som enheten, inoder, lenker osv.

Husk at denne typen informasjon avhenger av filsystem og monteringsalternativer. Hvis du for eksempel monterer en partisjon med alternativet noatime, vil ingen tilgangsinformasjon bli skrevet.

Et verktøy for å endre tidsstempel vil være touch. Det er noen argumenter for å bestemme hvilket tidsstempel som skal endres (f.eks. -A for tilgangstid, -m for modifikasjonstid) og for å påvirke analyseringen av et nytt gitt tidsstempel. Se man touch for mer informasjon.

touch kan bli nyttig i kombinasjon med cp -u ( «kopier bare når SOURCE-filen er nyere enn destinasjonsfilen eller når destinasjonsfilen mangler» ) eller for å lage tomme markørfiler.

Kommentarer

  • Takk! For rsync-kommando, i ", bryr det seg ikke ' hvilken fil som er nyere ", når det gjelder hvilken type tidsstempel det betyr med " nyere ". På en sideanvisning betyr filtypen som rsync bryr seg om bare vanlig fil og simlink, ikke typen som pdf, jpg, htm, txt osv.?
  • Generelt referanse til tidspunktet for en fil er " endret " tidsstempel. For eksempel det du ser fra ls -l. Og filtypen refererer til fil vs. symlink (eller andre typer filer som kataloger eller enheter). Ikke hva slags data i filen er (tekst vs. jpeg osv.).
  • @Tim I den sammenheng er det ' s den modifiserte tidsstemplet; rsync sier at når den ' bestemmer om den skal sikkerhetskopiere en fil, kontrollerer den ikke ' for å se om kildefilen har blitt modifisert nylig enn den eksisterende sikkerhetskopien (som er vanlig med sikkerhetskopieringsprogrammer); det sjekker bare for å se om filene har forskjellige størrelser eller forskjellige modifikasjonstider og sikkerhetskopierer i så fall
  • Og hvordan vet jeg når filen ble opprettet først? Vedlikeholdes denne informasjonen i det hele tatt eller går den tapt i oppdateringer? så å si, hvor lenge filen har eksistert ..?
  • stat (2) man-siden beskriver mer detaljert når disse tidsstemplene endres.

Svar

Svaret på echox er gyldig, men jeg vil legge til informasjon om filen opprettelsestid.

Støtte for filsystem

Noen filsystemer støtter en ekstra oppføring i inoden angående opprettelsestid (eller fødselstid). Jeg vet at ext4 støtter denne funksjonen og også JFS og BTRFS .

Imidlertid har de fleste verktøy og API ennå ikke blitt oppdatert for å lese denne ekstra informasjonen.Så selv om den kunne være der, er den ikke tilgjengelig.

For eksempel på Ubuntu 12.04 LTS får jeg følgende for en fil jeg opprettet 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-funksjonen har et fødselsfelt, selv om utdataene virker feil. Og via feilsøking kan vi få informasjonen (crtime som jeg er på ext4 filsystem).

statx-støtte

Det er nå siden Kernel 4.11 et nytt statx-systemanrop , på toppen av bedre støtte for Y2038 eller nettverk filsystemer, det gir også noen ekstra funksjoner som btime eller fødselstid (skapelsestid) tilgang. Støtte for ext4 skal være i samme kjerneutgivelse 4.11.

Det har vært oppdateringer for å legge til støtte for denne nye syskallen i senere Kernel-utgivelser: f.eks. BTRFS og F2FS i kjernen 4.13, SMB3 i 4.14, GFS2 i 4.15, NFS i 4.16 osv.

Den kommende glibc vil gi en funksjonsanrop for å spørre om dette grensesnittet (se Phoronix-nyheter om støtte for glibc statx ). Så vi kan forvente støtte for denne funksjonen i brukerområdet ganske snart.

Kommentarer

  • Vet du om btime forblir intakt når filer fra Windows (Creation tid) flyttes til ext4 og omvendt, som mtime?
  • @paradroid beklager at jeg ikke vet svaret. Hvis du mener under Linux når du kopierer en fil fra NTFS til ext4, må du se i NTFS-driveren hvis den støtter opprettelsestid. Hvis du mener under Windows, må du se i ext4-driveren etter Windows.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *