名前を変更すると、ファイルの変更やアクセス時間に影響しますか?いつ状況が変わったのかリストがありますか?
答え1
ファイルの mtime に影響を与える修正は、ファイルデータの変更です。つまり、ゼロ以外のバイト数を書き込むか、変更された最終ファイルが切り捨てられます。ファイルを生成すると、mtimeも現在の日付に設定されます。ファイルが作成または切り捨てられないと仮定すると、単に書き込み用にファイルを開くことはmtimeには影響しません。
ファイルから読み取る(ゼロ以外のバイト数を読み取った場合)、ファイルを実行すると、atimeは現在時刻に設定されます。読み取るためにファイルを開くだけでは時間に影響しません。 Linuxではこれです今ほとんどの場合、デフォルトでは無効になっています。マウントatime
オプションは時間更新を復元し、noatime
マウントオプションは更新を完全に無効にします。
プログラムはファイルのmtimeとatimeを変更できます。これを行うための基本的なコマンドはですtouch
。いくつかのファイルコピープログラムcp -p
またはrsync -t
。
ファイルのctimeに影響を与える変更は、ファイルのメタデータ(権限、所有者、時間、リンク数など)に対する変更です。ファイル名を変更すると、ctimeも更新されます。ファイルデータを変更するとctimeにも影響しますが、atimeが変更されてもファイルから読み込むことはctimeを変更しません。 ctimeを現在の時刻に設定する以外に他の方法では変更することはできません(ルートも制限されていますが、ルートは最初にシステム時間を変更するか、ファイルシステムを含むパーティションに直接アクセスして間接的にctimeを設定できます)。
答え2
名前を変更すると、変更時間が更新されます。
$ 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: -
ファイルの内容を読み取るとアクセス時間が更新されます。ファイルが実際に更新されたときに変更します(変更のために開いたままにしておくだけでは変更時間を変更できません)。
答え3
他の回答に記載されていない追加の経験的観察:
書き込み用にファイルを開くO_TRUNC
と、ファイルが最初に空であっても mtime が変更されます。
少なくともLinux 3.10のext3ではそうです。