名前の変更はファイルの変更またはアクセス時間に影響しますか?何がいつ変更されるかについてのリストはどこにありますか?
名前を変更すると、変更時刻が更新されます。
$ 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: -
アクセス時間は、ファイルの内容を読み取るときに更新されます。実際にファイルを更新するときに変更します(変更のために開くだけでは、変更時間を変更するのに十分ではありません)。
ファイルの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に当てはまるようです。