ctimeはどのように変化しますか?


8

ファイルのctimeタイムスタンプがいつ変更されるかを正確に理解しようとしています。多くの場所(たとえば、ここで受け入れられている回答)では、ファイル属性を変更するとctimeも変更されることが示唆されています。しかし、これは少なくとも私のUbuntu 12.04ではそうではないようです(はい、わかっています。少し古い...):

cat file.txt > /dev/null

atimeを変更するため、ファイルのiノード内のファイル属性は変更されますが、ctimeは変更されません。

他のソース(例:hereおよびhere)は、ファイル属性の一部の操作のみが実際にctimeを変更することを示唆していますが、正確なリストは提供されていません。

ctimeを変更する操作の正確な参照はどこにありますか?


問題はに関連しているのかもしれませcatんが、で調べましたtouchか?
Mahdi

回答:


8

Unixシステムには3つのタイムスタンプがあります。

  • atime: アクセス時間

    このタイムスタンプは、ファイルへの最後のアクセス日時を示します。読み取りアクセスのみが含まれます。

  • ctime:時間を変更

    このタイムスタンプは、ファイル属性(inode情報)が最後に変更された日時を示します。これには、所有権や権限などが含まれますが、コンテンツの変更もこのタイムスタンプの更新をトリガーします。

    atimeの変更はctimeの更新をトリガーしないため、例外のように見えることに注意してください。これはおそらく、atime更新をトリガーするのに十分な単純な読み取りアクセスでは、ファイル属性に関連する変更が行われないためです。また、ctimeの主な目的の1つは、バックアップツールがファイルが変更されたかどうかを判断できるようにすることです。誰かがファイルを読んだので役に立たないので、atimeはそのようなツールや変更されたatimeを更新するためだけにバックアップを更新するための無関係な情報です。

    よくわかりませんが、この動作(atimeを変更してもctimeは更新されない)はrelatime、メモリ内のパフォーマンス上の理由から、inodeのatime更新をキャッシュして遅延させる、基礎となるファイルシステムのマウントオプション(など)が原因であると考える人もいますまた、特定の条件下でのみ、それらをディスク上の実際のiノード(ctime更新のトリガー)に適用します。
    @kosが試してみましたが、 `strictatime``オプションを使用してFSをマウントした場合でも、atimeが変更されてもctimeは更新されないようです。

  • mtime:変更時間

    このタイムスタンプは、ファイルのコンテンツが最後に変更された日時を示します。


したがって、ファイル属性が変更されていないためcat FILENAMEatimeのみを使用した単純な読み取りアクセスでは、ctimeは変更されません。変更されたatimeはカウントされません。


それがまさにポイントです。なぜ atimeの変更がカウントされないのですか?それはファイル属性ではありませんか?
VeryHardCoder 2016年

@VeryHardCoderその時点で私の答えを詳しく説明しようとし、いくつかの説明を追加しました。
バイトコマンダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.