ファイルの「変更された」日付を変更する方法は?

ファイルの「変更された」日付を変更する方法は?

ファイルの「変更された」日付を変更する方法は? :を使用すると動作touchしません。

$touch -t 9901010000 統計テスト;
  ファイル:「テスト」
  サイズ: 0 ブロック: 0 IO ブロック: 4096 一般空のファイル
デバイス: fe01h/65025d Inode: 11279017 リンク: 1
アクセス: (0644/-rw-r--r--) Uid: (1000/ x) Gid: (1000/ x)
訪問: 1999-01-01 00:00:00.000000000 +0100
修正: 1999-01-01 00:00:00.000000000 +0100
変更:2012-04-08 19:26:56.061614473+0200
 生まれます:-

答え1

一般的な方法では、ctimeを変更することはできません。これは意図的に設計されています。ファイルのメタデータを変更すると、ctimeは常に現在の値に更新され、他のctimeを強制する方法はありません。ファイルのctimeを変更するには、次のいずれかを実行する必要があります。

  • システム時間を適用したいctimeに設定し、ファイルをタッチしてシステム時間をリセットします。
  • カーネルを変更し、インターフェイスを追加してctimeを変更します。
  • ディスクイメージに直接アクセスし(使用するなど)、debugfsディスクのビットを調整します(ファイルシステムをマウントするときはこれを行わないでください)。

答え2

extXについてjw013が指摘した関連SOの質問に対する答えはありますか?マウント解除されたディスク:

# Update ctime
debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1

# Drop vm cache so ctime update is reflected
echo 2 > /proc/sys/vm/drop_caches

答え3

$NOW=$(date) && date -s "2030-08-15 21:30:11" && touch file.txt && date -s "$NOW"

https://www.shellhacks.com/fake-file-access-modify-change-timestamps-linux

答え4

メタデータが変更されると、ファイルのctimeが更新されます。

$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py
$ stat -c %z x.py
2010-03-26 11:57:56.237068175 -0400
$ chown ignacio x.py
$ stat -c %z x.py
2012-04-08 15:31:33.682383575 -0400
$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py

関連情報