ファイルのタイムスタンプ、変更時刻、作成時刻


105

私はちょうどそれを知っているls -tし、ls -fディレクトリ下のファイルとサブディレクトリの異なるソートを与えます。

  • ファイルのタイムスタンプ、変更時間、作成時間の違いは何ですか?
  • これらの種類の情報をコマンドで取得および変更する方法は?
  • ファイルは他のファイルよりも「新しい」と言う情報はどのようなものですか?
  • どのような情報を変更しても、ファイルは変わりませんか?

たとえば、誰かが書いているのを見ました:

デフォルトでは、rsyncプログラムは、ファイルのサイズとタイムスタンプが異なるかどうかのみを確認します。どのファイルが新しいかは関係ありません。異なる場合は上書きされます。'--update'フラグをrsyncに渡すと、ソースのファイルよりも新しいファイルが同じタイプのファイルである場合にのみ、宛先のファイルをスキップします。つまり、たとえば、ソースファイルが通常のファイルで、宛先がシンボリックリンクである場合、宛先ファイルはタイムスタンプに関係なく上書きされます。

ちなみに、ここでのファイルタイプは、pdf、jpg、htm、txtなどのタイプではなく、通常のファイルとsimlinkのみを意味しますか?


回答:


138

3種類の「タイムスタンプ」があります。

  • アクセス-ファイルが最後に読み取られた時間
  • 変更-ファイルが最後に変更された(コンテンツが変更された)
  • 変更-ファイルのメタデータが最後に変更された時刻(許可など)

この情報を表示するstatには、coreutilsの一部を使用できます。

stat デバイス、iノード、リンクなどの情報も表示されます。

この種の情報は、ファイルシステムとマウントオプションに大きく依存することに注意してください。たとえば、noatimeオプションでパーティションをマウントすると、アクセス情報は書き込まれません。

タイムスタンプを変更するユーティリティはそうでしょうtouch。変更するタイムスタンプを決定するいくつかの引数があり(たとえば、アクセス時間の-a、変更時間の-m)、指定された新しいタイムスタンプの解析に影響を与えます。詳細man touchを参照してください。

touchcp -u「コピー元ファイルがコピー先ファイルよりも新しい場合、またはコピー先ファイルが見つからない場合にのみコピーする」)または空のマーカーファイルを作成する場合に便利です。


1
ありがとう!rsyncコマンドの場合、「どのファイルが新しいかは関係ありません」、どの種類のタイムスタンプが「新しい」という意味ですか。また、サイドノートでは、rsyncが気にするファイルタイプは、pdf、jpg、htm、txtなどのタイプではなく、通常のファイルとsimlinkのみを意味しますか?
ティム

2
一般的に、ファイルの時刻への参照は「変更された」タイムスタンプです。たとえば、から見たものls -l。また、ファイルタイプは、ファイルとシンボリックリンク(またはディレクトリやデバイスなどの他のタイプのファイル)を指します。 ファイル内のデータの種類(テキストとjpegなど)ではありません
セスL

2
@Timそのコンテキストでは、変更されたタイムスタンプです。rsyncは、ファイルをバックアップする必要があるかどうかを決定するときに、ソースファイルが既存のバックアップ(バックアッププログラムで一般的)よりも最近変更されたかどうかを確認しないと言っています。ファイルが異なるサイズまたは異なる変更時間を持っているかどうかを確認し、そうであればバックアップします
Michael Mrozek

1
そして、ファイルが最初に作成された時期を知るにはどうすればよいですか?この情報はどこかで維持されていますか、または更新で失われていますか?つまり、ファイルがどれくらいの期間存在していたかということです。
xyz

1
STAT(2)それらのタイムスタンプが変更されたときのmanページには、より詳細に説明します。
クリスチャン・シウピトゥ14

35

echoxの答えは有効ですが、ファイル作成時間に関する情報を追加したいと思います。

ファイルシステムのサポート

一部のファイルシステムは、作成時間(または誕生時間)に関するiノードの追加エントリをサポートします。ext4はこの機能サポートし、JFSとBTRFSサポートしていることを知っています。

ただし、この追加情報を読むためのほとんどのツールとAPIはまだ更新されていません。たとえそれがそこにあっても、アクセスできません。

たとえば、Ubuntu 12.04 LTSでは、今日作成したファイルについて次のようになります。

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

新しいstat関数にはbirthフィールドがありますが、出力は正しくないようです。そして、debugfsを介して情報を取得できます(ext4ファイルシステムにいるときのcrtime)。

statxサポート

今そこにあるカーネル4.11新しいstatxシステムコールがあるため、より良いY2038のサポートやネットワーク・ファイル・システムの上に、それはまたのようないくつかの余分な機能をもたらすbtimeか、出生時間(作成時間)アクセスを。ext4のサポートは、同じカーネルリリース4.11である必要があります。

それ以降のカーネルリリースでは、この新しいシステムコールにサポートを追加するパッチがあります。たとえば、カーネル4.13のBTRFSとF2FS、4.14のSMB3、4.15のGFS2、4.16のNFSなどです。

近日公開予定のglibcは、このインターフェースを照会する関数呼び出しを提供します(glibc statxサポートに関するPhoronixニュースを参照)。そのため、ユーザー空間でのこの機能のサポートはすぐに期待できます。


mtimeのように、Windowsからのファイル(作成時間)がext4に移動され、その逆の場合もbtimeがそのままかどうかを知っていますか?
パラドロイド

@paradroidすみません、答えがわかりません。LinuxでNTFSからext4にファイルをコピーする場合、作成時間をサポートしている場合はNTFSドライバーを調べる必要があります。Windowsの場合は、Windows用のext4ドライバーを調べる必要があります。
ホイヘンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.