web-dev-qa-db-ja.com

ファイルの変更または変更として何がカウントされますか?

名前の変更はファイルの変更またはアクセス時間に影響しますか?何がいつ変更されるかについてのリストはどこにありますか?

15
user54385

名前を変更すると、変更時刻が更新されます。

$ mkdir tmp
$ cd tmp

$ echo abc > a
$ stat a
  File: `a'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000 /  zelda   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:06:58.981107444 +0100
 Birth: -

$ mv a b
$ stat b
  File: `b'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  zelda)   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:07:14.893238472 +0100
 Birth: -

アクセス時間は、ファイルの内容を読み取るときに更新されます。実際にファイルを更新するときに変更します(変更のために開くだけでは、変更時間を変更するのに十分ではありません)。

8
Zelda

ファイルのmtimeに影響する変更は、ファイルのデータの変更です。0以外のバイト数の書き込み、またはファイルを変更することになるトランケーションです。ファイルを作成すると、mtimeも現在の日付に設定されます。書き込み用にファイルを開いただけでは、ファイルが作成または切り捨てられていないと想定して、mtimeには影響しません。

ファイルからの読み取り(ゼロ以外のバイト数が読み取られた場合)またはファイルの実行により、atimeが現在の時刻に設定されます。読み取り用にファイルを開いただけでは、atimeに影響はありません。 Linuxでは、これは now がデフォルトでほとんどの状況で無効になっています。 atimeマウントオプションはatime更新を復元し、noatimeマウントオプションはそれらを完全に無効にします。

プログラムはファイルのmtimeとatimeを変更できます。これを行うための基本的なコマンドはtouchです。一部のファイルコピープログラムは、コピーを元と同じmtimeに設定します。たとえば、cp -pまたはrsync -t

ファイルのctimeに影響を与える変更は、ファイルのメタデータの変更です:権限、所有者、時間、リンク数など。ファイルの名前を変更すると、ctimeも更新されます。ファイルデータの変更もctimeに影響しますが、ファイルからの読み取りは、atimeを変更してもctimeを変更しません。現在時刻に設定する以外の方法でctimeを変更することはできません(rootでも制約がありますが、rootは最初にシステム時刻を変更するか、ファイルシステムを含むパーティションに直接アクセスすることにより、間接的にctimeを設定できます)。

他の回答では言及されていない追加の経験的観察:

O_TRUNCで書き込み用にファイルを開くと、ファイルが元々空だった場合でも、mtimeが変更されます。

これは、少なくともLinux 3.10のext3に当てはまるようです。

1