「touch -a」がctimeも設定するのはなぜですか?

「touch -a」がctimeも設定するのはなぜですか?

coreutils-8.4-37.el6.x86_64のtouch(1)ですか、それとも私の脳が壊れていますか?

$ touch abc
$ LANG=C stat abc
  File: `abc'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd04h/64772d    Inode: 10485773    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (3060399/ nodakai)   Gid: (  418/   quant)
Access: 2016-10-14 18:42:06.189751847 +0800
Modify: 2016-10-14 18:42:06.189751847 +0800
Change: 2016-10-14 18:42:06.189751847 +0800
$ touch -a abc
$ LANG=C stat abc
  File: `abc'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd04h/64772d    Inode: 10485773    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (3060399/ nodakai)   Gid: (  418/   quant)
Access: 2016-10-14 18:42:17.374235446 +0800
Modify: 2016-10-14 18:42:06.189751847 +0800
Change: 2016-10-14 18:42:17.374235446 +0800
$ touch --help | grep 'access time'
  -a                     change only the access time

ご覧のとおり、atimeだけでなくctimeも更新されますtouch -a! ? ! ?

違いがある場合、ファイルシステムはLVM経由のext4です。

答え1

touchファイルアクセスと変更時間を変更するように指定されました。変更時間の変更はファイルメタデータ変更の副作用であり、touchこれを制御することはできません。futimens()そしてutimensat())機能が使用されましたtouch

-a-mこの場合は理解できます。デフォルトではtouchアクセス時間と変更時間が変更されます(システムは変更時間を更新します)。使用すると-aアクセス時間のみが変更され、使用されると-m変更時間のみが変更されます。

現在時刻以外の時刻を指定すると差が出ます。接続および/または変更時間は指定した値に変更されますが、変更時間は現在の時間に更新されます。

関連情報