utimes
、futimes
、futimens
などを使用して、ファイルのアクセスおよび変更のタイムスタンプを設定できます。
変更時刻は、ファイルデータが最後に変更された時刻です。同様に、「ctime」または変更時刻は、権限などのファイルの属性が最後に変更された時刻です。 (Linux/POSIXは、すでに説明したmtimeとctime、および「atime」またはアクセス時間の3つのタイムスタンプを維持します。)
変更タイムスタンプを設定する機能はありますか? (「変更」が属性変更または「ctime」である場合、not変更時間「mtime」。)(変更タイムスタンプを変更したいという周期的な性質を理解していますが、アーカイブソフトウェアを考えます-そうします正確にファイルを復元できるようにしてください。)
タイムスタンプを作成するための関数はありますか? (私は、それに気付いた ext2
はこれをサポートしていませんが、Linuxがサポートしているファイルシステムについては、サポートしているかどうか疑問に思いました。)
それが不可能な場合、それができない理由は何ですか?
ext2/3
の場合、場合によってはext4
の場合、ディスクにあるファイル/tmp/foo
のdebugfs
を変更する場合は、ctime
ツールを使用してこれを行うことができます。 /dev/sda1
ctimeを201001010101
に設定します。これは、2010年1月1日、時刻01:01を意味します。
警告:この操作の前にディスクをアンマウントする必要があります
# 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
Command Line Kung Fu
ブログから取得した情報。
私も同様の問題を抱えていて、ここに答えを書きました。
https://stackoverflow.com/a/17066309/39104
基本的に2つのオプションがあります。
http://lists.gnu.org/archive/html/coreutils/2010-08/msg00010.html ctimeは偽造できません(少なくとも偽造可能を意図したものではありません):
POSIXは、atimeとmtimeは、syscallsのutimensat()ファミリーを介して任意の時間にユーザー設定可能であると述べていますが、ctimemustは、ファイルのメタデータまたはコンテンツを変更するアクション。
テスト/デバッグのためにファイルのctimeを変更する必要がある場合は、 bindfs が役立つ場合があります。これは、あるディレクトリを別の場所にマウントし、ファイル属性に対して何らかの変換を行うことができるFuseファイルシステムです。オプション--ctime-from-mtime
を使用すると、各ファイルのctimeはそのmtimeと同じになり、touch -t
で設定できます。
1) change System time
2) copy paste a file on another location.
windows 7で試してみましたが、3つのタイムスタンプすべてを変更することに成功しました。 Linuxのstatコマンドは、3つのタイムスタンプすべてが変更されていることを示しています。