コンピューターでの時間管理は多くの理由で不可欠であり、それぞれを綴るのに 1 日かかる場合があります。冗談はさておき、Linux タイムゾーンの効果的な管理をお探しなら、ここが最適です。
このチュートリアルでは、Linux で日付、時刻、およびタイムスタンプを操作する方法を調べて学習します。現在の日付と時刻の出力、未来と過去の日付の計算、タイムゾーンの操作などを行うものもあります。
読み進めて、プロのように時間を計りましょう!
前提条件
このチュートリアルは、実践的なデモンストレーションで構成されています。先に進むには、以下が必要です:
- Linux マシン – このチュートリアルでは Ubuntu 20.04 を使用しますが、最新の Linux ディストリビューションならどれでも動作します。
- テキスト エディタ – 好みのテキスト エディタがない場合は、ほとんどの Linux ディストリビューションにデフォルトでインストールされている nano を使用できます。
date
で現在の日付と時刻を出力する コマンド
プロジェクトのニーズに応じて、計時を行う理由のリストは続きます。ただし、最も一般的な理由は次のとおりです:
- システム ログは、タイムスタンプを使用して、イベントが発生したときのカタログを作成します。
- 多くの場合、ソフトウェア リリースは特定の日付に関連付けられています。
- ネットワーク セキュリティ ツールは、時間ベースの分析を使用して異常を検出します。
- ユーザーは、正確な時間を頼りに予定や会議をスケジュールします。
これらの理由のいずれかにより、最初に実行したいことは、現在の日付と時刻を出力することです。 Linux では、date コマンドと awk コマンドを使用してこのタスクを実行できます。ただし、最初は date コマンドを最初に実行します。
date
を実行します 以下のコマンドをパラメーターなしで実行して、現在の日付と時刻を出力します。
date
以下に示すように、コマンドの出力にはデフォルトで以下が含まれます:
- 曜日 (金曜日 )
- 数字による日 (10 )
- 長い形式の月名 (金曜日) )、および年。
- 日付の後に、24 時間形式の現在のフルタイムとタイムゾーンが続きます。

次に、次のコマンドを実行して、date
とともに使用できるすべての利用可能なオプションを表示します。 コマンド。
date --help

現在の日付をさまざまな形式で出力する
date コマンドだけで、現在の日付と時刻が完全な形式で出力されることがわかりました。ただし、通常は、必要に応じて形式を変更する必要があります。
幸いなことに、date コマンドを使用すると、システムの日付と時刻をさまざまな形式で出力できます。この機能を使用すると、現在の日付と時刻をより適切に視覚化できます。
1. 以下のコマンドを実行して、現在の日付を数値形式 (%D) のみで出力します。
date "+DATE: %D”

おそらく、日付と一緒にタイム ゾーンも表示したいでしょう。その場合は、以下のコマンドのように %Z オプションを追加してください:date “+DATE:%D %Z”

2. 次に、次のコマンドを実行して、現在の日付を MMM YYYY の形式で出力します。 %b オプションは省略された月 (11 月、12 月、1 月など) を出力し、%Y オプションは現在の年を出力します。
date "+DATE: %b %Y"

3. 次に、以下のコマンドを実行して、日付を長い月 (11 月、12 月…) (%B)、DD (%d)、YYYY (%Y) として出力します。
複数のオプションを組み合わせて、出力を希望どおりにフォーマットすることもできます。
date "+DATE: %B %d,%Y"

4. 最後に、ステップ 3 で同じコマンドを実行します。ただし、今回は %I:%M %p オプションを追加して、現在の時刻を出力します。
date "+DATE: %B %d,%Y %I:%M %p"

未来と過去の日付の計算と出力
実際には、将来の日付を計算したい場合があります。なんで?おそらく、特定の日付にタスクを自動的に実行するスクリプトを作成しているでしょう。その場合、--date
を使用して将来の日付を計算します オプションが重宝します。
1. 以下のコマンドを実行して、現在の日付から 40 日後の日付を計算します。必要に応じて、日を週、月、年などに変更できます。
date --date='40 days'
以下に、現在の日付から 40 日後の計算された完全な日付と時刻を示します。

2. 次に、ステップ 1 と同じコマンドを実行します。ただし、今回はオプション (「+%B %d,%Y %I:%M %p」) を追加して、出力形式を変更します。
date --date='40 days' "+%B %d,%Y %I:%M %p"

3. ここで、過去の日付を計算するために負の数を指定して、以下のコマンドを実行します。以下のコマンドは、現在の日付から 1 年前の日付を計算します。
date --date='-1 year’
以下の出力は、過去 1 年間の日付を完全なデフォルト形式で示しています。ただし、フォーマットを変更したい場合は、ステップ 2 で行ったのと同じフォーマットを適用できます。

4. 次に、単位 (週と日) を組み合わせて –date オプションを使用して、以下のコマンドを実行します。以下のコマンドは、現在の日付から 2 週間と 4 日前の日付を計算します。
date --date='-2 weeks -4 days’

5. 最後に、次のコマンドを実行して、次の火曜日の日付を計算します。
--date
の数値形式以外の日付形式も使用できます。 オプション。たとえば、Tuesday
のような完全な月名を使用できます 、または tomorrow
のような相対時間形式 、 next
、 last
など
date --date='next Tuesday'

Bash スクリプトを使用して増分日付を出力する
date コマンドを使用すると、現在、過去、および将来の日付を正しく表示できます。しかし、タイムゾーン、日付、時刻を操作する Bash スクリプトを作成することもできることをご存知でしたか?たとえば、日付を日、週、または月単位でインクリメントします。
日付の増分は、毎日、毎週、または毎月実行する必要がある cron ジョブで作業する場合に役立ちます。
1. date2022.sh という名前の Bash スクリプトを作成します。
2. 次のコードをファイル date2022.sh, s に追加します。 ファイルを保存し、エディターを閉じます。
以下のコードは、今日の日付から次の月曜日の日付まで、各曜日の日付を出力します。
DATE=2022-05-30
for i in {0..6}
do
NEXT_DATE=$(date +%m-%d-%Y -d "$DATE + $i day")
echo "$NEXT_DATE"
done
3. 最後に、以下の bash コマンドを実行して date2022.sh スクリプトを実行します
bash date2022.sh

GNU Awk CLI ツールを使用して現在の日付と時刻を出力する
ここまでで、date
を使用してさまざまな形式で日付と時刻を出力する方法を見てきました。 コマンド、これで十分です。しかし、実際のシステム上であろうとファイルであろうと、日付と時刻を操作する方法が多い方が常に優れています.
他の方法は何ですか? GNU Awk CLI ツール。 Awk は、幅広いタスクに使用できる強力なテキスト処理ツールです。これらのタスクは、ログ ファイルからのデータの抽出、およびテキスト データの操作と分析に限定されません。
ただし、GNU Awk CLI ツールを使用する前に、まずマシンにインストールする必要があります:
1. 以下の apt update コマンドを実行して、システム パッケージ インデックスを更新します。
apt update -y

2. 次に、次の apt install コマンドを実行して、GNU Awk CLI ツールをインストールします。
apt install gawk -y

3. インストールしたら、gawk
を実行します print
へのコマンド 曜日 (%A
)、月 (%B
)、数値の現在の日付 (%d
)、および年 (%Y
) ここで、次の関数:
strftime
関数は日付と時刻をフォーマットします。
- systime 関数は、エポックからの現在のシステム時間を秒単位で返します。
gawk 'BEGIN { print strftime("Today is %A, %B %d, %Y.", systime()) }'
awk を使用すると、人間が判読できる形式で出力をフォーマットできることに注目してください。

4. 最後に、以下のコマンドを実行して、1 か月前の日付を計算して出力します。以下のコマンドは、date コマンドに負の数 (-1) を使用して、前月の最初の日を取得します。
awk -v previous_month="$(date -d "`date +%Y%m01` -1 month" +%Y-%m-%d)" '{print previous_month}'

ファイル内の日付形式の変換
現在のロケールと互換性のない形式の日付を含むファイルがある可能性があります。または、ファイル内の日付が明確でなく、人間が読み取ることができません。その場合は、GNU Awk CLI ツールの使用を検討してください。
任意のテキスト エディターでファイルを作成し、日付形式が不明なファイルに次の行を入力します。ファイルに好きな名前を付けますが、CSV ファイルの名前は test.csv です この例では。
1,ABC,SSS,20-OCT-16,4,1,0,5,0,0,0,0
2,DEF,AAA,20-JUL-16,4,1,0,5,0,0,0,0
次に、以下の awk コマンドを実行して、日付形式を抽出し、YY-MM-DD の人間が読みやすい形式に変換します。 -F オプションは、フィールド区切り文字をカンマまたはダッシュとして設定し、コマンドは希望の形式で日付を出力 (printf) します。
awk -F'[,-]' '{ printf "%s|20%02d-%02d-%02d,%s\\n", $3, $6, (match("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",$5)+2)/3, $4, $10 }' test.csv
以下に示すように、日付形式がより明確になりました。

awk は、日付の比較、ファイルへの日付フィールドの追加、日付の並べ替えなど、さまざまなタスクを実行できる強力なツールであることがわかりました。しかし、それはこの記事の範囲を超えています。
grep
を使用してタイムゾーンを確認する コマンド
現在のタイム ゾーンを確認することは複雑な問題であってはなりません。grep コマンドを使用すると、このステートメントが正しいままになります。 grep コマンドは、幅広いタスクに使用できるもう 1 つの強力なテキスト処理ツールです。
grep コマンドがサポートするタスクには、ログ ファイルからのデータの抽出、テキスト データの操作と分析などがあります。これらの機能を使用すると、grep コマンドで現在のタイム ゾーンを確認することもできます。
次の timedatectl コマンドを単独で実行して、マシンの現在の日付、時刻、タイム ゾーン、および NTP サービスの状態を出力します。
timedatectl
以下に示すように、出力には現在の日付、時刻、およびタイム ゾーンに関するいくつかの情報が表示されます。この情報により、マシンに正しいタイム ゾーンが設定されていることを確認できます。また、ネットワーク上の時刻同期に問題がないことを確認するのにも役立ちます。

grep コマンドについて詳しく調べる前に、タイム ゾーンのリストを確認したい場合があります。その場合は、次のコマンドを実行します:timedatectl list-timezones
次に、マシンの現在のタイム ゾーンを確認して以下を実行する場合は、grep コマンドにパイプされた以下のコマンドを実行します。
- Linux カーネル ファイル (
timedatectl
) から日付、時刻、およびタイム ゾーン情報を取得します。 ). Time zone
に一致するテキスト行を検索して出力します テキスト パターン。
timedatectl | grep “Time zone”
以下に示すように、出力にはマシンに設定されている現在のタイム ゾーンのみが表示されます。

結論
このチュートリアルでは、日付、時刻、および Linux タイムゾーンを照会する多くの実用的な例について説明しました。日付と時刻の形式を操作し、date
を使用して過去と未来の日付を計算する方法を学びました。 指図。 timedatectl
も実行しました と grep
システムのタイムゾーンを確認するコマンド。
では、過去と未来の日付の計算や日付形式の変換などのタスクを自動化するスクリプトをさらに作成してみませんか?それとも、cron ジョブを作成してスクリプトの実行をスケジュールしますか?