Linuxでは、すべてのファイルにいくつかのタイムスタンプがあり、ファイルまたはその属性がいつ変更または変更されたかに関する重要な分析を提供します。これらのタイムスタンプを詳しく見てみましょう。
Linuxタイムスタンプとは何ですか?
Linuxのファイルには、通常、次の3つのタイムスタンプがあります。
- atime –アクセス時間
- mtime –時間を変更する
- ctime –時間を変更する
atimeはアクセス時間を表します。このタイムスタンプは、ファイルが最後にアクセスされたのはいつかを示します。アクセスとは、cat、vim、less、またはその他のツールを使用してファイルのコンテンツを読み取ったり表示したりしたかどうかを意味します。
mtime
mtimeは変更時間を表します。このタイムスタンプは、ファイルが最後に変更されたのはいつかを示します。変更とは、ファイルの編集によってファイルの内容が変更されたかどうかを意味します。
ctime
ctimeは、ステータス変更時間を表します。このタイムスタンプは、ファイルのプロパティとメタデータが最後に変更されたのはいつかを示します。メタデータには、ファイルのアクセス許可、所有権、ファイルの名前と場所が含まれます。
ファイルのタイムスタンプを確認するには?
statコマンドを使用して、ファイルのすべてのタイムスタンプを表示できます。 statコマンドの使用は非常に簡単です。ファイル名を指定するだけです。
stat <filename>
出力は次のようになります:
stat abhi.txt
File: abhi.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 10305h/66309d Inode: 11936465 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/abhishek) Gid: ( 1000/abhishek)
Access: 2018-08-30 12:19:54.262153704 +0530
Modify: 2018-08-30 12:19:54.262153704 +0530
Change: 2018-08-30 12:19:54.262153704 +0530
Birth: -
上記の出力で、3つのタイムスタンプ(アクセス、変更、および変更)のすべての時刻を確認できます。この空のファイルをtouchコマンドで作成したので、3つのタイムスタンプはすべて同じです。
次に、これらのタイムスタンプを変更しましょう。
lessコマンドを使用してファイルを読み取ると、ファイルのコンテンツとメタデータが同じままであるため、アクセス時間のみが変更されます。
$ less abhi.txt
$ stat abhi.txt
File: abhi.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 10305h/66309d Inode: 11936465 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/abhishek) Gid: ( 1000/abhishek)
Access: 2018-08-30 12:25:13.794471295 +0530
Modify: 2018-08-30 12:19:54.262153704 +0530
Change: 2018-08-30 12:19:54.262153704 +0530
Birth: -
それでは、変更時間を変更しましょう。 catコマンドを使用して、このファイルに新しいテキストを追加します。これにより、アクセス時間の変更が防止されます。
$ cat >> abhi.txt
demo text
^C
$ stat abhi.txt
File: abhi.txt
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: 10305h/66309d Inode: 11936465 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/abhishek) Gid: ( 1000/abhishek)
Access: 2018-08-30 12:25:13.794471295 +0530
Modify: 2018-08-30 12:32:34.751320967 +0530
Change: 2018-08-30 12:32:34.751320967 +0530
Birth: -
何か変なことに気づきましたか?ファイルを変更し、mtimeが変更されることを期待しましたが、ctimeも変更されました。
ctimeは常にmtimeで変更されることを忘れないでください。これは、mtimeがユーザーの制御下にあるのに対し、ctimeはシステムによって制御されているためです。これは、ファイルのデータブロックまたはメタデータが最後に変更された日時を表します。ファイルを変更すると、データブロックが変更されるため、ctimeが変更されます。
chmodまたはchgrpコマンドを使用してファイルのアクセス許可を変更することでctimeのみを変更できますが、ctimeを変更せずにmtimeを変更することはできません。
また、通常の方法で過去のctimeを変更することはできません。これは、ファイルが最後に変更された時刻を通知するため、一種のセキュリティ機能です。誰かがmtimeを変更し、悪意のある目的で過去に設定した場合でも、ctimeはmtimeが変更された実際の時刻を示します。
覚えておいてください :ctimeは常にmtimeの変更によって変更されます。
ファイルのタイムスタンプの使用法は何ですか?
分析に大いに役立ちます。ファイルのタイムスタンプを参照する必要がある状況がいくつかある可能性があります。たとえば、ファイルが最近変更されたかどうかを確認できます。
私のお気に入りの使用法の1つは、mtimeを使用してアプリケーションのログファイルを見つけることでした。アプリケーションを実行し、アプリケーションの親ディレクトリに移動して、過去数分間に変更されたファイルを検索します。
誰かがファイルにアクセスしたり、悪意を持ってファイルを変更したりしたかどうかを分析するのにも役立つことは、すでに上で示しました。このような状況では、タイムスタンプが重要な役割を果たします。
statコマンド出力の最後の行に気づきましたか? 「誕生」と書いてあります。これは、ファイルが「生まれた」(またはより正確に作成された)ときのタイムマップを表していると思われるかもしれません。
実際には、作成時間(cr)と呼ばれるタイムスタンプがもう1つあります。すべてのファイルシステムがこのタイムスタンプをサポートしているわけではありません。 Ext4は人気のあるLinuxファイルシステムの1つであり、作成タイムスタンプをサポートしていますが、現在statコマンドで表示することはできません。 statコマンドの将来のバージョンでは、Birthセクションに作成タイムスタンプが表示される可能性があります。