【Linuxコマンド】date コマンドの使い方とよく使うオプション

概要

 
Linux の date コマンド は、現在の日時を表示したり、指定した書式でフォーマットして出力するためのコマンドです。
オプションを使うことで、表示フォーマットの変更だけでなく、未来の日時・過去の日時を計算して表示することもできます。
 

date コマンドが参照するのはサーバのシステム時刻です。
NTP クライアント(ntpd や chronyd など)が適切に動作していないと、標準時からずれてしまうことがあります。
ログのタイムスタンプやバッチ処理の実行時刻に影響するため、運用中のサーバでは時刻同期の状態もあわせて確認しておくことが重要です。
 

フォーマット

 

date [オプション]... [+フォーマット]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

 

引数や +フォーマット を省略した場合は、現在の日時をデフォルトの形式で表示します。
+%Y-%m-%d %H:%M:%S のように書式を指定すると、スクリプトで扱いやすい形に整形して表示できます。

 

よく使うコマンド例

 

・現在のシステム日時を表示する(デフォルト形式)。

date

もっとも基本的な使い方です。
現在のシステム日時を、ロケールや環境に応じたデフォルトの形式で表示します。

 

・「YYYY-MM-DD HH:MM:SS」形式で表示する。

date "+%Y-%m-%d %H:%M:%S"

年・月・日・時刻を固定のフォーマットで表示します。
ログやバックアップファイル名に使うときなど、機械的に扱いやすい形式にしたいときによく使います。

 

・UTC(協定世界時)で日時を表示する。

date -u "+%Y-%m-%d %H:%M:%S UTC"

-u / –utc / –universal オプションを付けると、ローカルタイムではなくUTCで日時を表示します。
グローバルなサービスやログ解析で、タイムゾーンを統一して扱いたい場合に便利です。

 

・システム日時から 1 か月前の日時を表示する。

date -d "1 months ago"

-d オプションで文字列を指定すると、その日時をもとに計算した結果を表示できます。
"1 months ago" のように指定すると、現在の日時から 1 か月前の日時が表示されます。

 

・システム日時から 1 日後の日時を表示する。

date -d "1 days"

こちらは現在日時から1 日後の日時を表示する例です。
"2 days""3 hours" など、日数や時間数を変えて使うこともできます。

 

・指定した日時の Unix 時刻(エポック秒)を表示する。

date -d "2024-01-01 00:00:00" +%s

+%s は「1970-01-01 00:00:00 UTC からの経過秒数(Unix 時刻)」を表します。
アプリケーションログなどで Unix 時刻を扱う場合の変換に便利です。

 

・現在の Unix 時刻(エポック秒)を表示する。

date +%s

現在時刻を Unix 時刻として表示する例です。
外部システムとの時刻同期の確認や、一意な ID の一部として扱うといった用途もあります。

 

・cp コマンドでバックアップを取るときに日付を付ける。

cp -p hoge{,.date +%Y%m%d}

hogehogeYYYYMMDD というファイル名でコピーするワンライナーです。
-p オプションで属性を引き継ぎつつ、日付付きのバックアップファイルを作成できます。

 

・crontab 内で日付付きログファイル名を使う。

0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup_date +\%Y\%m\%d.log 2>&1

cron から実行されるスクリプト内や crontab 上で、日付付きのログファイル名を使う例です。
crontab では % に特別な意味があるため、\% のようにエスケープが必要になる点に注意してください。

 

実務でのよくある使いどころ

 

・バックアップファイルやログファイルに日付を付ける
設定ファイルや DB ダンプのバックアップを、YYYYMMDD 形式の日付付きで保存しておくと、
どの時点のバックアップかが一目で分かり、ロールバック時の判断がしやすくなります。
 

・cron ジョブの動作確認
cron から実行されているスクリプトの先頭で date を呼び、
実際に何時にジョブが動いているかをログに残しておくと、トラブルシュート時に役立ちます。
 

・ログのタイムスタンプとシステム時刻の整合性チェック
アプリケーションログの時刻と date の出力が大きくずれている場合、
NTP 設定の問題やタイムゾーン設定の誤りが疑われます。
障害調査の第一歩として、date コマンドによるシステム時刻の確認は欠かせません。
 

・過去/未来の日時を使ったテスト
「1 日後に期限切れになる処理」や「1 か月後の日時で動作が変わる処理」など、
date の -d オプションを使って、テスト用の日時を簡単に用意できます。
 

オプション・フォーマット(よく使うもの)

 

short optionlong optiondescription
-d--date=STRING-dオプションの引数、またはSTRINGに日時指定文字列で指定した日時を表示する
-f--file=DATEFILE指定したファイルから1行ずつ読み込み、-dオプションと同じ形式で指定された日時を表示する
-I[TIMESPEC]--iso-8601[=TIMESPEC]ISO8601で指定されている書式で表示する
-r--reference=FILEFILE の最終変更時刻を表示する
-R--rfc-2822RFC 2822 形式で日付と時刻を出力する 例: Mon, 07 Aug 2006 12:34:56 -0600
--rfc-3339=TIMESPECRFC 3339 形式で日付と時刻を出力する
-s--set=STRING日付と時刻をdateに設定する
-u--utc、--universal協定世界時を使用する
--helpこの使い方を表示して終了する
--versionバージョン情報を表示して終了する
よく使う出力フォーマット
%Y
%m月 (01..12)
%D日付。 %m/%d/%y と同様
%H時 (00..23)
%I時 (01..12)
%M分 (00..59)
%S秒 (00..60)
その他の出力フォーマット
%%文字 %
%aロケール表示による曜日の省略名 (例: Sun、日)
%Aロケール表示での曜日の完全名 (例: Sunday、日曜日)
%bロケール表示での月の省略名 (例: Jan)
%Bロケール表示での月の完全名 (例: January)
%cロケール表示での日付と時刻 (例: Thu Mar 3 23:05:25 2005)
%C世紀。%Y と同様だが下2桁が省略される (例: 20)
%d月の中の何日目かを表す値 (例: 01)
%eスペースで字幅調整された月の中の何日目かを表す値。%_d と同様
%F完全形式の日付。 %Y-%m-%d と同様
%gISO 週番号の最後の2桁 (%G 参照)
%GISO 週番号の年部分 (%V 参照)。通常は %V と同時に使用される
%h%b と同様
%j年の開始日からの日数 (001..366)
%kスペース詰めの時 ( 0..23)。 %_H と同様
%lスペース詰めの時 ( 1..12)。 %_I と同様
%n改行
%Nナノ秒 (000000000..999999999)
%pAM または PM のロケールでの表示。不明な場合は空白
%P%p と同様だが、小文字で表示する
%rロケール12時間表示での時刻 (例 11:11:04 PM)
%R24時間表示での時および分。%H:%M と同様
%s1970-01-01 00:00:00 UTC からの秒数
%t水平タブ
%T時刻。%H:%M:%S と同様
%u週の何日目かを表す値 (1..7); 1 が月曜日
%U日曜日を週初めとした週番号 (00..53)
%VISO 週番号。月曜日を週初めとする (01..53)
%w週の何日目かを表す値 (0..6); 0 を日曜日とする
%W月曜日を週初めとした週番号 (00..53)
%xロケール表示での日付 (例: 12/31/99)
%Xロケール表示での時刻 (例: 23:13:48)
%y西暦での年の下2桁 (00..99)
%z+hhmm 形式でのタイムゾーン (例: -0400)
%:z+hh:mm 形式でのタイムゾーン (例: -04:00)
%::z+hh:mm:ss 形式でのタイムゾーン (例: -04:00:00)
%:::z必要な精度に応じて : が使用されるタイムゾーン表示 (例: -04, +05:30)
%Z英字でのタイムゾーン省略形 (例: EDT)
 

ここでは、よく利用するオプションと日付フォーマットを TablePress の表にまとめています。
フォーマット指定子は組み合わせて使えるため、用途に応じて読みやすい形式・扱いやすい形式を選んでください。

より詳細なオプションやフォーマット指定子については、Linux の
date(1) マニュアルページ(英語)
などの公式ドキュメントもあわせて参照してください。

ブログランキングに参加しています。クリックして応援していただけると嬉しいです。

人気ブログランキング
ブログランキング・にほんブログ村へ
にほんブログ村