Linux `stat` Command – Difference Between Modify and Change

command linefilestimestamps

The stat command's manual page says:

   %x     Time of last access
   %y     Time of last modification
   %z     Time of last change

I cannot understand the difference between modify and change. I understand the words are synonyms (English is not my native language), but their output is different.

I tried the following command

stat --printf="Change %z\nAccess %x\nModify %y\n" p.txt

Now when I open p.txt, access time is changed, I go into insert mode, edit the file, modify and change time remains same.

Change 2010-10-06 12:48:39.286252389 +0500
Access 2010-10-06 12:49:14.962243456 +0500
Modify 2010-10-06 12:48:39.234498878 +0500

When I write the changes to file :w, modify and change, both change but give different values.

Change 2010-10-06 12:51:21.949082169 +0500
Access 2010-10-06 12:51:21.908246082 +0500
Modify 2010-10-06 12:51:21.908246082 +0500

So what are the meanings of "modify" and "change" in this context? That is, time of modification and change give time of which events?

Thanks

Best Answer

This has already been answered in this question, which I quote (original text by echox):

There are 3 kind of "timestamps":

  • Access - the last time the file was read
  • Modify - the last time the file was modified (content has been modified)
  • Change - the last time meta data of the file was changed (e.g. permissions)

This post on StackOverflow explains the difference among the three different times from a programming interface point of view.

Related Question