名前の変更は、ファイルの変更またはアクセス時間に影響しますか?何が何時に変化するかのリストはどこにありますか?
名前の変更は、ファイルの変更またはアクセス時間に影響しますか?何が何時に変化するかのリストはどこにありますか?
回答:
名前を変更すると、変更時間が更新されます。
$ 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: -
ファイルの内容を読み取ると、アクセス時間が更新されます。実際にファイルを更新するときに変更します(変更のために開くだけでは変更時間を変更できません)。
cp
とを使用してmv
おりvi
、編集に使用しています。他のエディター、またはデスクトップはタスクを異なる方法で処理し、より多くのタイムスタンプが更新される場合があります。
mv
ファイルのmtimeに影響を与える変更は、ファイルのデータの変更です。つまり、ゼロ以外の量のバイトの書き込み、またはファイルを変更することになる切り捨てです。ファイルを作成すると、mtimeも現在の日付に設定されます。書き込み用にファイルを開いても、ファイルが作成または切り捨てられていないと仮定しても、mtimeには影響しません。
ファイルからの読み取り(ゼロ以外のバイト数が読み取られた場合)またはファイルの実行により、atimeが現在の時刻に設定されます。読み取り用にファイルを開くだけでは、atimeには影響しません。Linuxでは、これをされ、今ほとんどの状況では、デフォルトでは無効。atime
一方、マウントオプションのリストアは、更新をatimeのnoatime
マウントオプションは、それらを完全に無効にします。
プログラムは、ファイルのmtimeとatimeを変更できます。これを行う基本的なコマンドはtouch
です。一部のファイルコピープログラムは、コピーを元のファイルと同じmtimeに設定します(例:cp -p
または)rsync -t
。
ファイルのctimeに影響する変更は、ファイルのメタデータの変更です:許可、所有者、時間、リンク数など。ファイルの名前を変更すると、ctimeも更新されます。ファイルデータの変更もctimeに影響しますが、ファイルからの読み取りは、atimeを変更してもctimeを変更しません。ctimeを現在の時刻に設定する以外の方法で変更することは不可能です(ルートにも制約がありますが、ルートは最初にシステム時刻を変更するか、ファイルシステムを含むパーティションに直接アクセスすることで間接的にctimeを設定できます)。
他の回答で言及されていない追加の経験的観察:
書き込み用にファイルを開くと、ファイルO_TRUNC
が元々空だった場合でもmtime が変更されます。
これは、少なくともLinux 3.10のext3に当てはまるようです。