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
- Se også askubuntu.com/questions/62492/…
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
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.
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.).