【Linux】dateコマンドの使い方|よく使うフォーマットと実用例まとめ

Linux

システム開発の業務では、シェルスクリプトなどで試験のログファイルを取得することがあります。
その際、毎回同じファイル名でログファイルを取得してしまうと、
いつ取得したログかが一目で判断できなくなり、作業効率の低下にも繋がります。

そういったことを防ぐための方法の一つとして、
ファイル名にログファイルを取得したときの日時情報を付与する方法があります。

これは、Linux環境の場合、date コマンドを使うことで簡単に実現できます。

しかし、年月日だけ欲しいのか、時分秒まで含めたいのかによって指定方法が変わるため、
細かい指定の調べ直しが発生しやすいコマンドです。

かけりゅー
かけりゅー

筆者自身も、date コマンドを利用することはありますが、
フォーマット指定を調べ直すことも少なくありません。

この記事では、Linux における date コマンドで

  • 現在の日時を確認する方法
  • 任意の形式(フォーマット)でカスタマイズして出力する方法
  • 日付情報をログファイルなどのファイル名に利用する方法

を具体例とともにまとめています。

かけりゅー
かけりゅー

システム開発の業務で使っているコマンドを中心にまとめています。
業務の中でdateコマンドを使う際の参考にしてください。

dateコマンドとは

date コマンドは、Linuxにおいて日時の表示や計算を行うためのコマンドです。
主に、以下のようなことができます。

  • 現在の日時を、任意の書式(フォーマット)で表示する
  • 指定した日数・月数・年数だけ前後の日時を計算する
  • UNIXタイム(エポック秒)と、人が読める日時を相互に変換する
  • (root権限がある場合)システムの時刻を設定する

このうち、システムの時刻設定は日時を変更する操作であり、
実務での利用頻度が高い「表示・計算」の用途とは性質が異なるため、本記事では扱いません。

なお、本記事は、一般的なLinux環境で利用される GNU date を前提としています。

dateコマンドの基本構文

date [OPTION]... [+FORMAT]

+FORMAT を指定することで日時の表示形式を変更できます。
後述で詳しくまとめていますが、+%Y%m%d を指定すると「20260109」のような形式で出力されます。

dateコマンドの基本的な使い方

現在の日時を出力する

$ date
Fri Jan  9 00:24:37 JST 2026

上記は、オプションなしで dateコマンドを実行した場合の例です。
出力形式はロケールやタイムゾーンなど環境によって異なる場合がありますが、
このように「曜日、月、日、時刻、タイムゾーン、年」が表示されます。

任意の形式(フォーマット)で日時を出力する

dateコマンドを実行する際、形式(フォーマット)を指定することで、
日時の出力形式を自由にカスタマイズすることができます。

よく使われるフォーマットは以下があります。

フォーマット説明
%Y西暦(4桁)
%y西暦(下2桁)
%m月(01~12)
%d日(01~31)
%H時(00~23)
%M分(00~59)
%S秒(00~59)

これらのフォーマットを組み合わせて出力する例が以下です。

$ date +%Y%m%d
20260109

%Yは年(西暦)%mは月%dは日を表しています。

次のように%H、%M、%Sを指定することで、時・分・秒も出力できます。

$ date "+%Y-%m-%d %H:%M:%S"
2026-01-09 00:30:10

フォーマットに半角スペースを含みたい場合は、
シングルクォート(’)やダブルクォート(”)で囲んで指定します。

現在からn日後・n日前などの日付を出力する

--date オプションに相対的な期間を指定することで、未来の日付を出力できます。
このとき、負の数や “ago” を付けることで、過去の日付を出力することもできます。

用途コマンド例出力例
1日後date +%Y%m%d –date ‘1 day’20260110
1日前date +%Y%m%d –date ‘1 day ago’20260108
1ヶ月後date +%Y%m%d –date ‘1 month’20260209
1年後date +%Y%m%d –date ‘1 year’20270109

【補足】
月・年の計算した結果が、対象月に存在しない日付だった場合に繰り上がる仕様となっています。

  • 5/31を起点に1ヶ月後を計算すると、6/31は存在しないため、7/1が出力されます。
  • 2024/02/29(うるう年)を起点に1年後を計算すると、
    2025年はうるう年でないため、2025/03/01が出力されます。

1970年01月01日 0:00:00(UTC)からの経過秒数を出力する

次のようにコマンドを実行することで、
1970年01月01日 0:00:00(UTC)からの経過秒数を出力できます。

$ date +%s
1767974479

秒単位のタイムスタンプはスクリプト処理や計算で扱いやすい形式です。

ただ、人間が見る場合は、前述の年月日・時分秒フォーマットの方が見やすいため、
次のようにコマンドを実行して、取得した経過秒数を年月日_時分秒に変換します。

$ date +%Y%m%d_%H%M%S --date="@1767974479"
20260110_010119

筆者は、これまでに経験した業務でも利用したことはありませんが、
UNIX時間を扱うシステムの開発業務などで、人が読める日時へ変換する際に使用することがあります。

現在時刻を高精度(ミリ秒・マイクロ秒・ナノ秒)で出力する

%N は現在時刻の小数点以下(ナノ秒)を出力するフォーマットです。
%の後ろに数字を付けることで、小数点以下の桁数を指定できます。
これらは、高精度な時刻情報が必要な処理(ログのタイムスタンプ比較など)で利用します。

指定意味出力例
%3Nミリ秒(小数点以下3桁)20260110_01:08:28.860
%6Nマイクロ秒(小数点以下6桁)20260110_01:08:45.260406
%Nナノ秒(小数点以下9桁)20260110_01:08:55.505259662

dateコマンドの実用例

dateコマンドの出力をファイル名に利用する

$ ./script.sh > test_$(date +%Y%m%d_%H%M%S).log

上記は、script.sh(任意の実行スクリプト)の出力を、
date +%Y%m%d_%H%M%S の結果を使ったファイル名に保存する例です。

これにより、実行した日付や時刻がわかるログファイルとして簡単に残すことができるため、
ログファイルの管理やシェルスクリプトの実行履歴の整理で便利です。

筆者もシステム開発の実務でシェルスクリプトを実行する際に、
出力ログを記録として残すためにこの方法を常用しています。

また、viなどのテキストエディタで新規ファイルを作成する際にも、
以下のように実行することで、dateコマンドの出力をファイル名として利用できます。

$ vi test_$(date +%Y%m%d_%H%M%S).txt

古いログファイルを自動削除する

find コマンドと組み合わせることで、一定期間より古いログファイルだけを削除できます。

$ find /var/log/myapp -name "*.log" -mtime +7 -delete

上記は、最終更新から7日を超える(=8日以上前)ログファイルを削除する例です。
シェルスクリプトに組み込んで定期実行することで、ログの肥大化を防ぐことができます。

-delete は実際にファイルを削除するオプションです。
初めて使う際は -delete を外して実行結果を確認してから、-delete を追加することをおすすめします。

まとめ

この記事では、Linuxにおける dateコマンドの基本的な使い方についてまとめました。

dateコマンドを使用することで、次のようなことが簡単に行えます。

  • 現在の日時を確認する
  • 任意の形式(フォーマット)で日時を出力する
  • ファイル名などに日付を付与する

ファイル操作系・検索系コマンドと比べると、date コマンドの使用頻度は少ないです。

かけりゅー
かけりゅー

dateコマンドの使い方を覚えておくことで、
ログファイルを整理するときなどに役に立ちます。

参考リンク

GNU Coreutils公式マニュアル:dateコマンド

コメント