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