【Linux】touchコマンドでタイムスタンプ更新&空ファイル作成

シェル/bash

linuxのtouchコマンドについて調べる人


「Linuxのtouchコマンドの使い方について知りたい。」

こんな悩みを解決します。

本記事の内容

この記事を書いている私はIT業界歴12年、うちサーバエンジニア歴6年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやmac、Linuxなど様々なUNIX系環境を扱ってきました。

これまでの経験を踏まえ、コマンドの解説に留まらず実務視点で利用方法を記事にしました。お役にたちましたら幸いです。

本記事で扱うのはLinux/Macのtouchコマンドです

本記事では、LinuxまたはMac環境を前提にしています。それ以外のUNIX環境では一部の動作が異なることがあります。

touchコマンドには大きく2つの用途があります

主な用途

  • 用途1: 空ファイルを作成したい
  • 用途2: ファイルのタイムスタンプを更新したい

いずれの用途でも同じ構文です。使い方の違いは、用途1では未作成のファイル名を指定し、用途2では既に存在するファイル名を指定します。

【基本的な使い方】touch 《ファイル名》

touchコマンドを使うには、以下の構文を用います。

touch 《ファイル名》

【用途1】touchで空ファイルを作成する

以下の例では、touchコマンドを実行し、空ファイルを作成します。

  • ① lsコマンドで事前にファイルが存在しないことを確認
  • ② touchコマンドで空ファイルを作成
  • ③ 事後に0バイトの空ファイルが作成されたことを確認

実行結果は以下のようになります。

$ ls -l file1.txt ←①
ls: file1.txt: No such file or directory
$ touch file1.txt ←②
$ ls -l file1.txt ←③
-rw-r--r--  1 root  staff  0  7 26 09:16 file1.txt

【用途1】実務での利用用途

エンジニアが実務でtouchコマンドにより空ファイルを作成する事例を挙げます。

  • 例1:業務処理中、処理完了などの状態を、空ファイルの有無で表す場合
  • 例2:ファイルにデータを書き込む前に、まずファイルを作っておきたい場合
  • 例3:テストなどの目的で、大量のダミーファイルを作成したい場合

【用途2】touchでファイルのタイムスタンプを更新する

既にあるファイルのタイムスタンプを更新します。元のタイムスタンプ(9:16)から現在時刻(9:27)にタイムスタンプが更新されています(★の箇所を参照)。

$ ls -l file1.txt
-rw-r--r--  1 root  staff  0  7 26 09:16 file1.txt
$ touch file1.txt
$ ls -l file1.txt
-rw-r--r--  1 root  staff  0  7 26 09:27★ file1.txt

【用途2】実務での利用用途

エンジニアが実務でtouchコマンドによりタイムスタンプを更新する事例を挙げます。

  • 例1:findのmtimeオプションでタイムスタンプを基準にファイル検索したい場合
  • 例2:処理を行った証跡としてタイムスタンプを明示的に更新したい場合
  • 例3:JSPの自動コンパイルのきっかけとしてJSPのタイムスタンプを更新する場合

未来日付または過去日付でタイムスタンプを更新する

touchコマンドでは、現在時刻以外の時間でタイムスタンプを更新することもできます。以下のようにtオプションを使います。

touch -t YYMMDDHHMM 《ファイル名》

未来日付(★2045年)でタイムスタンプを更新する例を示します。

$ touch -t 4502100830 file1.txt
$  ls -l file1.txt
-rw-r--r--  1 includingme  staff  0 2 10 2045★ file1.txt

過去日付(★2000年)でも同様です。

$ touch -t 0002100830 file1.txt
$  ls -l file1.txt
-rw-r--r--  1 includingme  staff  0 2 10 2000★ file1.txt

ファイルを空ファイルにして更新したい場合

touchコマンドでは、ファイルがあればタイムスタンプが更新され、なければ空ファイルが生成されます。しかしファイルがあった場合も空ファイルにして、中身も含め更新したい場合もあります。そういうときは以下のようにします。

/dev/nullをcatしてリダイレクトする事で、ファイルサイズが0バイト(★)の空ファイルになります。

	 	 
$ ls -rlt file0.txt	 	 
-rw-r--r-- 1 root staff 3745 7 26 20:50 file0.txt	 	 
$ cat /dev/null > file0.txt	 	 
$ ls -rlt file0.txt	 	 
-rw-r--r-- 1 root staff 0★ 7 26 20:56 file0.txt

touchの戻り値

touchの戻り値は以下の仕様です。

  •  ファイルのタイムスタンプを更新できた
      戻り値:0
  •  ファイルのタイムスタンプを更新できなかった
      戻り値:1

通常は戻り値0です。エラー(戻り値1)となる例を示します。

$ touch /
touch: /: Read-only file system
$ echo $?

[実行結果]

1

運用業務上の注意点

運用業務上、touchコマンドを使って過去日付や未来日付で更新するのは避けたほうが良いでしょう。

障害調査などでファイルのタイムスタンプから時系列を確認する際、事実と異なるタイムスタンプを使っていると混乱します。タイムスタンプを更新したい場合は現在時刻で更新するのが大原則です。

おわりに

今回は以上です。touchコマンドの2つの用途(用途1:空ファイルを作成する、用途2:タイムスタンプを更新する)について解説しました。実務で利用する場合の参考になりますと幸いです。

Blog TOP  Linuxコマンドを勉強したい人向け|Linuxの使い方 記事まとめ

Linux&Linuxコマンドを勉強したい人向けの記事もくじ

用語解説・技術一般

  "UNIXとLINUX"の違いについて解説します
  CUIとGUIの違い・特徴について解説します

サーバリソースを確認するコマンドの使い方

  【Linux】CPU使用率を確認する3つの方法を解説します
  【Linux】topコマンドで,CPU消費の原因を特定する方法
  【Linux】ps実行時に-efオプションを付ける理由について
  【Linux】メモリ使用率を確認する|容量・空きの確認も
  【Linux】ディスク容量を確認する|ディスク容量監視も

ファイル操作に関するコマンドの使い方

  【Linux】ファイルの行数をカウントする方法を解説
  【Linux】文字コード変換ならiconvコマンド1択です
  【Linux】/dev/nullを、エンジニアが使う2つの目的
  【Linux】findのexecオプションの使い方とその注意点
  【Linux】findの結果から圧縮ファイルを作るコマンド
  【Linux】hostsの場所はどこ?→/etc/hostsにあります
  【Linux】touchコマンドで,時刻更新&空ファイル作成

Linux管理者用コマンドの使い方

  【Linux】再起動コマンド(shutdown)の使い方と注意点

よく使う便利なコマンドの使い方

  【Linux】改行なしでechoコマンドを使う時の -nオプション
  【Linux】sleepコマンドの使用例と注意点について解説する
  【Linux】rmコマンドでディレクトリを削除する方法を解説
  【Linux】ファイルを削除するコマンド2選【rm以外もあり】
  【Linux】awkの区切り文字を指定する,-Fオプションを解説
  【Linux】sedで文字列の置換をするeオプションを解説する
  【Linux】dateコマンドのフォーマットとその便利な使い方
  【Linux】大文字から小文字に変換する方法【小文字から大文字も】

シェルの便利機能

  【Linux】コマンド履歴を検索する【Ctrl+r】