touch -mオプション|修正時刻だけを変更する方法を初心者向けに解説
生徒
「Linuxでファイルの時間を変更できるって聞いたんですけど、それってどういうことですか?」
先生
「Linuxのファイルには、いつ変更されたかや、いつ読まれたかなどの時刻情報が記録されています。それを変更することもできるんですよ。」
生徒
「中でも修正時刻だけを変えたいときは、どうすればいいんですか?」
先生
「それにはtouch -mというオプションを使います。詳しく説明していきますね。」
1. 修正時刻(mtime)とは?
Linuxのファイルには、次の3種類の時刻情報が存在します:
- アクセス時刻(atime):ファイルを最後に読んだ時間
- 修正時刻(mtime):ファイルの内容を変更した時間
- 状態変更時刻(ctime):パーミッションや所有者を変更した時間
この中でmtimeは、ファイルの中身に何か書き込んだときに更新されます。たとえば、テキストを追記したり、上書き保存したりすると変わります。
2. touch -mの基本的な使い方
touchコマンドに-mオプションを付けることで、修正時刻(mtime)だけを変更することができます。
たとえば次のように使います。
touch -m sample.txt
このコマンドは、ファイル「sample.txt」の修正時刻だけを現在時刻に更新します。中身は何も変わりません。
3. statコマンドで修正時刻を確認しよう
修正時刻が変わったかどうかは、statコマンドで確認できます。
stat sample.txt
File: sample.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Access: 2025-09-16 09:30:00.000000000 +0900
Modify: 2025-09-16 10:00:00.000000000 +0900
Change: 2025-09-16 10:00:00.000000000 +0900
ここで「Modify」が修正時刻です。touch -mを使うことで、この「Modify」だけを更新できます。
4. 修正時刻を指定して変更する
-tオプションと組み合わせることで、任意の日時に設定することもできます。
touch -m -t 202509161200 sample.txt
この例では、「2025年9月16日12時00分」に修正されたことになります。日時の形式はYYYYMMDDhhmmです。
5. -aオプションとの違いと併用
-aオプションはアクセス時刻(atime)だけを変更しますが、-mオプションは修正時刻(mtime)だけを変更します。
両方同時に変更したいときは、次のように書きます。
touch -a -m sample.txt
これで、アクセス時刻と修正時刻が同時に変更されます。
6. 中身を変えずに修正時刻だけ変える理由
一見、不自然に感じるかもしれませんが、実際には修正していないのに修正時刻だけを変更したいという場面はあります。
たとえば:
- 自動処理で「最近更新されたファイル」として認識させたいとき
- 特定の日時に修正されたように見せたいテスト環境での操作
- バックアップや同期スクリプトの動作を確認したいとき
こうした場合、touch -mは非常に便利なLinuxコマンドになります。
7. lsコマンドで修正時刻を見る
ls -lコマンドでも修正時刻を確認できます。ただし、表示されるのは修正時刻だけで、アクセス時刻などは表示されません。
ls -l
-rw-r--r-- 1 user user 0 Sep 16 12:00 sample.txt
このように「Sep 16 12:00」という部分が修正時刻を示しています。
8. 複数ファイルの修正時刻を一括変更
touch -mは、複数のファイルを同時に処理することも可能です。
touch -m file1.txt file2.txt file3.txt
このようにすれば、3つのファイルすべての修正時刻が現在時刻に更新されます。
9. 自動スクリプトでの活用例
シェルスクリプトなどで、ファイルの修正時刻を人工的に変えることで、動作確認や自動処理のトリガーに使えます。
#!/bin/bash
touch -m -t 202509150830 /tmp/testfile.txt
このような使い方を覚えておけば、Linuxの自動化にも一歩近づけます。
10. 他のtouchオプションとの使い分け
-mは修正時刻、-aはアクセス時刻、そしてオプションなしは両方を変更します。
ファイルのタイムスタンプを細かく制御したいときは、これらのオプションを正しく使い分けることが大切です。