LPIC201 の主題200(キャパシティプランニング)で uptime と w の出力解釈問題を解いていて、w の LOGIN@ 列を「ログイン継続時間」と誤読しかけた。@ は前置詞 at(〜時に)で、ログイン開始時刻 を指す。位置で覚えていると詰むのは top の MiB Mem 行 と同じ構図。本記事では uptime / w 先頭行 / top 1行目が同一書式である「3兄弟」の構造と、w 固有のセッションテーブル列、load average の値域までを 1 本にまとめておく。
vmstatの読み方 ・ sarコマンドの読み方 ・ topコマンドの読み方 と対になる記事。
uptime / w とは何を見るコマンドか
uptime と w は システムの稼働状況とログインセッション を見るコマンド。両者とも procps パッケージに含まれる。
uptime: 1 行で完結する最も単純な稼働状況表示w:uptime先頭行 + ユーザ別セッションテーブルの 2 部構成- どちらも CPU 使用率・メモリ・I/O は出さない(これらは
top/vmstat/sar系の役割)
「いつから動いていて、誰がログインしていて、負荷はどうか」だけを見たいときの最短コマンドが uptime、そこに「誰が・どこから・いつから・何をしているか」を加えたのが w。
実行形式
uptime [-p|-s]
w [options] [user]
| コマンド/オプション | 意味 |
|---|---|
uptime(引数なし) | 既定の 1 行表示 |
uptime -p | pretty 形式(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 点だけ:
| 観点 | top | uptime | w |
|---|---|---|---|
| 先頭プレフィックス | 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 average | 0.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 の先頭時刻を「起動時刻」と言い切っている選択肢は誤り(起動時刻が欲しいなら -s か who -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 | 無操作経過時間 | — |
JCPU | TTY 上の全プロセスの CPU 時間累計 | — |
PCPU | WHAT 欄プロセスの CPU 時間 | — |
WHAT | 現在実行中のコマンド | — |
LOGIN@ の読み方
LOGIN@ の @ は前置詞 at(〜時に) の意味。
LOGIN@ = 09:38 ← 「09:38 にログインした」(開始時刻)
≠ 09:38 ぶんログインしている ← × 継続時間ではない
サンプル出力では ito が LOGIN@ = 09:38 で先頭行の現在時刻が 21:47:33、つまり ログイン継続時間は約 12 時間 9 分(これは IDLE 列の 12:09m とほぼ一致するが、LOGIN@ 単独からは継続時間を直接読めない)。
「ito のログイン継続時間は 9 時間 38 分」と書いてある選択肢を見たら反射的に誤り判定できるようにしておく。
IDLE の単位表記
| 表記 | 意味 |
|---|---|
0.00s | 0 秒(秒単位) |
12:09m | 12 分 09 秒(m サフィックスは分単位) |
2:35 | 2 時間 35 分(コロンが時:分の意味) |
5days | 5 日(日単位) |
サフィックスで単位が変わるので、数値だけ見て判断しない。
JCPU と PCPU の違い
| 列 | 集計対象 |
|---|---|
JCPU | その TTY で動いた 全プロセス の CPU 時間累計(過去のシェルジョブ全部) |
PCPU | WHAT 欄に表示している 現在のプロセス 1 つ の CPU 時間 |
JCPU ≥ PCPU が常に成り立つ(後者は前者の部分集合)。
load average の値域
3 コマンド共通の論点。試験で繰り返し問われる。
定義
load average = 「実行中 + 実行待ち(runqueue)プロセス数」の指数移動平均
つまり「今この瞬間 CPU を使いたがっているプロセスの数」。CPU 使用率(%)とは違う指標で、上限はない。
値域とコア数の関係
| マシン | load 値 | 状態 |
|---|---|---|
| 1 コア機 | 1.00 | CPU が常時飽和、待機なし(健全と過負荷の境界) |
| 1 コア機 | 2.00 | 半分のプロセスが待機(過負荷) |
| 4 コア機 | 4.00 | 4 コア飽和、待機なし |
| 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 |
判定の順序:
- 先頭プレフィックス →
top -なら top - 出力行数 → 1 行で終わるなら uptime
- 後続テーブルの列 →
USER/TTY/LOGIN@があれば w procsヘッダや%Cpu(s)行があれば、それは uptime/w/top のどれでもない(vmstatかtop)
試験本番で踏みやすい罠 4 種
罠①: 「現在時刻」と「起動時刻」の取り違え
14:08:51 up 4 days, 6:12, ...
先頭の 14:08:51 は 現在時刻 であって起動時刻ではない。「up の前に書いてあるのが現在時刻」と覚える。起動時刻が欲しければ uptime -s か who -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 = 〜時に、ログイン開始時刻)JCPUとPCPUの違いを 1 行で説明できるかIDLE列の12:09mと2:35の単位の違いは- load average の値域は(下限 0、上限なし)
- 4 コア機で load average が 4.0 のときの状態は(飽和、ただし待機なし)
top -プレフィックスがない・後続テーブルもない出力は何コマンドか(uptime)
変更履歴
- 2026-05-06: 初版公開