Linuxのタイムスタンプはmtime、ctime、atimeの3種類。touchコマンドで更新する方法
2019/02/24
Linuxのタイムスタンプはmtime、ctime、atimeの3種類ある
Linuxのタイムスタンプのmtime、ctime、atimeの違い
Linuxのファイルのタイムスタンプには 3種類あります。
- mtime:最終変更日時
- ctime:inodeの変更日時
- atime:最終アクセス日時
もう少し詳しく説明します。
mtime:最終変更日時
「mtime」は一番分かりやすく、一番良く使う、ファイルの内容を書き換えた日時です。
「ls -l」で表示させることができます。
viコマンドなどでファイルを内容を更新した場合に「mtime」も更新されます。
ですが、less、view、更新しない場合の vi、chmod、chownなど、ファイルの内容を更新しないコマンドでは更新されません。
ちなみに、viでファイルの内容を更新したときは、「mtime」だけでなく、「ctime」「atime」も更新されます。
ctime:inodeの変更日時
「ctime」は、inodeが更新された日時です。
inodeは、ファイルやフォルダに与えられる一意の整数値で、パーミッションや所有者の ID、グループIDなどファイルを管理するための情報と関連付けられている値です。
この inodeに関連付けられている情報が更新された日時が「ctime」となります。
「ls -lci」で表示させることができます。
inodeに関しては、下記のサイトなどを参考にしてください。
https://wa3.i-3-i.info/word14802.html
chmod、chownコマンドなどでファイルの属性情報などが更新されると「ctime」も更新されます。
対して、less、vi、viewなどファイルの中身を表示するだけであれば更新されません。(viコマンドでファイルの内容を更新した場合は「ctime」も更新されます。)
atime:最終アクセス日時
「atime」は、最も頻繁に更新されるタイムスタンプで、ファイルに対してなにかの操作を行うと更新された日時です。
「ls -lu」で表示させることができます。
ファイルに対して、less、viコマンドなどを実行すると更新されます。(viコマンドでは保存していなくても開くだけで更新されます。)
ですが、view、chmod、chownコマンドなどでは更新されません。
touchコマンドの -d、-m、-aオプションの違い
touchコマンドは、0バイトのファイルを作成したり、ファイルやフォルダの更新日時を変更したりするときに使用します。
ですが、ファイルの更新日を変更するオプションとして、-d、-m、-aがあります。
それぞれのオプションは、先に解説した、mtime、ctime、atimeと対になっていますので、オプションの内容を理解するには、それぞれのタイムスタンプの意味するところを理解する必要があります。
touch -d
では mtime、ctime、atimeすべてを更新する
touchコマンドでファイルの日時を更新する際、一番良く使うであろうオプションは「-d」だと思います。
1 |
$ touch -d "2019/01/01 12:00:00" file.txt |
これは、ファイルの中身が更新されたときと同じ状況にするオプションです(viコマンドで中身を表示し、何も変更せずに保存して閉じる作業をした状態と同じです)。
そのため、mtime、ctime、atimeのすべてが更新されます。
また、上記のように「-d」オプションに続いて日時を指定することで、指定した日時に変更することができます。
日時の指定は、「2019/01/01 01:00:00 am」「Tue Jan 1 12:00:00 JST 2019」のように、一般的に使う表記方法であればだいたい使えます。
1 |
$ touch -d file.txt |
上記のように、日時を指定しない場合は、コマンドを実行した日時に変更されます。
1 |
$ touch file.txt |
さらに、「-d」も指定しない場合は、「-d」が指定されたものとして処理されます。
1 |
$ touch "2019/01/01 12:00:00" file.txt |
ちなみに、上記のように「-d」を省略して日時を指定することはできません。
エラーメッセージが表示されますが、「touch file.txt
」が実行された状態でファイルが生成されます。
touch -m
では ctimeのみを更新する
タイムスタンプのうち、ctimeのみを更新したい場合は「-m」のオプションを使います。
ただし、更新できるのは現在の日時のみで、日時を指定することはできません。
1 |
$ touch -m file.txt |
この場合は、mtime、atimeは更新されません。
chmodコマンドで、実行前と同じパーミッションを指定して実行した場合と同じ結果となります。
touch -a
では ctime、atimeを更新する
タイムスタンプを更新するオプションとして、「-a」というオプションもあります。
このオプションでは、ctime、atimeの 2つを更新します。
また、更新できるのは現在の日時のみで、日時を指定することはできません。
1 |
$ touch -a file.txt |
touchコマンドのその他のオプションの使い方
touchコマンドにはその他にもいくつかオプションがあります。
touch file.txt
でファイルがない場合は新規作成される
1 |
$ touch file.txt |
touchコマンドを実行した場合、指定したファイルが存在しない場合は、0バイトの空のファイルが生成されます。
touch -c
では新規作成はされない
指定したファイルがない場合でも、ファイルを新規作成されたくない場合は「-c」のオプションを追加します。
1 |
$ touch -c file.txt |
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
Linuxのbashで変数に値を追加する方法を多数紹介。+=や””を使う方法など
Linuxのbashで変数に値を代入する方法を解説。bashの変数の処理は柔軟で様々な方法を採れる。デリミタなしで値を追加する方法などを解説。
-
Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説
Linuxでコマンドを設置するパスの設定情報である環境変数「PATH」の確認方法と環境変数「PATH」に新しいパスを追加する方法の解説。Linuxのシェルでの変数の扱い方についての解説も。
-
Linux findコマンドを使ってn日前のファイルを削除する 3つの記述方法
作成からn日経ったファイルを削除したい、そんなときにはfindコマンドを使う。コマンドの記述の方法は3種類あり、それぞれを解説。書き易さもあるがスピードに大きく差がある記述方法もある。
-
Linuxのnlは行番号を付与してファイルの内容を表示するコマンド
Linuxでファイルを表示する際に行番号を付与するにはcatコマンドにnオプションを使うことでも可能。しかし、行番号を付与する専門のnlコマンドがある。ここではその使い方を詳細に解説。
-
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
Linuxにはコマンドで実行した結果が長い場合、1画面ごとに区切って表示するコマンドが用意されている。それがページャーと呼ばれるmore、lessだ。この使い方を解説。
-
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
catはLinuxのコマンドで、本来の機能はファイルを連結だが、ファイルの内容を表示する機能のために使うことが多く使用頻度が高い。同種の機能のmore、less、tacコマンドについても解説。
-
Linuxのheadコマンドは先頭行から、tailコマンドは最終行から指定した行を表示する
Linuxのhead、tailコマンドはファイルの先頭の一部、もしくは、末行の一部を表示するコマンド。行数や文字数で指定をする。tailはログを監視するためのオプションがある。
-
Linuxのファイル表示・結合catの逆処理のtac、revコマンドの解説
Linuxにtac、revというコマンドがある。catの逆の処理なのだが、tacは最終行から逆に表示し、revは行末の文字から逆に表示をすることを解説しつつその使い方について詳しく解説をする。
-
makewhatis、mandbコマンドでLinuxのオンラインマニュアル索引情報を更新
Linuxコマンドのオンラインマニュアルを検索するwhatis、aproposなどのコマンドはwhatisデータベースを対象に検索する。このデータベースを更新するmandb、makewhatisコマンドを解説。
-
Linuxで使用される主な環境変数・PATH、HOME、PS1・printenv、set、declare
Linuxに設定されている主な環境変数の解説。PWD、HOSTNAME、USER、LANG、HOME、LOGNAME、PS1、PS2、HISTSIZE、HISTFILE、HISTFILESIZE、TERMなどがある。