これは、Linuxコマンドを使用して作成されたファイルです。
touch tmp.txt
さて、日付と時刻を変更しようとしています。だから私がすることは次のとおりです。
ls -l tmp.txt
-rwrx-rx-x 1 yush guest 600 jul 10 16:58 tmp.txt
上記で生成されたファイルの年を変更するには、次のコマンドを使用しますか?
touch -d "1 year ago" tmp.txt
今、
ls -l tmp.txt
-rwxr-xr-x 1 yush guest 600 jul 10 2016 tmp.txt
私の質問は、Linuxを使用して上記のタスクを実行する他のコマンドがありますか?
答え1
アクセスおよび変更時間を明示的に設定します。
# touch -t [[CC]YY]MMDDhhmm[.SS]
例えば
# touch -t 201212101830.55 tmp.txt
# touch -d "2012-10-19 12:12:12.000000000 +0530" tmp.txt
# touch -d "2017-10-19 14:59:12" tmp.txt
他のファイルのタイムスタンプを使用できます。
# touch -r file1.txt file2.txt
答え2
これを行うには、アーカイバを使用できます(きれいでも簡単ではありません)。実際のファイル(ファイルシステム内)のメタデータ(権限モード、所有者、グループ、変更日時など)はinode(たとえば「システムデータ」)に保存されますが、ファイルのメタデータはアーカイブファイルはユーザーデータとしてアーカイブファイルに保存されます。これは通常操作できますが、難易度は異なります。
たとえば、見てみましょう。cpio
他のアーカイブプログラム(例えば、、、、ホームなど)を使用してar
同様の効果を得ることができます。まず、既知の変更日時(再現性のため)を使用してファイルを作成し、そのファイルのみを含むtar
cpioアーカイブを作成します。オプションには以下が含まれます。pax
zip
tmp.txt
cpio
o
ああcpio
出力(アーカイブが記録されることを意味)とc
移植可能(氏互換)形式を使用すると、操作が簡単になります。
$ touch -d "2017年7月12日 00:00" tmp.txt $ls -l tmp.txt -rw-r--r-- 1マイユーザー名マイグループ名 0 7月12日 00:00 tmp.txt $エコtmp.txt -oc> tmp.cpio | 1個
アーカイブを確認してください。
cpio -itv
ファイルを読むことを意味します(私入力)を生成し、Vエルボスティー可能なコンテンツ。
$cpio -itv<tmp.cpio -rw-r--r-- 1マイユーザー名マイグループ名 0 7月12日 00:00 tmp.txt 1個 $cattmp.cpio 070701000595CC000081A4000303E900030201000000015965668000000000000068E70000C36100 0000000000000000000000800000000tmp.txt07070100000000000000000000000000000000000000000000000000000000000000000000000 001000000000000000000000000000000000000000000000000000000B00000000トレーラー! ! !
リバースエンジニアリングを介して(おそらくどこかに文書化されているはずです。確認していません)、アーカイブ内の最初のファイルの変更された日時が1月1日以降のUnix時間(秒数を示す32ビット整数)として保存されていますを発見しました。 、1970 00:00 GMT以降)形式は、文字位置47-54の8桁の16進数です。上記の値を強調表示しました59656680
。 8桁の16進形式のUnix時間であることを知っていると、見つけるのは難しくありません。あなたは得ることができます現在のunix time(decimal) コマンドを使用すると、date +%s
次のように 16 進数でインポートできます。
(date +%s; echo "16op") | dc
今メタデータを修正してください!目的のエディタを使用してアーカイブを編集します。
$vi tmp.cpio 0707010005807C000081A4000303E900030201000000015965668000000000000068E70000C36100 0000000000000000000000800000000tmp.txt^@^@^@0707010000000000000000000000000000000 0000000010000000000000000000000000000000000000000000000000000B00000000トレーラー !!!^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@ ~ ~ ~ ~ ~ "tmp.cpio" [最後の行不完全] 1行、512文字
何に変えたいかを調べてください。あなたの質問で時計を1年前に戻すと言われました。通常の365日1年の秒数は365×24×60×60 = 31536000(10進数)= 1E13380(16進数)です。したがって、59656680-1E13380を除くと、結果は57843300です。ファイルから変更します。
0707010005807C000081A4000303E900030201000000015784330000000000000068E70000C36100 0000000000000000000000800000000tmp.txt^@^@^@0707010000000000000000000000000000000 0000000010000000000000000000000000000000000000000000000000000B00000000トレーラー !!!^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@ ~ ~ ~ ~ ~ "tmp.cpio" [最後の行不完全] 1行、512文字
保存と終了。変更を確認してください。
$cattmp.cpio 070701000595CC000081A4000303E900030201000000015784330000000000000068E70000C36100 0000000000000000000000800000000tmp.txt0707010000000000000000000000000000000000000 001000000000000000000000000000000000000000000000000000000B00000000トレーラー! ! ! $cpio -itv<tmp.cpio -rw-r--r-- 1マイユーザー名マイグループ名 2012年7月0日 2016年tmp.txt 1個 $cpio -imuv<tmp.cpio tmp.txt 1個 $ls -l tmp.txt -rw-r--r-- 1マイユーザー名マイグループ名 2012年7月0日 2016年tmp.txt
見て、ファイルの変更日時を変更しました。 (アーカイブを読み取らずにファイルを抽出
cpio -i
しません。復元t
-m
米酸化
-u
時間あなたnconditional(このオプションがないと、
cpio
新しいファイルは通常どおり古いファイルで上書きされません。)-v
Verbose(表示ファイル名)。 )
メモ:
- などのコマンドを使用すると、人間が読める日付のUnix日付(秒など)を取得できます
date -d "Jan 1, 2001" +%s
。前述の(デスクトップ電卓)トリックを使用してdc
これを16進数に変換します。 - cpio アーカイブ形式にはヌルバイトが含まれています。
vi
( )の現在のバージョンはvim
これを尊重しているようです(つまり、それを容認し、単独で置くこと)。以前のバージョンを含む他の編集者は、vi
そのファイルを破損したり(null値を削除して)編集を拒否したりすることがあります。 vi
改行以外の文字(「[不完全な最後の行]」)で終わるcpioアーカイブが検出されました。ファイルを保存するときに改行文字を追加します。他のアーカイブプログラム(除くcpio
)はこれを改ざんとして検出し、変更されたアーカイブを拒否することがあります。- 他のアーカイブ形式では、メタデータ(変更日時など)をバイナリ形式で保存したり、チェックサムを持つことができます。これらのファイルの編集は、私がここで説明するよりも難しいかもしれません。