LPIC201 の主題200(キャパシティプランニング)で uptimew の出力解釈問題を解いていて、wLOGIN@ 列を「ログイン継続時間」と誤読しかけた。@ は前置詞 at(〜時に)で、ログイン開始時刻 を指す。位置で覚えていると詰むのは top の MiB Mem 行 と同じ構図。本記事では uptime / w 先頭行 / top 1行目が同一書式である「3兄弟」の構造と、w 固有のセッションテーブル列、load average の値域までを 1 本にまとめておく。

vmstatの読み方sarコマンドの読み方topコマンドの読み方 と対になる記事。

uptime / w とは何を見るコマンドか

uptimewシステムの稼働状況とログインセッション を見るコマンド。両者とも procps パッケージに含まれる。

  • uptime: 1 行で完結する最も単純な稼働状況表示
  • w: uptime 先頭行 + ユーザ別セッションテーブルの 2 部構成
  • どちらも CPU 使用率・メモリ・I/O は出さない(これらは top / vmstat / sar 系の役割)

「いつから動いていて、誰がログインしていて、負荷はどうか」だけを見たいときの最短コマンドが uptime、そこに「誰が・どこから・いつから・何をしているか」を加えたのが w

実行形式

uptime [-p|-s]
w [options] [user]
コマンド/オプション意味
uptime(引数なし)既定の 1 行表示
uptime -ppretty 形式(up 2 days, 5 hours, 42 minutes)
uptime -s起動時刻のみ(2026-05-04 03:11:23)
w(引数なし)全ログインユーザのセッションを表示
w -hヘッダ(先頭行 + 列名行)を抑止
w -s短縮表示(LOGIN@ / JCPU / PCPU 列を省略)
w <user>特定ユーザのセッションのみ表示

3兄弟の同一書式 (uptime / w 先頭行 / top 1行目)

uptime の出力、w の先頭行、top の 1 行目は 完全に同じ書式 を共有している。

<現在時刻> up <稼働時間>, <ユーザ数> users, load average: <1分>, <5分>, <15分>

実例で並べると:

top - 09:23:14 up 2 days,  5:42,  3 users,  load average: 1.24, 0.87, 0.62
       14:08:51 up 4 days,  6:12,  2 users,  load average: 0.42, 0.31, 0.28        ← uptime
       21:47:33 up 12:08,   2 users,  load average: 0.05, 0.18, 0.22                ← w 先頭行

差分は次の 3 点だけ:

観点topuptimew
先頭プレフィックスtop - ありなしなし
後続行ヘッダ4行 + プロセステーブルなし(1 行で終わり)セッションテーブル
用途プロセス毎リソース監視稼働状況の最速確認ログインユーザ確認

共通の 4 項目

3兄弟全てで以下の 4 項目が表示される。LPIC では「現在時刻・稼働時間・ログインユーザ数・load average の 4 項目を表示するコマンドはどれか」型の問題が出るが、その正解集合は uptime / w / top の 3 つ一択。

項目フィールド注意点
現在時刻先頭の HH:MM:SS起動時刻ではない
稼働時間up X:XX または up N days, X:XX「現在時刻 − 起動時刻」
ログインユーザ数<n> user(s)単複切替(1 user / 2 users)
load average0.x, 0.x, 0.x常に 1 分・5 分・15 分の順で固定

vmstat / iostat / ps / sar -u 系はこの 4 項目セットを出さないので、4 項目集合問題では除外できる。

uptime コマンドの詳細

$ uptime
 14:08:51 up 4 days,  6:12,  2 users,  load average: 0.42, 0.31, 0.28

3 兄弟の中で「先頭行のみ抽出した」最小形態。各フィールドの意味は次の通り。

フィールド意味
14:08:51現在時刻起動時刻ではない(罠)
up 4 days, 6:12稼働時間 = 4 日と 6 時間 12 分システムが連続稼働している時間
2 usersログインユーザ数 = 2現在ログイン中のユーザ数
load average: 0.42, 0.31, 0.28過去 1 分 / 5 分 / 15 分の load average順序固定

起動時刻が欲しいときは -s

$ uptime -s
2026-05-02 07:56:51

「起動時刻 = 現在時刻 − 稼働時間」を手計算する必要はない。-s で直接出る。試験で uptime の先頭時刻を「起動時刻」と言い切っている選択肢は誤り(起動時刻が欲しいなら -swho -b)。

w コマンドの詳細

$ w
 21:47:33 up 12:08,  2 users,  load average: 0.05, 0.18, 0.22
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ito      pts/0    192.168.10.42    09:38   12:09m  0.21s  0.21s -zsh
devops   pts/2    10.0.0.17        20:54    0.00s  0.45s  0.04s w

これは小規模な開発サーバに 2 ユーザがログインしている想定の出力(数値は LPIC 解説用に再構成、実機ログそのままではない)。先頭 1 行は uptime と同形式。その下にユーザ別セッションテーブルが続く 2 部構成。

セッションテーブルの 8 列

意味引っかけ
USERログインユーザ名
TTY端末名(pts/0 等)
FROM接続元ホスト/IP
LOGIN@そのユーザがログインを開始した時刻「ログイン継続時間」ではない ← 罠
IDLE無操作経過時間
JCPUTTY 上の全プロセスの CPU 時間累計
PCPUWHAT 欄プロセスの CPU 時間
WHAT現在実行中のコマンド

LOGIN@ の読み方

LOGIN@@ は前置詞 at(〜時に) の意味。

LOGIN@ = 09:38       ← 「09:38 にログインした」(開始時刻)
≠ 09:38 ぶんログインしている  ← × 継続時間ではない

サンプル出力では itoLOGIN@ = 09:38 で先頭行の現在時刻が 21:47:33、つまり ログイン継続時間は約 12 時間 9 分(これは IDLE 列の 12:09m とほぼ一致するが、LOGIN@ 単独からは継続時間を直接読めない)。

ito のログイン継続時間は 9 時間 38 分」と書いてある選択肢を見たら反射的に誤り判定できるようにしておく。

IDLE の単位表記

表記意味
0.00s0 秒(秒単位)
12:09m12 分 09 秒(m サフィックスは分単位)
2:352 時間 35 分(コロンが時:分の意味)
5days5 日(日単位)

サフィックスで単位が変わるので、数値だけ見て判断しない。

JCPUPCPU の違い

集計対象
JCPUその TTY で動いた 全プロセス の CPU 時間累計(過去のシェルジョブ全部)
PCPUWHAT 欄に表示している 現在のプロセス 1 つ の CPU 時間

JCPU ≥ PCPU が常に成り立つ(後者は前者の部分集合)。

load average の値域

3 コマンド共通の論点。試験で繰り返し問われる。

定義

load average = 「実行中 + 実行待ち(runqueue)プロセス数」の指数移動平均

つまり「今この瞬間 CPU を使いたがっているプロセスの数」。CPU 使用率(%)とは違う指標で、上限はない

値域とコア数の関係

マシンload 値状態
1 コア機1.00CPU が常時飽和、待機なし(健全と過負荷の境界)
1 コア機2.00半分のプロセスが待機(過負荷)
4 コア機4.004 コア飽和、待機なし
4 コア機8.00半分のプロセスが待機(過負荷)
8 コア機4.00半分のコアが暇(余裕あり)

健全性の判断基準

load average / コア数 < 1   → 概ね健全
load average / コア数 = 1   → 飽和
load average / コア数 > 1   → 過負荷(待機発生)

コア数は nproc で確認できる。

$ nproc
8

「load average は 0〜1 の範囲に収まる」「load average は CPU 使用率の一種」と書いてある選択肢は誤り。

出力 → コマンド識別の判別キー

LPIC では出力スクリーンショットからコマンド名を当てる問題が出る。3 兄弟の見分け方:

特徴コマンド
先頭が top - で始まり、後続にヘッダ 4 行 + プロセステーブルtop
1 行で終わり、up/users/load average のみuptime
先頭行は uptime と同形式、後続に USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT のテーブルw

判定の順序:

  1. 先頭プレフィックス → top - なら top
  2. 出力行数 → 1 行で終わるなら uptime
  3. 後続テーブルの列 → USER/TTY/LOGIN@ があれば w
  4. procs ヘッダや %Cpu(s) 行があれば、それは uptime/w/top のどれでもない(vmstattop)

試験本番で踏みやすい罠 4 種

罠①: 「現在時刻」と「起動時刻」の取り違え

14:08:51 up 4 days, 6:12, ...

先頭の 14:08:51現在時刻 であって起動時刻ではない。「up の前に書いてあるのが現在時刻」と覚える。起動時刻が欲しければ uptime -swho -b を使う。

罠②: LOGIN@ をログイン継続時間と誤読

@ は at(〜時に)。LOGIN@ = 09:38 は「09:38 にログインした」であって「9 時間 38 分ログインしている」ではない。継続時間は 現在時刻 − LOGIN@ を別途計算する(あるいは IDLE 列で代用判断する)。

罠③: load average の上限神話

「load average は 0〜1 に収まる」「100 を超えない」と書いてある選択肢は誤り。load average は runqueue 長の平均 で、CPU コア数を超えれば 1.0 を簡単に超える。コア数で正規化して相対評価する。

罠④: 数値が「現在時刻」と「稼働時間」のどちらにも見える

21:47:33 up 12:08, ...

12:08 は稼働時間(12 時間 08 分)であって現在時刻ではない。up プレフィックスの位置 で判断する。

HH:MM:SS up X:XX, ...
       ↑     ↑
   現在時刻  稼働時間

HH:MM:SS のように 秒まである 8 桁形式 が現在時刻、X:XX のように 時:分のみ が稼働時間、というフォーマット差でも見分けがつく。

自己チェック

書きながら自問できるようにしておきたい項目:

  • uptime 先頭の HH:MM:SS は何を表すか(現在時刻、起動時刻ではない)
  • システム起動時刻を 1 コマンドで取得するには(uptime -s / who -b)
  • 3 兄弟が共通で表示する 4 項目は何か(現在時刻・稼働時間・ユーザ数・load average)
  • w のセッションテーブルの列を順に書けるか(USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT)
  • LOGIN@@ は何の意味か(at = 〜時に、ログイン開始時刻)
  • JCPUPCPU の違いを 1 行で説明できるか
  • IDLE 列の 12:09m2:35 の単位の違いは
  • load average の値域は(下限 0、上限なし)
  • 4 コア機で load average が 4.0 のときの状態は(飽和、ただし待機なし)
  • top - プレフィックスがない・後続テーブルもない出力は何コマンドか(uptime)

変更履歴

  • 2026-05-06: 初版公開