「あれ…?ログファイルのタイムスタンプがずれてる!障害の原因が追えない!」 「バッチ処理が指定した時間に動かない!なんで!?」 「セキュリティ認証がエラーになるんだけど、もしかして時刻が狂ってる…?」
Linuxシステムを管理していると、そんな「時刻のズレ」問題に直面して、もうパニックになっちゃいそう…!そんな状態で、慌てて「linux 時間確認」とか「linux 時刻設定」なんて検索して、このページにたどり着いてくれたんじゃないでしょうか。
わかります、わかります!私も全く同じ経験があります。 システムの動作が不安定になったり、最悪の場合、データ整合性が取れなくなったり…「もしかして、システム壊れた…?」「原因不明のトラブルだ…」って、もう冷や汗が出ちゃいますよね😥
でも、大丈夫です!
その焦る気持ち、よーくわかります。でも、慌てるのはまだ早いですよ!
これらの時刻ズレ問題の多くは、Linuxの時刻管理の仕組みをちゃんと理解して、適切な設定(特にNTPによる時刻同期)を行えば、しっかり解決できるんです。
この記事は、そんな「Linuxの時刻が合わない!」地獄に陥ってしまったあなたを救うための、安全な対処法をステップバイステップで徹底的に解説する「完全ガイド」です✨
「linux 時間確認」の基本である date コマンドの使い方(「linux date フォーマット」も徹底解説します!)から、timedatectl コマンドを使った最新の「linux 時刻設定」や「linux 時刻同期」の方法、さらにはシステムの「linux 起動時間 確認」(uptime)に至るまで。
私と一緒に、一つずつ冷静に確認していきましょうね😇
Linuxにおける時刻管理の基本:2つのクロック
Linuxの時刻管理をちゃんと理解するには、まず「2種類の時計」が動いているってことを知っておく必要があるんです。
え?2種類?って思うかもしれませんが、この2つの時計の役割と関係性を知っておくことが、時刻ズレトラブルを解決するための、とっても大事な第一歩になるんですよ!
システムクロック (System Clock) とは?
システムクロックっていうのは、Linuxカーネルが管理している「メモリ上の時計」のことです。
OSが動いている間、「今、何時何分かな?」って認識するために使われるメインの時計で、私たちが date コマンドで確認しているのは、まさにこのシステムクロックの時刻なんですね。
この時計は、OSが起動している間だけ動作(カウントアップ)する、っていう特徴があります。
ハードウェアクロック (Hardware Clock / RTC) とは?
ハードウェアクロックっていうのは、マザーボード上に搭載されているRTC(Real-Time Clock)チップが管理する「物理的な時計」です。
こっちは物理的な部品なので、システムの電源がオフになっている間も、マザーボード上のCMOSバッテリーっていう小さな電池の力で、ずーっと動き続けてくれるんです。
ハードウェアクロックの主な役割は、OSが起動する時に「現在の時刻」をシステムクロックに教えてあげる(設定してあげる)ことなんですよ。 この時計は hwclock コマンド(または timedatectl 経由)で操作することができます。
2つのクロックの関係性と同期の重要性
Linuxシステムの時刻は、だいたい以下のような流れで管理されています。
- システム起動時: まず、物理的な時計であるハードウェアクロック (RTC) の時刻を読み込みます。そして、それを基にメモリ上のシステムクロックを設定します。
- システム稼働中: OSはシステムクロックをメインに使います。もしNTPによる時刻同期が有効になっていると、システムクロックはインターネット上の正確な時刻と定期的に同期されて、ズレが補正され続けます。
- システム終了時: (ディストリビューションや設定にもよりますが) NTPで正確になったシステムクロックの時刻を、今度はハードウェアクロック (RTC) に書き戻してあげます。
この連携がうまくいかないと、「起動するたびに時刻がずれる」「NTPで同期しても再起動すると元に戻っちゃう」みたいな、イライラする問題が発生しちゃうんです😫
でも、大丈夫です! 現代のLinux(systemd が主流のもの)では、これらの面倒な管理を timedatectl コマンドが自動的に、いい感じにやってくれるので、管理者が2つの時計を強く意識しなきゃいけない場面は、ずいぶん減ってるんですよ。
1. Linuxで現在の時刻・日付を確認する方法 (date)
Linuxで現在の時刻や日付を確認する(「linux 時間確認」や「linux 現在時刻」)ための、最も基本的で、かつ強力なコマンドが date です。
最も基本的な date コマンドの使い方
ターミナルで、もう単純に date と入力して実行するのが、一番カンタンな使い方ですよね。
$ date 2025年 11月 13日 木曜日 02:30:45 JST
この出力には、年月日、曜日、現在の時刻、そしてタイムゾーン(この場合は JST: 日本標準時)が、ぜんぶ含まれています。
デフォルトの表示形式は、システムの「ロケール」(言語や地域設定)によって、日本語だったり英語だったり、異なる場合があるんですよ。
あと、-u オプションを付けると、UTC(協定世界時)での現在時刻を表示できます。 システム内部のログやグローバルなサービスなんかでは、このUTCが基準(世界共通の時間)となることがすっごく多いので、覚えておくとめちゃくちゃ便利です!
$ date -u 2025年 11月 12日 水曜日 17:30:45 UTC
(JSTはUTC+9時間なので、上の例では、ちゃんと9時間前の時刻が表示されていますね!)
【徹底解説】date コマンドのフォーマット指定(linux date フォーマット)
date コマンドの真価は、なんといっても出力フォーマットを自由自在にカスタマイズできる点にあります!(「linux date フォーマット」のキモですね)
これは、+ に続けて、フォーマット指定子(%Y とか %m みたいな記号)を記述することで実現できるんです。
例えば、「YYYY-MM-DD HH:MM:SS」っていう、プログラムとかで扱いやすい国際標準(ISO 8601)に近い形式で表示したいなーって思ったら、以下のように実行します。
$ date '+%Y-%m-%d %H:%M:%S' 2025-11-13 02:30:45
このフォーマット指定は、シェルスクリプトを作ったり、ログファイルに出力したり、機械的に日時を処理するような場面では、もう本当に本当に重要なんです!
よく使われる主要なフォーマット指定子を、以下の表にまとめておきますね!
表1: date コマンド 主要フォーマット指定子一覧
| 指定子 | 説明 | 例 (2025年11月13日 02:30:45 の場合) |
|---|---|---|
%Y |
年 (西暦4桁) | 2025 |
%y |
年 (西暦下2桁, 00-99) | 25 |
%m |
月 (2桁, 01-12) | 11 |
%d |
日 (2桁, 01-31) | 13 |
%H |
時 (24時間表記, 2桁, 00-23) | 02 |
%I |
時 (12時間表記, 2桁, 01-12) | 02 |
%M |
分 (2桁, 00-59) | 30 |
%S |
秒 (2桁, 00-60) ※うるう秒対応 | 45 |
%F |
%Y-%m-%d と同義 (ISO 8601形式の日付) |
2025-11-13 |
%T |
%H:%M:%S と同義 (24時間表記の時刻) |
02:30:45 |
%s |
UNIX時間 (1970-01-01 00:00:00 UTCからの経過秒数) | (例: 1762987845) |
%A |
曜日のフルネーム (ロケール依存) | Thursday (または 木曜日) |
%a |
曜日の省略形 (ロケール依存) | Thu (または 木) |
%Z |
タイムゾーンの省略形 | JST |
%z |
タイムゾーンのオフセット (例: +0900) | +0900 |
特に %s (UNIX時間) は、システム間で時刻を数値として(タイムゾーンを気にせず)扱う場合に、もうめちゃくちゃ重要ですよ!
実践的! date フォーマットの活用例
date のフォーマット指定は、単に表示を変えるだけじゃなくて、ファイル名やログメッセージに「今の日時」を埋め込むために、すっごく広く使われます。
▼例1: 日時をファイル名に含めたバックアップファイルを作成する $(...) っていう構文(コマンド置換)と組み合わせるのが定番テクニックですね。
例: backup_20251113_023045.tar.gz というファイル名を作成 $ tar -czvf backup_$(date +%Y%m%d_%H%M%S).tar.gz /var/www/html
▼例2: スクリプトのログ出力にタイムスタンプを付与する
スクリプト内で実行 $ echo "[$(date '+%Y-%m-%d %T')] 処理を開始しました。" >> /var/log/my_batch.log
▼例3: 過去や未来の日付を表示する (-d オプション) date コマンドは -d (または --date) オプションを使うことで、「今」以外の時刻を基準にフォーマット表示させることもできるんです!これがまた便利で…。
昨日の日付 $ date -d '1 day ago' +%F 2025-11-12 明日の日付 $ date -d 'tomorrow' +%F 2025-11-14 1時間後 $ date -d '1 hour' +%T 03:30:45 特定の日付のUNIX時間を取得 $ date -d '2025-01-01 00:00:00' +%s 1735689600
こんな風に、date コマンドは「linux 時間確認」だけじゃなくて、日付や時刻を使った高度な処理の、まさに基盤となるコマンドなんですよ💪
2. Linuxの時刻・日付を手動で設定・変更する (date / timedatectl)
(関連キーワード: linux 時刻設定, linux 日付 変更)
次に、Linuxのシステム時刻を、もし手動で設定・変更したい!っていう時の方法を解説しますね。
なぜ手動設定が必要か?(注意点)
⚠️ちょっと待って!まず大事な注意点です!⚠️
まず大前提として、今のサーバー管理において、時刻の手動設定は、原則として非推奨です!
インターネットに繋がってるサーバーなら、絶対に後で説明するNTP(時刻同期)を有効にするべきなんです。
もしNTPが有効な状態で時刻を手動設定しちゃうと、NTPクライアントが次に同期したタイミングで、せっかく設定した時刻が自動的に上書きされちゃうんですよ…!😥
じゃあ、どんな時に手動設定が必要になるかっていうと、本当に限定的なケースだけです。
- インターネットに接続されていない、完全にオフライン(クローズド)な環境で動かしてるサーバー。
- 仮想マシンが起動した時に、なぜか時刻がすっごく(何日も)ずれちゃってて、NTP同期がうまく失敗しちゃう時の一時的な修正として。
- 時刻のズレをわざと発生させてテストしたい時、とか。
(従来の方法) date コマンドによる時刻設定
昔からある伝統的な方法として、date コマンドは時刻の「設定」にも使われてきました(-s または --set オプションを使います)。
これを使うには、もちろん root 権限(sudo)が必要ですよ。
"YYYY-MM-DD HH:MM:SS" の形式で設定 $ sudo date -s "2025-11-13 03:00:00"
ただ、このコマンドって「システムクロック」(メモリ上の時計)しか変更してくれないんです。
だから、この変更を永続化(再起動後も反映)させるには、変更したシステムクロックの時刻を、わざわざ「ハードウェアクロック (RTC)」(物理的な時計)にも書き込んであげる必要があったんですね。
システムクロックの時刻をハードウェアクロックに書き込む $ sudo hwclock -w
この2段階の操作が必要だったので、date コマンドでの手動設定って、結構めんどくさかったんです…。
(推奨) timedatectl コマンドによる時刻設定
そこで登場するのが、systemd が主流となった現代のディストリビューション(RHEL/CentOS 7以降, Ubuntu 16.04以降など)の標準、timedatectl コマンドです! これを使うのが、はるかにカンタンで安全なんですよ😇
timedatectl で時刻を設定する場合、事前にNTP同期を無効化するっていうのが、大事なポイントです。
1. NTP同期を無効化 $ sudo timedatectl set-ntp false 2. 時刻を設定 (YYYY-MM-DD HH:MM:SS) $ sudo timedatectl set-time "2025-11-13 03:00:15"
timedatectl set-time コマンドは、なんとシステムクロックとハードウェアクロックの両方を、一発で適切に更新してくれるんです! だから、さっきの hwclock -w みたいなのを、わざわざ別途実行する必要はありません。すっごく楽ちんですよね!
日付だけ、とか、時刻だけ、を変更することもできますよ。
日付のみ変更 $ sudo timedatectl set-time "2025-11-14" 時刻のみ変更 $ sudo timedatectl set-time "03:10:00"
作業が終わったら、可能であれば、忘れずにNTP同期を再度有効に戻しておきましょうね!
NTP同期を再度有効化 $ sudo timedatectl set-ntp true
3. (最重要) Linuxの時刻を自動で同期する方法 (timedatectl / ntp)
(関連キーワード: linux 時刻同期)
ここからが、この記事で一番大事なところです! Linuxシステムの時刻を、常に正確に保つための最も重要で、かつ標準的な方法。それが、NTP (Network Time Protocol) による「linux 時刻同期」です。
なぜ時刻同期 (NTP) が不可欠なのか?
システムの時計(システムクロック)って、実はそんなに正確じゃないんです…。 ハードウェアの個体差とか、サーバーが置いてある部屋の温度変化とか、色々な要因で、時間が経つにつれて必ずわずかにズレ(ドリフト)が生じちゃうものなんですよ。
このわずかなズレを放置しておくと、もう本当に深刻な問題を引き起こしちゃうんです…!
- ログの不整合: 複数のサーバーで障害調査をしようにも、ログのタイムスタンプがバラバラだったら、もう何がどの順番で起こったのか、追跡がめちゃくちゃ困難になっちゃいますよね😭
- 認証エラー: Kerberos認証みたいに、時刻の正確さが前提になってるシステムだと、一定以上(例えば5分とか)時刻がズレてるだけで、認証自体が失敗しちゃうんです。
- データの整合性: 分散データベースとかファイルシステムだと、ノード(サーバー)間の時刻が同期してないと、データの順序がおかしくなったり、最悪の場合、データが壊れちゃう可能性もあります。
- SSL/TLS証明書: システム時刻が何日もズレてたりすると、SSL証明書の有効期限を間違って判定しちゃって、HTTPS通信が全部失敗する、なんてことも…。
- ジョブ実行エラー:
cronなんかで設定したバッチ処理が、意図しない時刻に実行されたり、逆に実行されなかったりします。
ね? 想像しただけで恐ろしいですよね…? これらの問題をぜんぶ回避するために、インターネット上の高精度な「NTPサーバー」(正確な時刻情報を提供してくれる専門のサーバー)と定期的に通信して、自分のシステムの時刻を自動で補正し続けるのが、NTP同期の役割なんです!
現代の標準:systemd-timesyncd (timedatectl)
最新の多くのLinuxディストリビューションでは、systemd-timesyncd っていう、シンプルで優秀なNTPクライアントが最初から組み込まれていて、それを timedatectl コマンドでカンタンに管理できるんです。
timedatectl は、時刻同期の管理だけじゃなくて、タイムゾーンの管理とか、手動設定とかを、ぜんぶ一元的に行えるスグレモノなんですよ。
1. 現在の状態を確認する (status)
まずは、timedatectl (または timedatectl status) を実行して、今の設定状況を確認してみましょう!
$ timedatectl Local time: 木 2025-11-13 02:30:45 JST Universal time: 水 2025-11-12 17:30:45 UTC RTC time: 水 2025-11-12 17:30:45 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no
この出力で、私たちが確認すべき重要な項目は、以下の3つです!
Time zone:Asia/Tokyoみたいに、自分が意図したタイムゾーンになってますか?(ここがズレてると、時刻が9時間とか、変な時間ずれちゃいますよ!)System clock synchronized: ちゃんとyesになってますか? もしnoだったら、同期が取れてないってことです😥NTP service: ちゃんとactiveになってますか? もしinactiveだったら、NTP同期自体が無効になっちゃってます…。
(※ちなみに RTC in local TZ は no が推奨です。yes だと、ハードウェアクロックがローカルタイム(JST)で動いちゃってて、特にWindowsとのデュアルブート環境とかじゃなければ、トラブルの原因になることがあるんです。)
2. NTP同期の有効化・無効化 (set-ntp)
もし、さっきの確認でNTP同期が inactive になっちゃってたら、以下のコマンドで有効化しましょう!
$ sudo timedatectl set-ntp true
逆に、さっきの手動設定をやるために一時的に無効化したい時は false を指定するんでしたよね。
$ sudo timedatectl set-ntp false
ちなみに、systemd-timesyncd がどこのNTPサーバーに同期しに行くかっていう設定は、通常 /etc/systemd/timesyncd.conf っていうファイルに書かれていますよ。
タイムゾーンの設定と確認
「なんか時刻が数時間(ちょうど9時間とか)ズレてるんだけど!?」っていう場合。
それ、NTP同期の問題じゃなくて、ほぼ100%「タイムゾーン」の設定ミスが原因です!
1. 利用可能なタイムゾーン一覧の表示 timedatectl list-timezones って打つと、設定可能なタイムゾーンの、すっごい膨大なリストが表示されます。
$ timedatectl list-timezones ... Africa/Abidjan America/New_York Asia/Shanghai Asia/Tokyo ... Europe/London ...
こんな時は、grep と組み合わせて絞り込むのが便利ですよ。
"Tokyo" を含むタイムゾーンを検索 $ timedatectl list-timezones | grep Tokyo Asia/Tokyo
2. タイムゾーンの変更 set-timezone サブコマンドでタイムゾーンを変更します。 私たちが住んでる日本標準時(JST)にする場合は、Asia/Tokyo を指定すればOKです!
タイムゾーンを東京に変更 $ sudo timedatectl set-timezone Asia/Tokyo
変更したら、もう一度 timedatectl status を実行して、Time zone が Asia/Tokyo (JST, +0900) にちゃんとなってるか、しっかり確認してくださいね!
4. 高度な時刻同期:NTPの仕組みと chrony の活用
さっき紹介した systemd-timesyncd って、導入もカンタンだし、リソースもあんまり食わないし、すっごく優秀なNTPクライアントなんですけど、機能は結構シンプルなんです。
もし、もっともっと高精度な同期が必要だったり、あるいは自分のサーバーを「NTPサーバー」として他のPCに時刻を配信したい!なんていう場合は、chrony っていう、また別のNTPデーモンが使われることが多いんですよ。
(ここは、ちょっと上級者向けというか、より深く知りたい人向けのセクションです!💪)
NTP (Network Time Protocol) の仕組みとは?
NTPっていうのは、ネットワーク経由で時刻を同期するためのプロトコルなんですけど、実はただ時刻を問い合わせて、ハイ終わり、っていう単純なものじゃないんです。
NTPは「階層構造(Stratum)」っていうのを持ってて、より正確な時刻ソース(源泉)に近いサーバーほど「上位」として扱われる仕組みになってるんですね。
- Stratum 0: 原子時計とか、GPS衛星とか、時刻の「基準」そのものになる物理的なデバイスです。
- Stratum 1: Stratum 0 (原子時計とか) に直接ケーブルとかで接続されて、時刻情報をゲットするサーバーです。例えば、日本のNICT(情報通信研究機構)さんが運用してるNTPサーバーなんかがこれにあたります。
- Stratum 2: Stratum 1 のサーバーから時刻同期を行うサーバーです。私たちがよく使わせてもらう、一般的なプロバイダさんとか組織のNTPサーバーが、だいたいこれですね。
- Stratum 3以下: Stratum 2 のサーバーから同期を行うサーバーです。
私たちが普段使ってるPCやサーバーは、だいたい Stratum 2 か Stratum 3 のNTPサーバーに「今何時ですかー?」って接続しに行く、っていうイメージですね。
ntpd / ntpdate から chrony / systemd-timesyncd への移行
ずーっと昔(CentOS 6以前とか)は、ntpd っていうデーモンと、ntpdate っていうコマンド(起動する時に一回だけ同期するやつ)の組み合わせが主流だったんです。
でも、ntpd は安定はしてるんだけど同期にちょっと時間がかかったり、ntpdate は ntpd が動いてると使えなかったり、いくつか使いづらい課題があったんですね。
systemd-timesyncd は、それらを置き換える、もっとシンプルな「SNTPクライアント(簡易NTP)」として登場しました。
そして、chrony (デーモン名は chronyd) は、ntpd よりも新しいNTP実装で、特に以下の点ですっごく優れてるんです!
- 同期速度が速い: ネットワーク接続が不安定な環境(例えば、ノートPCをスリープさせたり、仮想マシンを一時停止させたり)でも、
ntpdよりずっと高速に時刻を同期できるんです。 - リソース消費が少ない:
ntpdよりも軽量なんですよ。 - 高精度:
ntpdと同等か、それ以上の精度を提供してくれます。
こういう理由から、RHEL/CentOS 7以降のディストリビューションでは、ntpd の代わりに chrony がデフォルトのNTP実装として採用されてるんですね。
chrony の設定と管理
systemd-timesyncd と chrony は、基本的にはどっちか一方しか有効にできません。 chrony をインストールすると、systemd-timesyncd の方は自動的に無効化されることが多いですよ。
1. インストールと起動
RHEL/CentOS系 $ sudo dnf install chrony Debian/Ubuntu系 $ sudo apt install chrony
インストールが終わったら、サービスを起動して、PC起動時に自動で動くように「自動起動」も有効にしておきましょう。
$ sudo systemctl start chronyd $ sudo systemctl enable chronyd
2. 設定ファイル (/etc/chrony.conf) 設定ファイルで、どこのNTPサーバーに同期しに行くかを指定します。pool ディレクティブっていうのを使うのが一般的ですね。
/etc/chrony.conf の例 (RHEL/CentOS系デフォルト) pool 2.centos.pool.ntp.org iburst (日本国内のサーバーを指定する例) server ntp.nict.jp iburst server ntp.jst.mfeed.ad.jp iburst
iburst っていうオプションは、起動した時に素早く同期を開始するための、推奨オプションです!
3. 同期状態の確認 (chronyc) chrony の状態を確認するには、chronyc っていう専用のコマンドを使います。
同期先サーバーの状態を確認 $ chronyc sources -v
この出力結果の先頭に ^* っていう印が付いてるサーバーが、今まさに同期対象として選ばれてるサーバーですよ。
同期状態の概要 $ chronyc tracking Reference ID : 249.224.99.213 (ntp-b3.nict.go.jp) Stratum : 2 Ref time (UTC) : Wed Nov 12 17:45:30 2025 System time : 0.000000123 seconds slow of NTP time ...
おー! Stratum が 2 になってて、システムのズレ(System time)も、すっごく小さい(ほぼゼロ)ことがわかりますね!完璧です✨
4. 手動での即時同期 chrony は通常、時刻を「じわじわ~」っと合わせる(Slewモード)ことで、システムへの急激な影響を最小限にしてくれるんです。 でも、起動時とかに時刻が、もうとんでもなく(何時間も)ズレちゃってる場合、makestep っていうコマンドで「今すぐ!即座に!」時刻を合わせる(Stepモード)こともできるんです。
$ sudo chronyc makestep
表2: Linux時刻同期サービスの比較
systemd-timesyncd と chrony、そして昔ながらの ntpd の違いを、表にまとめてみました。
表2: Linux時刻同期サービスの比較
| 機能 | systemd-timesyncd (timedatectl) |
chronyd (chrony) |
ntpd (ntp) |
|---|---|---|---|
| 主な用途 | クライアント(デスクトップ、サーバー) | クライアント / サーバー(高精度) | クライアント / サーバー(従来型) |
| NTPサーバー機能 | なし(SNTPクライアントのみ) | あり | あり |
| 同期速度 | 高速(システム起動時) | 非常に高速(ネットワークの不安定さに強い) | 安定(同期までに時間がかかる場合あり) |
| リソース消費 | 非常に少ない | 少ない | 中程度 |
| デフォルト採用 | Debian, Ubuntu, Arch Linuxなど | RHEL/CentOS 7+, SUSEなど | 古いディストリビューション |
| 推奨環境 | ほとんどのクライアント、仮想マシン | 高精度が求められるサーバー、NTPサーバー構築時 | レガシーシステムとの互換性が必要な場合 |
ほとんどの普通のユースケースでは systemd-timesyncd (timedatectl) だけで、もう十分すぎるくらいです。 でも、RHEL/CentOS系を使う場合や、より厳密な時刻管理が求められるサーバーを立てるぞ!っていう時は、chrony の利用が推奨されてるんですね。
5. Linuxの起動時間(稼働時間)を確認する方法
(関連キーワード: linux 起動時間 確認)
時刻の管理と並んで、システム管理者がよーく確認するのが、「このシステム、いつ起動したっけ?」「どれくらいの期間、連続で動いてるんだろ?」っていう情報です。
これは、uptime コマンドで、すっごくカンタンに確認できるんですよ(「linux 起動時間 確認」ですね!)。
uptime コマンドによる確認
最も基本的なコマンドが、この uptime です。
$ uptime 02:45:10 up 10 days, 4:15, 1 user, load average: 0.05, 0.10, 0.08
この一行の出力には、4つのすっごく重要な情報が含まれてるんです。
- 現在時刻:
02:45:10(今、この時間だよ) - 稼働時間 (up):
up 10 days, 4:15(システムが起動してから、もう10日と4時間15分が経過してるよ) - ログインユーザー数:
1 user(今、1人のユーザーがログインしてるよ) - ロードアベレージ:
load average: 0.05, 0.10, 0.08(システムの負荷状況だよ)
ロードアベレージとは何か?
uptime のオマケみたいについてくる、この「ロードアベレージ」って、実はシステムの負荷状態を示す、めちゃくちゃ大事な指標なんです。
これは、過去「1分間」「5分間」「15分間」の平均的な「実行待ちタスク数+実行中タスク数」を示してるんですね。
よく「CPU使用率」と混同されちゃうんですけど、厳密にはちょっと違います。
- CPU使用率: CPUが「計算中」である時間の割合(例:CPU 80%使用中)
- ロードアベレージ: CPUの処理を「待っている」タスクの行列の長さ(例:3つのタスクがCPU待ち)
すっごくざっくりした目安ですけど、この値が、ずーっとCPUのコア数を超え続けてるようなら、そのシステムは処理しきれないタスクを抱えちゃってて、高負荷状態(CPUがボトルネックになってる)って判断できるんです。
uptime -s (since) による起動日時の確認
uptime は「どれくらい動いてるか(稼働時間)」を表示してくれましたけど、「じゃあ具体的に、何月何日の何時に起動したの?」っていう、その瞬間を知りたい時もすっごく多いですよね。
そんな時は、-s (または --since) オプションを使うんです!
$ uptime -s 2025-11-03 22:30:05
これだけで、YYYY-MM-DD HH:MM:SS 形式で、システムが最後に起動した正確な日時が、一発でわかっちゃうんですよ!便利ですよねー!
w コマンドや who コマンドとの違い
uptime と似たような情報を表示するコマンドとして、w や who があります。
▼w コマンド: w は、uptime の情報(1行目)に加えて、今ログインしているユーザーの一覧と、そのユーザーが「今まさに実行してるプロセス」(WHAT 列)を、もっと詳細に表示してくれます。
$ w 02:50:15 up 10 days, 4:20, 1 user, load average: 0.01, 0.05, 0.07 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT gemini pts/0 192.168.1.100 01:15 0.00s 0.03s 0.00s w
▼who コマンド: who -b (または who -r) を使うことでも、起動日時を確認できますよ。
システムの起動日時を表示 $ who -b system boot 2025-11-03 22:30
last コマンドによる再起動履歴の確認
「前回の起動はいつだったっけ?」みたいに、過去の起動履歴(再起動の履歴)を確認したいなーって時は、last reboot コマンドを使います。
このコマンドは /var/log/wtmp っていうファイル(ログイン履歴がぜんぶ記録されてるファイル)を読み込んで、reboot っていう特別なユーザーのログイン履歴(=つまり、システムの起動)だけを表示してくれるんです。
$ last reboot reboot system boot 5.15.0-88-generi Mon Nov 3 22:30 still running reboot system boot 5.15.0-87-generi Sat Nov 1 09:05 - 22:29 (2+13:24) wtmp begins Sat Nov 1 09:05:01 2025
これを見ると、今(still running)の起動が Nov 3 22:30 だったこと、その前の起動は Nov 1 09:05 で、Nov 3 22:29 まで動いてた(稼働時間 2日と13時間24分)こと、なんかが分かっちゃうんですね。
Linux時刻管理のトラブルシューティング
(ここは、時刻トラブルで本当に困った時のための、ちょっとディープなトラブルシューティングセクションです!🔥)
Linuxの時刻管理で発生する問題って、もう、そのほとんどが「NTP同期」か「タイムゾーン設定」の、どっちか(あるいは両方)に原因があるんです。
ケース1:時刻が徐々にずれていく
症状: 時刻を一度手動でバッチリ合わせても、数日経つと、また数秒〜数分ずれてる…。 原因: NTPによる自動時刻同期が有効になっていません! 対処: timedatectl status を確認して、NTP service: active になってない場合は、sudo timedatectl set-ntp true を実行して、NTP同期を今すぐ有効化してください!
ケース2:時刻が数時間(例:ちょうど9時間)ずれている
症状: date で表示される時刻が、実際の時刻と、なぜか数時間単位で(例:日本なのにUTCの時刻が)表示されちゃう。 原因: はい、これはタイムゾーン設定が間違ってます、ほぼ確定です! 日本(JST, UTC+9)のサーバーなのに、設定が UTC (UTC+0) になってたりすると、9時間遅れた時刻が表示されちゃうんですね。 対処: timedatectl status で Time zone を確認してください。日本国内のサーバーだったら、sudo timedatectl set-timezone Asia/Tokyo を実行して、タイムゾーンをビシッと修正しましょう!
ケース3:NTP同期が失敗する (System clock synchronized: no)
症状: timedatectl status を見ても、System clock synchronized: が、いつまで経っても yes にならない…(no のまま)。 原因1: ファイアウォールがNTPポート (UDP 123) をブロックしちゃってる。 対処1: サーバー自身のファイアウォール(firewalld とか ufw とか)や、オフィスのネットワーク経路上のファイアウォール設定を確認して、NTPサーバー(ターゲットは任意)への UDP 123 ポート(アウトバウンド)の通信を許可してあげてください。
原因2: NTPサーバーに到達できない(DNSで名前解決ができない、またはNTPサーバー自体がダウンしてる)。 対処2: 設定されてるNTPサーバー(例: ntp.nict.jp)に対して、ping や nslookup (または dig) で、ちゃんと名前解決とネットワーク疎通ができるか確認してみてください。 /etc/systemd/timesyncd.conf (timesyncdの場合) や /etc/chrony.conf (chronyの場合) を確認して、別の利用可能なNTPサーバー(例えば time.google.com とか、契約してるプロバイダさんが提供してるNTPサーバーとか)を指定してみるのも手です。
原因3: 時刻が、もうとんでもなく(例: 数日以上)ずれすぎている。 対処3: NTPって、あんまりにも時刻がズレすぎていると、逆に自動補正しない(または、補正にすっごい時間がかかる)ように設定されてる場合があるんです。 そういう時は、sudo timedatectl set-ntp false で一度NTPを切ってから、sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS" で、おおよその現在時刻に手動で設定しちゃいます。その上で、再度 sudo timedatectl set-ntp true を実行してみてください。 (もし chrony を使ってるなら、sudo chronyc makestep で強制的に同期を試みるのが早いです!)
ケース4:再起動すると時刻がリセットされる(大幅にずれる)
症状: NTPで同期してて、動いてる間は時刻が合ってるのに、システムを再起動すると、時刻がすっごく(例:数年前とかに)戻っちゃう。 原因: これは、ハードウェアクロック (RTC) が狂ってるか、物理マシンの場合はCMOSバッテリーが切れてる可能性が高いです…。NTPで補正されたシステムクロックの時刻が、シャットダウンする時にハードウェアクロックへ正しく書き戻されてない、っていう可能性もありますね。 対処:
- まず、
timedatectl statusでRTC in local TZ: noになってることを確認します(もしyesだったら、sudo timedatectl set-local-rtc 0でUTCに設定し直すことを強く推奨します)。 - NTPでシステムクロックが完全に同期している(
System clock synchronized: yes)状態で、手動でシステムクロックの時刻をハードウェアクロックに書き込んであげます (sudo hwclock -w)。 - これが物理マシン(仮想マシンじゃなくて)で頻発する場合は、マザーボードのCMOSバッテリーが消耗しちゃってるのを疑って、交換を検討してみてください。
ログの確認方法 (journalctl)
「NTP同期がなんで失敗してるのか、もっと詳しく知りたい!」っていう時は、journalctl でデーモンのログ(動作記録)を確認するのが、一番確実です。
▼systemd-timesyncd のログ確認:
$ sudo journalctl -u systemd-timesyncd
「Failed to contact …」みたいな、通信失敗のエラーが出てないか、よーく確認してみてください。
▼chrony (chronyd) のログ確認:
$ sudo journalctl -u chronyd
まとめ
Linuxシステムにおける時刻管理って、地味に見えるかもしれないですけど、システムの安定稼働と信頼性を支える、すっごく大事な基盤なんです。
この記事で解説してきた大事なポイントを、最後にもう一度おさらいしますね!
✅ Linuxの時刻確認: 基本は date コマンドです。「linux 時間確認」だけじゃなくて、date '+%Y-%m-%d %T' みたいな「linux date フォーマット」指定をマスターすると、スクリプト作成とかで、もうめちゃくちゃ役立ちますよ!
✅ Linuxの時刻同期 (NTP): 今のサーバーでは「linux 時刻同期」は、もう必須中の必須です! systemd 環境なら timedatectl コマンドを使って、 でNTP同期を有効にするのが、今の標準です。sudo timedatectl set-ntp true
✅ Linuxの時刻設定(手動): 「linux 時刻設定」や「linux 日付 変更」をもし手動でやるなら、NTPを無効化 (sudo timedatectl set-ntp false) してから sudo timedatectl set-time "..." で行います。 でも、これはオフライン環境とか、本当に限定的な利用に留めておくべき、っていうのを忘れないでくださいね!
✅ タイムゾーン: 時刻が数時間単位でズレてる!?ってなったら、まず sudo timedatectl set-timezone Asia/Tokyo みたいに、タイムゾーン設定を真っ先に見直してください。
✅ 高度な同期: RHEL/CentOS系や、もっと高精度な同期が求められる環境では chrony が使われます。chronyc sources で同期状態を確認します。
✅ 起動時間の確認: 「linux 起動時間 確認」は uptime コマンド、特に uptime -s(起動日時)がすっごく便利です。 システムの負荷状況(ロードアベレージ)も一緒に確認する癖をつけとくと、イケてる管理者っぽいです!
もし、Linuxの時刻がズレて「あれ?」って思ったら、慌てずに、まずは timedatectl status を実行する! そして、「NTP service」が active か、そして「Time zone」が正しいか、っていう2点をしっかり確認することが、問題をすばやく解決するための、最短の近道になりますからね!✨



コメント