このチュートリアルでは、Linuxファイルのタイムスタンプの種類と、touch
を使用してファイルのタイムスタンプを表示および変更する方法について説明します。 例を含むコマンド。
Linuxファイルのタイムスタンプの簡単な紹介
LinuxおよびUnixでは、一般に、すべてのファイルに3種類のタイムスタンプがあります。つまり atime (アクセス時間)、 mtime (変更時間)と ctime (時間の変更)。名前が示すように、タイムスタンプは、ファイルがいつアクセス、変更、変更されたかを確認するために使用されます。
アクセス時間(または略してatime)のタイムスタンプは、ファイルが最後に読み取られた時間です。たとえば、ファイルを開いた可能性があります。このファイルは、他のプログラムまたはリモートマシンによってアクセスされた可能性があります。コマンド(例:cat
)を使用してファイルの内容を読み取った可能性があります コマンド)、またはプログラム(gedit、vimなど)。ファイルは編集も変更もされていません。リモートシステムからあなたまたは他のユーザーのみがアクセスしました。
変更時刻(またはmtime)タイムスタンプは、ファイル(またはディレクトリ)が最後に変更された時刻を示します。つまり、mtimeは、ファイルの内容が変更された時刻を示します。たとえば、ファイルに何かを追加したり、ファイルから何かを削除したり、ファイルの内容を修正したりした可能性があります。
変更時刻(またはctime)タイムスタンプは、ファイルの内容またはファイルのメタデータ(つまり、ファイルの所有権、ファイルのアクセス許可、グループなどのファイル属性)が最後に変更された時刻を示します。
要約すると、
- atime-最後のアクセスの時刻を示します 内容を読むためにファイルする。
- mtime-最後の変更の時刻を示します ファイルの内容に。
- ctime-最後の変更の時刻を示します ファイルの内容またはファイルのメタデータ(所有者、グループ、または権限)に移動します。
タイムスタンプは、さまざまな状況で役立ちます。タイムスタンプの使用例は次のとおりです。
- アクセス時間または変更時間に基づいてファイルを検索して並べ替えます。
- X日より古いファイルを見つけて削除します。ハードドライブ内の古いファイルをクリーンアップするのに便利です。
- 構成ファイルがいつ変更されたかを確認します。
- ファイルがアクセスされたかどうかを確認します。
- ディレクトリが更新されたかどうかを確認します。
- X日より古いまたは新しいファイルを検索します。
stat
を使用してLinuxファイルのタイムスタンプを表示する およびls
コマンド
stat
を使用して、Linuxでファイルのタイムスタンプを表示できます。 指図。マニュアルページによると、stat
コマンドは、Linuxのファイルまたはファイルシステムのステータスを表示します。 statコマンドはGNU Coreutils
の一部です 、わざわざインストールしないでください。
それでは、ostechnix.txt
という名前のテキストファイルのタイムスタンプを確認しましょう。 stat
を使用する コマンド:
$ stat ostechnix.txt
出力例:
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:31:01.484504149 +0530
Modify: 2020-11-11 17:31:01.484504149 +0530
Change: 2020-11-11 17:31:01.484504149 +0530
Birth: -
上記の出力の最後の3行は、アクセス時間、変更時間、および変更時間のタイムスタンプをそれぞれ示しています。新しいファイルを作成するだけでは、すべてのタイムスタンプは同じです。
「Birth:
」という行に気づきましたか 「出力の最後に?ファイル作成時のタイムスタンプを示します。POSIX標準ではファイル作成のタイムスタンプが定義されていません。一部のファイルシステム(ext4、JFS、Btrfsなど)はこの値を保存しますが、現在LinuxカーネルAPIはありません。そのため、「Birth:」行にタイムスタンプの代わりにハイフン「-」が表示されます。
ls
を使用して、atime、mtime、およびctimeのタイムスタンプを個別に取得することもできます。 コマンド。
変更時刻(mtime)のタイムスタンプを表示するには、ls -l
を使用します コマンド:
$ ls -l ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
変更時刻(ctime)のタイムスタンプを表示するには、ls -lc
を実行します。 コマンド:
$ ls -lc ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
ここでは、c
フラグは、ファイルメタデータまたはファイル属性が最後に変更された時刻を表示するために使用されます。
ls -lu
を使用してアクセス時間(atime)タイムスタンプを表示する コマンド:
$ ls -lu ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
ここでは、 u
フラグは、ファイルへの最後のアクセスの時刻を表示します。
touch
を使用してLinuxファイルのタイムスタンプを変更する コマンド
touch
コマンドは、ファイルのタイムスタンプを変更したり、Linuxで新しい空のファイルを作成したりするために使用されます。 stat
と同じように コマンド、touch
コマンドはGNU coreutils
の一部でもあります 、したがって、インストールする必要もありません。
タイムスタンプを変更する前に、ostechnix.txt
という名前のファイルの現在のタイムスタンプを取得しましょう。 参考:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:31:01.484504149 +0530
Modify: 2020-11-11 17:31:01.484504149 +0530
Change: 2020-11-11 17:31:01.484504149 +0530
Birth: -
上記の出力でわかるように、ファイルostechnix.txt
アクセスされました。同じ日時、つまり2020年11月11日の17:31:01に変更および変更されました。
touch
を使用してこのファイルのタイムスタンプを変更しましょう 以下のようなコマンド:
$ touch ostechnix.txt
上記のコマンドは、すべてのタイムスタンプ(atime、mtime、ctimeなど)をコンピューターの現在の時刻に変更します。
次に、stat
を使用してファイルのタイムスタンプを見てみましょう。 コマンド:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:39:59.430610787 +0530
Modify: 2020-11-11 17:39:59.430610787 +0530
Change: 2020-11-11 17:39:59.430610787 +0530
Birth: -
見る?すべてのタイムスタンプがシステムの現在の時刻に変更されました。つまり、2020-11-10 17:51:02
。
個々のタイムスタンプを個別に変更することもできます。たとえば、-a
を使用して変更できるのは、アクセス時間(atime)のタイムスタンプのみです。 フラグ:
$ touch -a ostechnix.txt
上記のコマンドは、アクセス時間のタイムスタンプを現在の時間に設定します。
次に、ostechnix.txt
のタイムスタンプを確認します stat
を含むファイル コマンド:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:43:46.555428706 +0530
Modify: 2020-11-11 17:39:59.430610787 +0530
Change: 2020-11-11 17:43:46.555428706 +0530
Birth: -
上記の出力からわかるように、アクセス時刻は現在の時刻に変更されます。変更時刻も更新されます。
変更時刻のタイムスタンプ(mtime)のみを変更するには、-m
を使用します フラグ:
$ touch -m ostechnix.txt
stat
でmtimeが変更されたかどうかを確認します コマンド:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:43:46.555428706 +0530
Modify: 2020-11-11 17:47:17.577722187 +0530
Change: 2020-11-11 17:47:17.577722187 +0530
Birth: -
これで、mtimeとctimeのタイムスタンプが変更されましたが、atimeはそのままです。
アクセス時間や変更時間を変更するとお気づきかもしれませんが、ctimeも更新されます。
atimeとmtimeの両方のタイムスタンプを同時に変更する場合は、-d
を使用します。 オプション。
$ touch -d "2020-11-11 17:50:01" ostechnix.txt
stat
を使用して、atimeおよびmtimeのタイムスタンプが変更されているかどうかを確認します コマンド:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:50:01.000000000 +0530
Modify: 2020-11-11 17:50:01.000000000 +0530
Change: 2020-11-11 17:51:17.024213698 +0530
Birth: -
アクセス時間と変更時間を特定の時間に設定しました。つまり、2020-11-11 17:50:01
。また、ctimeタイムスタンプも現在の時刻に更新されました。
-t
を使用して、現在の時刻の代わりに特定のタイムスタンプを使用することもできます。 フラグも:
$ touch -t 2011111754 ostechnix.txt
このコマンドは、atimeとmtimeのタイムスタンプを2020-11-11 17:54:00
に設定します。 。 stat
で確認してください 以下のようなコマンド:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:54:00.000000000 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:56:20.844405239 +0530
Birth: -
すでに述べたように、ctimeはatimeとmtimeが変更されると更新されます。 ctimeタイムスタンプのみを変更する場合は、touch
に専用のフラグはありません。 指図。したがって、ファイルのメタデータまたはファイルの属性を変更して、ctimeを手動で変更する必要があります。たとえば、実行可能権限を割り当てます ostchnix.txt
へ chmod
を含むファイル コマンド:
$ chmod +x ostechnix.txt
ctimeがstat
で更新されるかどうかを確認します コマンド:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:54:00.000000000 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:57:21.022720776 +0530
Birth: -
見る? ctimeタイムスタンプは変更されましたが、atime時間とmtime時間は変更されませんでした。ファイルはどちらもアクセスされていないため、変更されていません。ファイルのアクセス許可のみを変更しました。
ファイルを表示、アクセス、または変更して、ファイルのタイムスタンプを変更する
すでに述べたように、読み取りのためにファイルにアクセスすると、atimeタイムスタンプが変更されます。 cat
を使用して読み取り用のファイルにアクセスしてみてください コマンドを実行して、何が起こるかを確認します。
$ cat ostechnix.txt
This is a text file.
次に、アクセス時間のタイムスタンプが更新されているかどうかを確認します。
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 18:00:16.005323521 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:57:21.022720776 +0530
Birth: -
見る? atimeの値が変更されました。
ファイルにデータを追加またはファイルから削除すると、mtimeが更新されます。
ostechnix.txt
に行を追加しましょう ファイル:
$ echo "modify this file" >> ostechnix.txt
ファイルのタイムスタンプを確認します:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 38 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 18:00:16.005323521 +0530
Modify: 2020-11-11 18:01:49.072771458 +0530
Change: 2020-11-11 18:01:49.072771458 +0530
Birth: -
ファイルの内容が変更されたため、そのmtimeとctimeの両方が変更されました。
シンボリックリンクのタイムスタンプを変更する
デフォルトでは、touch
を使用する場合 シンボリックリンクのコマンド (またはシンボリックリンク)、参照ファイルのタイムスタンプも変更します。
シンボリックリンクのタイムスタンプのみを変更する場合は、-h
を使用します 、(--no-dereference
)オプション:
$ touch -h <path-to-symlink>
[ボーナスのヒント]別のファイルからタイムスタンプをコピーする
touchコマンドには、-r, (--reference=)
というオプションがあります。 これにより、あるファイルから別のファイルにタイムスタンプをコピーできます。
次のコマンドは、file1のタイムスタンプをfile2にコピーします。
$ touch -r file1.txt file2.txt
詳細については、stat
のマニュアルページを参照してください。 およびtouch
コマンド:
$ man stat
$ man touch
結論
このガイドでは、3種類のLinuxファイルタイムスタンプ(atime、mtime、ctime)、stat
を使用してファイルタイムスタンプを表示する方法について説明しました。 およびls
コマンドと最後にtouch
でそれらのファイルのタイムスタンプを変更する方法 指図。これがお役に立てば幸いです。