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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド
Linuxでファイル、テキストを操作するコマンドのまとめ。cat、less、head、tail、split、tr、sedなど、ファイルを表示、置換、連結、分割などの各コマンドの使い方の紹介と詳細ページの紹介。
-
Linuxのsplitコマンドは指定したサイズにファイルを分割する
Linuxのsplitコマンドはファイルを分割する機能を有する。分割するサイズ、行数、ファイル数を指定するオプションや、分割後のファイルの接尾辞を指定するオプションなどがある。
-
Linuxのbashで変数に値を追加する方法を多数紹介。+=や””を使う方法など
Linuxのbashで変数に値を代入する方法を解説。bashの変数の処理は柔軟で様々な方法を採れる。デリミタなしで値を追加する方法などを解説。
-
Linuxの wcコマンドでファイルの行数、単語数、バイト数、文字数をカウントする
Linuxの行数、単語数、文字数、バイト数をカウントする「wc」コマンドの使い方の解説。find、lsと組み合わせてファイル数のカウント方法などを解説。
-
Linuxのheadコマンドは先頭行から、tailコマンドは最終行から指定した行を表示する
Linuxのhead、tailコマンドはファイルの先頭の一部、もしくは、末行の一部を表示するコマンド。行数や文字数で指定をする。tailはログを監視するためのオプションがある。
-
Linuxのnlは行番号を付与してファイルの内容を表示するコマンド
Linuxでファイルを表示する際に行番号を付与するにはcatコマンドにnオプションを使うことでも可能。しかし、行番号を付与する専門のnlコマンドがある。ここではその使い方を詳細に解説。
-
Linuxで使用される主な環境変数・PATH、HOME、PS1・printenv、set、declare
Linuxに設定されている主な環境変数の解説。PWD、HOSTNAME、USER、LANG、HOME、LOGNAME、PS1、PS2、HISTSIZE、HISTFILE、HISTFILESIZE、TERMなどがある。
-
Linuxのマニュアルページ表示コマンドmanの解説
Linuxにはコマンド操作のオンラインマニュアルが用意されています。そのマニュアルを表示するコマンドが「man」です。「man」コマンドの使い方について解説します。
-
Linuxのファイル表示・結合catの逆処理のtac、revコマンドの解説
Linuxにtac、revというコマンドがある。catの逆の処理なのだが、tacは最終行から逆に表示し、revは行末の文字から逆に表示をすることを解説しつつその使い方について詳しく解説をする。
-
Linuxのbashのコマンドの履歴をhistoryで確認し!、↓、↑で実行する
Linuxで実行したコマンドの履歴を確認するコマンド「history」。「history」の使い方、設定の変更、設定ファイルの設置場所について解説。「!番号」「!文字列」「!?文字列」など。