Linux ファイルのタイムスタンプの説明: atime、mtime、および ctime

「変更」が「修正」を意味しないのはどのような場合ですか? Linux ファイルのタイムスタンプについて話すとき。このガイドでは、システムがそれらを更新する方法と、それらを自分で変更する方法について説明します。

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

atime、mtime、ctimeの違い

すべての Linux ファイルには、アクセス タイムスタンプ (atime)、変更されたタイムスタンプ (mtime)、および変更されたタイムスタンプ (ctime) の 3 つのタイムスタンプがあります。

アクセス タイムスタンプは、ファイルが最後に読み取られた時刻です。これは、誰かがプログラムを使用してファイルの内容を表示したり、ファイルから値を読み取ったりしたことを意味します。ファイルには何も変更または追加されていません。データは参照されますが、変更されません。

変更されたタイムスタンプは、ファイルの内容が最後に変更された時間を示します。プログラムまたはプロセスがファイルを編集または操作します。 「変更された」とは、ファイル内の何かが変更または削除されたか、新しいデータが追加されたことを意味します。

変更されたタイムスタンプは、ファイルの内容に加えられた変更を示すものではありません。むしろ、ファイルに関連するメタデータが変更されたときです。たとえば、ファイルのアクセス許可を変更すると、変更されたタイムスタンプが更新されます。

標準の Linux ext4 ファイル システムも、内部ファイル システム構造内にファイル作成タイムスタンプ用のスペースを割り当てますが、これはまだ実装されていません。場合によっては、このタイムスタンプが埋められている場合もありますが、その値は信頼できません。

詳細なタイムスタンプ

Linux のタイムスタンプには、日付と時刻の代わりに数値が含まれます。この数字は前の秒数です Unix時代、これは 00 年 00 月 00 日の深夜 (1:1970:XNUMX) でした。 協定世界時 (UTC)。 Linux タイムスタンプではうるう秒は無視されるため、リアルタイムとはまったく異なります。

Linux はタイムスタンプを表示する必要がある場合、秒数を日付と時刻に変換します。これにより、人間が理解しやすくなります。コンピュータがファイルを表示している場所とタイムゾーンにより、コンピュータは秒数を日付と時刻に変換するように指示されます。また、月が正しい言語で表示されていることも保証されます。

では、タイムスタンプには何秒まで保存できるのでしょうか?たくさん – 正確には 2,147,483,647 です。これはかなりの数ですが、十分ですか?これを Unix 時代に追加して日付と時刻に変換すると、19 年 2038 月 03 日火曜日、午前 14:07:XNUMX になります。それまでに、タイムスタンプ用に別のシステムが必要になります。

タイムスタンプを表示する

以下に示すように、-l (longlist) オプションを ls とともに使用すると、 変更されたタイムスタンプを確認できます。

ls -l dp.c

アクセス タイムスタンプを確認したい場合は、次のように -lu (access-time) オプションを使用します。

ls -lu dp.c

最後に、変更のタイムスタンプを確認するには、-lc (変更時刻) オプションを使用します。次のように書きます。

ls -lc dp.c

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

上のタイムスタンプは、ファイルの内容が最後に変更されたのが 21 年 2019 月 20 日であることを示しています。 ファイルは 2020 年 XNUMX 月 XNUMX 日に別のコンピューターからこのコンピューターにコピーされ、その時点で両方のタイムスタンプが更新されたため、アクセス タイムスタンプと変更タイムスタンプは同一です。

また読む:  エミュレーションを逆にしてAndroidをUbuntuからリモートで制御する方法

見る すべてのタイムスタンプを一度に、次のように stat コマンドを使用します。

ステータスDP.C

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

タイムゾーンは画面の下部にリストされます。ご覧のとおり、非常に正確な秒コンポーネントが含まれています。各タイムスタンプの最後には、-0500 または -0400 も表示されます。

これらはタイムゾーンオフセットです。ファイル システムは UTC タイムスタンプを記録し、統計で表示するときにローカル タイム ゾーンに変換します。この記事の調査に使用したコンピューターは、米国の東部標準時 (EST) ゾーンにあるかのように構成されていました。

このタイム ゾーンは、東部標準時が有効な協定世界時 (UTC) より 2019 時間遅れます。ただし、東部夏時間 (EDT) が有効な場合は、協定世界時 (UTC) から XNUMX 時間遅れます。 XNUMX 年 XNUMX 月に改訂されたタイムスタンプが変更され、米国東部標準時が発効しました。そのため、XNUMX つのタイムスタンプには XNUMX 時間のオフセットがありますが、編集されたバージョンには XNUMX 時間のオフセットがあります。

オフセットとタイムゾーンはどこにも保存されません。これらの値を保持するために割り当てられた i ノードやファイル システム領域はありません。タイムスタンプ (常に UTC)、ファイルを表示しているコンピュータのローカル タイム ゾーン、および夏時間が有効かどうかを使用して、これをすばやく計算する必要があります。

ファイルの作成日に予約されている「誕生」タイムスタンプも表示されます。これは実装されていないため、タイムスタンプの代わりにハイフン「-」が表示されます。

タイムスタンプを変更する

必要に応じて、ファイルのタイムスタンプを変更できます。 touch コマンドを使用して、アクセス権や変更されたタイムスタンプを変更できます。 または両方:

タッチ-adp.c

新しいアクセス タイム スタンプを設定するには、-a (アクセス タイム) オプションを使用できます。このコマンドは、アクセス タイムスタンプをコンピューターの現在時刻に設定します。

ステータスDP.C

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

予想どおり、アクセス タイムスタンプが変更されました。ただし、変更されたタイムスタンプも更新されています。それは正常です。

変更されたタイムスタンプを変更するには、-m (変更された時刻) オプションを使用できます。

タッチ-mdp.c
ステータスDP.C

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

今回は、修正および変更されたタイムスタンプが更新されました。

タイムスタンプと変更されたアクセス権の両方を一度に変更したい場合は、-d (日付) オプションを使用できます。時刻と日付を指定することもできます。タイムスタンプを現在に変更することに限定されません。

次のコマンドを使用して、アクセスおよび変更されたタイムスタンプを 10 年 30 月 45 日の 15:2020:XNUMX に設定します。

touch -d "2020-01-15 10:30:45" dp.c
ステータスDP.C

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

これで、アクセスと変更のタイムスタンプが過去の日付に設定されました。変更されたタイムスタンプもコンピュータの現在時刻に更新されます。

あるファイルのタイムスタンプを別のファイルのタイムスタンプ値に設定したい場合は、以下に示すように -r (参照) オプションを使用することもできます。

タッチdp.c-r dice_words.sl3
ステータスDP.C

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

その後、タイムスタンプは -0400 と -0500 が混在し、ほぼ開始位置に戻ります。

また読む:  SCP を使用して Linux でファイルを安全に転送する方法

変数タイムスタンプのみに影響を与える何かを実行してみましょう。 chmod コマンドを使用して実行可能ファイルを許可します。 すべてのユーザーに対する実行権限:

chmod + x dp
ステータスDP

変更されたタイムスタンプのみが更新されました。これは、ファイル自体が変更されておらず、アクセスまたは変更されていないためです。ただし、ファイルに関するメタデータは変更されています。

ファイル システムはどのようにタイムスタンプを更新しますか?

ファイル システムのインストール時に、そのファイル システムの実行方法またはファイル システムとの対話方法を指定するために使用できるオプションがあります。これらはファイル /etc/fstab に保存され、ブート時に読み取られて処理されます。アクセス タイムスタンプの更新にどのシステムを使用するかを指定するオプションを設定することもできます。

最も人気のあるオプションのいくつかを次に示します。

strictatime: このオプションは、ファイルがアクセスされるたびにファイル アクセスのタイムスタンプを更新します。このアプローチには追加のコストがかかりますが、一部のサーバーはこのスキームから恩恵を受けることができます。デスクトップまたはラップトップ コンピューターに比べて利点はほとんどありません。
noatime(no atime): このオプションは、ファイルとディレクトリのアクセス タイムスタンプの更新を完全に無効にします。ただし、変更されたタイムスタンプは更新されます。
nodiratime (no dir atime): このオプションを使用すると、更新されるファイルのタイムスタンプへのアクセスが許可されますが、ディレクトリのタイムスタンプは無効になります。
relatime: このオプションは、アクセス タイムスタンプが 24 時間以上古い場合、または以前のタイムスタンプが現在変更または変更されたタイムスタンプより古い場合にのみ、アクセス タイムスタンプを更新します。これにより、アクセス タイムスタンプを頻繁に更新するか、まったく更新しないかのバランスが取れます。
このコンピュータの /etc/fstab ファイルを見て、どのようなオプションが設定されているかを確認してみましょう。

少ない/など/ fstab

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

ファイル /etc/fstab は次のように表示されます。

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

ラッピングなしのファイルの内容は次のとおりです。

# /etc/fstab: 静的ファイルシステム情報。
#
# 'blkid' を使用して、
#デバイス;これは、デバイスに名前を付けるより堅牢な方法として UUID= とともに使用できます。
# ディスクを追加したり削除したりしても機能します。 fstab(5) を参照してください。
#
# <file  > <mount ポイント> <type> <オプション> <ダンプ> <パス>
#/インストール中に/ dev / sda1にありました
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 エラー=remount-ro 0 1 /swapfile none swap sw 0 0

エントリは 1 つだけあり、そのうちの 4 つはスワップ ファイルなので無視できます。もう XNUMX つはファイル システムのルート ( / ) にインストールされ、インストール時にはデバイス /dev/sdaXNUMX 上にありました。これは最初のハード ドライブの最初のパーティションであり、たまたま extXNUMX ファイル システムが含まれています。

渡される唯一のオプションは、errors=remount-ro です。これは、読み書き可能なファイル システムとしてマウントしようとしたときにエラーが発生した場合に、このファイル システムを読み取り専用システムとして再マウントするようにオペレーティング システムに指示します。

したがって、アクセスタイムスタンプの扱いについては言及されていません。さらに深く掘り下げて、/proc/mounts が何を教えてくれるのかを確認してみましょう。 /proc/mounts からの出力を grep 経由で接続します。 検索文字列は「sda」になります。"、ハードディスク識別子。

また読む:  Tomb を使用して Linux でファイルを暗号化する方法

次のように書きます。

cat / proc / mounts | grep "sda"

Linux ファイルのタイムスタンプの説明: atime、mtime、ctime - %categories

次のオプションが表示されます。

rw: ファイル システムは読み書き可能なファイル システムとしてマウントされます。
relatime: ファイル システムは、「相対時間」システムを使用してアクセス タイムスタンプを更新します。
これはどこから来たのでしょうか?さて、リンク チャートは次のような状況で使用されます。

デフォルトのオプション /etc/fstab を使用する場合。
relatime /etc/fstab を使用する場合。
/etc/fstab のアクセスタイムスタンプオプションを使用せず、Linux カーネル 2.6.30 以降を使用している場合。
ext4 ファイル システムの /etc/fstab エントリでは、アクセス タイムスタンプを更新するためのオプションが指定されていなかったため、Linux は賢明な選択を行い、relatime を使用しました。

タイムスタンプは重要です

タイムスタンプを使用すると、ファイルがいつアクセス、変更、変更されたかを簡単に知ることができます。しかし、より重要なのは、ソフトウェアをバックアップおよび同期して、バックアップが必要なファイルを識別する方法を提供することです。

タイムスタンプを操作する機能は、ファイルまたはファイルのグループを含めるか無視するようにプログラムに強制的に強制する必要がある場合に便利です。

Linuxのコマンド
tar·pv·cat·TAC·chmod·grep ·差分·sed·ar·man·pushdは·popdを·fsck·テストディスク·seq·fd·パンドック·cd·$ PATH·awk·join·jq·フォールド·uniq·journalctl·tail·STAT·ls·fstab·echo·less·chgrp·chown·回転·見ます·ストリング·type·リネーム·ZIP·解凍する·mount·umount·install·fdisk·mkfs·rm·rmdir·rsync·df·gpg·vi·ドワーフ·mkdir·du·ln·patch·変換·ラクローン·シュレッド·srm·scp·gzip·おしゃべり·cut·find·umask·wc· tr
プロセス alias·screen·top·nice·renice·進捗·ストラス·systemd·tmux·chsh·history·at·バッチ·無料です。·which·dmesg·シフン·usermod·ps·chroot·xargs·TTY·小指·lsof·vmstat·タイムアウト·wall·はい·kill·眠る·sudo·su·時間·groupadd·usermod·グループヘッド·lshw·shutdown·リブート·停止する·電源オフ·passwd·lscpu·crontab·date·bg·fg·ピドフ·nohup·PMAP
ネットワーキング netstat·ping·traceroute·ip·ss·フーイズ·fail2ban·ブモン·dig··nmap·FTP·curl·wgetの·who·whoami·w·iptables·ssh-keygen·UFW·アーピング·ファイアウォール
あなたも好きかも