ファイルのアクセス、変更、および変更日を過去と同じ日付に変更します。

ファイルのアクセス、変更、および変更日を過去と同じ日付に変更します。

私が開発しているユーティリティの場合、ディレクトリ内のファイルに関連付けられている3つの名前付き日付をすべて過去の特定の日付に設定できると便利です。

私はこれを使用してtouchアクセスと変更の日付を設定できることを知っていますが、3つはすべて同じでなければなりません(参照ポイント/日付で使用するには)。

これを行う方法はありますか(rootアクセス可能)

編集する:

  1. 私はこれを見つけました:http://blog.commandlinekungfu.com/2010/02/episode-80-time-bandits.html推奨事項(ext2/3/4のみ):

    # debugfs -w -R 'set_inode_field /pathtofile ctime 200901010101' ファイルデバイス

ここで、「200901010101」は日付/時刻の例です。https://stackoverflow.com/a/5518031/15161上記で必要な「ファイルデバイス」を見つけます。

df /pathtofile | awk 'NR == 2 {print $1}'

私はテストファイルでこれを試しましたが、debugfsの呼び出しに時間がかかりすぎてCtrl-Cを押しました。 (それでこれがうまくいくかどうかはわかりません…)

  1. もう1つのアイデアは、システム日付を自分が希望する過去の日付に設定する仮想マシンを使用することですが、設定方法がわかりません。

  2. これは(2)に関連していますが、VMを使用せずにhttp://www.shellhacks.com/en/Faking-a-Files-Access-Modify-and-Change-TimeStamps-in-Linux:

可能な回避策として、システム時間を適用したいctimeに設定し、ファイルをタッチしてシステム時間を復元できます。

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

しかし、これがどれほど安全で危険なのかはわかりません。

答え1

root権限を必要とする「トリック」がなければ、ctimeを変更することはできません。バラよりファイルの「変更された」日付を変更する方法は?

テスト中なので、仮想マシンのアプローチを使いましょう。仮想マシンでプログラムを実行します。仮想マシン内のシステム日付を希望の値に設定できます(NTPを設定しないことを忘れないでください)。

または、システム全体ではなくアプリケーションをテストしている場合は、次のことができますLD_PRELOAD同様の例)またはptrace(より難しいが静的にリンクされたバイナリでも機能します)。これはすべてのシナリオには適しておらず、実際にテストしている潜在的なバグの種類によって異なります。libfaketimeプログラムを実行し、別の時間に実行されたように見えるようにすることができます。また、偽のタイムスタンプを覚えているので、追加の下位レベルのコードを書かなくてもプログラムを利用できます。

関連情報