ファイルのタイムスタンプコピーの完了像は参照ファイルのatime・mtimeを記録し、touch –referenceで対象へ複製後に内容ハッシュ不変を確認する状態です。この記事のcodeは小さなfixture向けで、Linuxでファイルのタイムスタンプを効率的にコピーする方法の実環境では保存済みbaselineと照合してから承認します。
ファイルのタイムスタンプコピーの対象境界は「GNU touchによるアクセス・更新日時の参照コピー。ctimeや作成日時は複製対象ではない」です。ファイルのタイムスタンプコピーで範囲外の候補、実在しないpath、想定外の実行identityが一つでもあれば開始せず、sha256sumの取得段階へ戻ります。
ファイルのタイムスタンプコピー|参照ファイルのatime・mtimeを記録し、touch –re…|accept
ファイルのタイムスタンプコピーではsha256sumのbaseline、sha256sumの再取得、touchの復旧材料を同じ対象へ結べた時だけ完了です。ファイルのタイムスタンプコピーの表示上の成功と利用側の結果が違う場合は後者を優先し、承認記録を閉じません。
| 確認対象 | Linuxファイルのタイムスタンプコピー |
| 適用範囲 | GNU touchによるアクセス・更新日時の参照コピー。ctimeや作成日時は複製対象ではない |
| 成功条件 | 参照ファイルのatime・mtimeを記録し、touch –referenceで対象へ複製後に内容ハッシュ不変を確認する |
| 中止条件 | 参照元と対象を逆にすると基準側の時刻を変えてしまう |
| 復旧基準 | 保存した変更前状態へ戻し、同じ検証を再実行できること |
ファイルのタイムスタンプコピーの対象boundary|GNU touchによるアクセス・更新日時の参照コピー。ctimeや…
ファイルのタイムスタンプコピーを開始する前の停止条件は「参照元と対象を逆にすると基準側の時刻を変えてしまう」です。ファイルのタイムスタンプコピーの対象数、権限、同時更新の有無を読み合わせ、この兆候を除外できない場合は変更commandを実行しません。
- 対象boundary:GNU touchによるアクセス・更新日時の参照コピー。ctimeや作成日時は複製対象ではない
- 変更前証拠:sha256sumのstdout・stderr・終了状態と取得時刻
- 承認前の禁止条件:参照元と対象を逆にすると基準側の時刻を変えてしまう
- 復旧input:touchが参照する保存物を実在確認する
ファイルのタイムスタンプコピー × sha256sum|現状値を証拠化する
ファイルのタイムスタンプコピーではsha256sumを変更前に実行し、対象名、内部識別子、件数、主要属性を作業記録へ保存します。ファイルのタイムスタンプコピーの空stdoutを正常値へ変換せず、権限不足と対象なしを別statusにします。
reference=/srv/lab/reference.txt
target=/srv/lab/target.txt
state=/srv/lab/target.txt.timestamps.before
test ! -e "$state" || { printf 'state exists: %s\n' "$state" >&2; exit 1; }
printf 'atime=%s\nmtime=%s\n' "$(stat --format='%X' -- "$target")" "$(stat --format='%Y' -- "$target")" > "$state"
stat --format='ref atime=%x mtime=%y ctime=%z' -- "$reference"
stat --format='dst atime=%x mtime=%y ctime=%z' -- "$target"
sha256sum -- "$target"
ファイルのタイムスタンプコピーのこの出力は、後続のtouchへ渡す入力の存在確認です。ファイルのタイムスタンプコピーの取得中に対象が変わったrunは破棄し、同じidentityについてbaselineを採り直します。
ファイルのタイムスタンプコピーの判定field|–reference、ctime、SHA-256
| –reference | Linuxファイルのタイムスタンプコピーでは日付文字列を再入力せず参照ファイルのatimeとmtimeを使う |
| ctime | Linuxファイルのタイムスタンプコピーではメタデータ変更で現在時刻へ進み、参照ファイルと同じ値にはならない |
| SHA-256 | Linuxファイルのタイムスタンプコピーでは内容がタイムスタンプ操作で変化していないことを確かめる |
ファイルのタイムスタンプコピーで比較するfieldは「–reference、ctime、SHA-256」です。ファイルのタイムスタンプコピーを単独の表示名や時刻だけで同一と決めず、対象identityと適用範囲を一行のrecordへ束ねます。
ファイルのタイムスタンプコピーの限定操作|touchとGNU touchによるアクセス・更新日時の参…
ファイルのタイムスタンプコピーのtouch例は検証用の一対象へ限定します。ファイルのタイムスタンプコピーの入力値、上書き先、previewまたは安全optionを読み直し、backupが参照できない状態では承認済み実行へ進みません。
touch --reference=/srv/lab/reference.txt /srv/lab/target.txt
ファイルのタイムスタンプコピーへtouchを実行した直後は別対象へ連続適用せず、処理件数とwarningを保存します。ファイルのタイムスタンプコピーで部分成功があれば成功分と未処理分を分け、sha256sumの確認を先に行います。
ファイルのタイムスタンプコピーのacceptance|sha256sumと参照ファイルのatime・mtimeを記録し、touc…
ファイルのタイムスタンプコピーではsha256sumを使い、変更commandの変数ではなく保存後の現状を独立して読み直します。ファイルのタイムスタンプコピーの主要値、件数、利用側の代表操作がすべて一致した場合だけacceptします。
stat --format='dst atime=%x mtime=%y ctime=%z' /srv/lab/target.txt
sha256sum /srv/lab/target.txt
- 主要判定:参照ファイルのatime・mtimeを記録し、touch –referenceで対象へ複製後に内容ハッシュ不変を確認する
- error判定:stderrまたはaccess deniedを空結果へ丸めない
- 利用側確認:高精度時刻は宛先ファイルシステムの分解能で丸められる場合があるという条件を除外する
- recovery確認:touchの入力と対象identityがbaselineに一致する
ファイルのタイムスタンプコピーのstop条件|参照元と対象を逆にすると基準側の時刻を変えてしまう
ファイルのタイムスタンプコピー|停止:参照元と対象を逆にすると基準側の時刻を変えてしまう
ファイルのタイムスタンプコピーで停止する兆候は「参照元と対象を逆にすると基準側の時刻を変えてしまう」です。ファイルのタイムスタンプコピーを再実行回数で解決せず、対象選択と前提条件を修正して新しいbaselineから再開します。
ファイルのタイムスタンプコピー|保留:シンボリックリンクではリンク自体か参照先かの扱いをオプションで確認する
ファイルのタイムスタンプコピーで「シンボリックリンクではリンク自体か参照先かの扱いをオプションで確認する」を検出した結果は保留にします。ファイルのタイムスタンプコピーの現在状態と残存物を保存し、影響範囲を特定してから復旧か再試行かを選びます。
ファイルのタイムスタンプコピー|再設計:高精度時刻は宛先ファイルシステムの分解能で丸められる場合がある
ファイルのタイムスタンプコピーの設計を戻す条件は「高精度時刻は宛先ファイルシステムの分解能で丸められる場合がある」です。ファイルのタイムスタンプコピーとは別層の権限・format・運用要件が原因なら、optionを足さず担当workflowへ引き渡します。
ファイルのタイムスタンプコピーのrecovery|touchで保存状態へ戻す|ファイルのタイムスタンプコピー
ファイルのタイムスタンプコピーではtouchが参照するbackup、旧値、または候補fileを変更前に作り、hash・権限・対象identityを確認します。ファイルのタイムスタンプコピーの復旧開始時にも現在状態を追加保存し、上書き対象を一件へ絞ります。
target=/srv/lab/target.txt
state=/srv/lab/target.txt.timestamps.before
old_atime=$(sed -n 's/^atime=//p' -- "$state")
old_mtime=$(sed -n 's/^mtime=//p' -- "$state")
case "$old_atime:$old_mtime" in (*[!0-9:]*|:*) echo 'invalid timestamp baseline' >&2; exit 1;; esac
touch --access --date="@$old_atime" -- "$target"
touch --modify --date="@$old_mtime" -- "$target"
stat --format='restored atime=%x mtime=%y ctime=%z' -- "$target"
ファイルのタイムスタンプコピーでtouchを終えた後は、baselineとの一致だけでなく利用側の代表操作も再試験します。ファイルのタイムスタンプコピーの復旧中に新しいerrorが出たらcommandを止め、残った状態を保全してownerへ渡します。
ファイルのタイムスタンプコピーの運用例は「検証用コピーへ本番ファイルと同じmtimeを与える際、参照・対象の絶対パスを二人で確認し、時刻一致と対象ハッシュ不変を記録する運用」です。ファイルのタイムスタンプコピーの対象固定、承認番号、変更前後の比較、復旧可能性を一つのrun recordへまとめます。
ファイルのタイムスタンプコピーをautomationへ載せる場合は、重複実行を防ぐlock、開始終了時刻、処理件数、sha256sumの判定を保存します。ファイルのタイムスタンプコピーのlogから秘密値を除外し、失敗runを前回値で上書きしません。
ファイルのタイムスタンプコピーの判断FAQ|cp -pでも時刻をコピーできますか
ファイルのタイムスタンプコピー|cp -pでも時刻をコピーできますか
結論:内容コピーも伴うため、既存内容を保ったまま時刻だけ合わせる用途はtouch –referenceが明確
ファイルのタイムスタンプコピー|ctimeも同じにできますか
選択基準:任意設定できず、変更した事実に応じて更新される
ファイルのタイムスタンプコピー|atimeだけ参照コピーできますか
運用上の答え:–accessと–referenceを組み合わせ、mtimeが不変か検証する
ファイルのタイムスタンプコピーの採用条件は、上記の独立確認が通り、停止条件が一件も残らず、touchの復旧材料が読めることです。ファイルのタイムスタンプコピーで対象identityが途中変化したrunは破棄し、保存済みbaselineから再収集します。
atimeとmtimeを別々のbaselineとして復旧
touch –referenceはatimeとmtimeの両方をコピーします。復旧でも二つを別fieldで読み、–accessと–modifyを分けて元のepoch秒へ戻します。
一つの固定日時を両fieldへ設定すると元の差が失われます。ctimeは復旧不能なので、変更履歴として残ることも明記します。
公式情報・参考資料
ファイルのタイムスタンプコピーの構文と制約は、本文末の一次資料と対象環境のlocal helpで照合します。ファイルのタイムスタンプコピーの記事確認日は2026年7月17日で、版が異なる場合はoption、default、終了statusの差を先に確認してください。

コメント