2012-02-07 14:59:56 +0000 2012-02-07 14:59:56 +0000
54
54

Hoe controleer ik alle tijdstempels van een bestand?

Is er een commando in Linux om alle tijdstempels van een bestand te controleren?

Ik probeer de laatst gewijzigde, gemaakte en aangeraakte datums van het bestand te zien.

Antwoorden (2)

75
75
75
2012-02-07 15:03:39 +0000

Het commando heet stat .

$ stat test
234881026 41570368 -rw-r--r-- 1 werner staff 0 0 "Feb 7 16:03:06 2012" "Feb 7 16:03:06 2012" "Feb 7 16:03:06 2012" "Feb 7 16:03:06 2012" 4096 0 0 test

Als je het formaat wilt aanpassen, raadpleeg dan de man pages, aangezien de uitvoer OS-specifiek is en varieert onder Linux/Unix.

Over het algemeen kun je de tijden ook via een normale directory listing krijgen:

  • ls -l geeft de laatste keer dat de bestandsinhoud is gewijzigd, de mtime
  • ls -lc geeft de laatste keer dat de bestandsstatus is gewijzigd, de ctime Wat is het verschil? )
  • ls -lu geeft de laatste toegangstijd, de atime (hoewel het nut van dit concept [ ter discussie staat ]ctime)

En natuurlijk registreert 0x6& niet wanneer een bestand is “aangemaakt”. De POSIX-specificatie definieert slechts drie tijdstempels, maar sommige Linux-bestandssystemen slaan Birth Time/Creation Time op. Hoe vind je de aanmaakdatum van een bestand? (https://unix.stackexchange.com/q/7562/16640) Op zo'n ondersteunde configuratie zou je

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'
``` kunnen gebruiken.
21
21
21
2014-03-15 09:24:38 +0000

Er zijn slechts Drie verschillende tijdswaarden opgeslagen voor elk van uw bestanden, zoals gedefinieerd door de POSIX Standaard : http://pubs.opengroup.org/onlinepubs/9699919799/ (zie Basis Definities sectie -> 4.

Elk bestand heeft drie verschillende tijdstempels: de tijd van de laatste datatoegang , de tijd van de laatste datamodificatie , en de tijd waarop de bestandsstatus voor het laatst is gewijzigd. Deze waarden worden geretourneerd in de bestandskenmerkenstructuur struct stat, zoals beschreven in <sys/stat.h> _.

En van :

atime is for Last data access timestamp.
mtime is for Last data modification timestamp.
ctime is for Last file status change timestamp.

De volgende voorbeelden laten het verschil zien tussen de atime , mtime en ctime , deze voorbeelden zijn in GNU/Linux BASH. U kunt stat -x gebruiken in Mac OS X of andere BSD Dist. om een vergelijkbaar uitvoerformaat te zien.

$ stat --version
stat (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ touch test
$ stat test
  File: `test'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:58:28.609223953 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

Wanneer het bestand net is aangemaakt, zijn drie tijdstempels hetzelfde.

  • *

1. atime

Laten we eerst toegang krijgen tot de gegevens van het bestand door ze te lezen (less of vim), uit te printen (cat) of naar een ander bestand te kopiëren (cp).

$ cat test #Nothing will be printed out, since the file is empty
$ stat test
  File: `test'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:59:13.182301069 +0800 <-- atime Changed!
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800
  • *

2. ctime

Laten we nu **de status van het bestand veranderen, door de permissie (chmod) te veranderen of het een andere naam te geven (mv)

$ chmod u+x test
$ stat stet
  File: `test'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0764/-rwxrw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:04:10.178285430 +0800 <-- ctime Changed!
$    
$ mv test testing
$ stat testing
  File: `testing'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0764/-rwxrw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:06:33.342207679 +0800 <-- ctime Changed again!

Merk op dat tot nu toe de inhoud ( data ) van het bestand nog hetzelfde is als toen het gemaakt werd.


3. mtime

Laten we tenslotte de inhoud van het bestand wijzigen door het te bewerken.

$ echo 'Modify the DATA of the file' > testing
$ echo 'Modify the DATA of the file also change the file status' > testing
$ stat testing
  File: `testing'
  Size: 56 Blocks: 8 IO Block: 4096 regular file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0764/-rwxrw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 11:09:48.247345148 +0800 <-- mtime Changed!
Change: 2014-03-16 11:09:48.247345148 +0800 <-- ctime also Changed!
  • *

4. geboortetijd

Merk ook op dat de nieuwere versie van stat (b.v. stat --version 8.13 in Ubuntu 12.04) 4e tijdstempel informatie heeft - de geboortetijd (bestand creatie tijd). Hoewel het nu misschien niet de juiste tijd weergeeft:

$ stat --version
stat (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ stat birth_time
  File: `birth_time'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 805h/2053d Inode: 4073946 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ bingyao) Gid: ( 1000/ bingyao)
Access: 2014-03-16 10:46:48.838718970 +0800
Modify: 2014-03-16 10:46:48.838718970 +0800
Change: 2014-03-16 10:46:48.838718970 +0800
 Birth: -