wコマンド
wはログイン中のユーザーと、そのユーザーが何をしているかを表示するコマンド。whoが接続元と時刻を並べるだけなのに対し、wは実行中のコマンドやCPU時間まで表示する。
$ w
10:56:36 up 17 days, 14:05, 3 users, load average: 0.96, 0.60, 0.31
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
carol pts/0 192.168.10.42 10:55 1:35 1:34 1:34 gzip -9 -c /dev/zero
alice pts/1 192.168.10.21 10:55 1:35 0.00s 0.00s -bash
bob pts/2 192.168.10.35 10:55 1:35 0.00s 0.00s tail -f /var/log/messages
1行目はuptimeと同じ内容で、現在時刻、起動からの経過時間、ログイン中のユーザー数、ロードアベレージを表示する。
なお、Rocky LinuxなどのRHEL系ではFROM列がデフォルトで表示されない。接続元を表示するには後述の-fを付ける。
各列の意味
- USER: ログイン中のユーザー名
- TTY: 端末名。
pts/0はSSHなどの擬似端末、tty1はコンソール - FROM: 接続元のホスト名やIPアドレス
- LOGIN@: ログインした時刻
- IDLE: 端末が操作されていない時間
- JCPU: その端末に紐づくプロセス全体が使ったCPU時間。実行中のバックグラウンドジョブは含み、終了済みのジョブは含まない
- PCPU: WHAT列のプロセスが使ったCPU時間
- WHAT: 現在実行中のコマンド
上の例では、carolがgzipでCPUを1分34秒消費している。aliceのWHATは-bashであり、シェルを開いたまま何も実行していない。IDLEが1時間や1日に達しているセッションは、接続したまま放置されている。
JCPUとPCPUの違いはcarolの行のように単独のコマンドを実行中だと分かりにくい。パイプや複数のコマンドを実行した端末では、JCPUがその端末で使った合計、PCPUが今動いているコマンドの分だけになる。
ヘッダーを消す(-h)
-h(--no-header)を付けると、1行目のヘッダーと列見出しを省略する。
$ w -h
carol pts/0 192.168.10.42 10:55 1:35 1:34 1:34 gzip -9 -c /dev/zero
alice pts/1 192.168.10.21 10:55 1:35 0.00s 0.00s -bash
bob pts/2 192.168.10.35 10:55 1:35 0.00s 0.00s tail -f /var/log/messages
grepやwc -lと組み合わせる場合に使う。
$ w -h | wc -l
3
短い形式で表示する(-s)
-s(--short)はLOGIN@、JCPU、PCPUを省略する。誰が何をしているかだけを見たい場合に適している。
$ w -s
10:56:36 up 17 days, 14:05, 3 users, load average: 0.96, 0.60, 0.31
USER TTY FROM IDLE WHAT
carol pts/0 192.168.10.42 1:35 gzip -9 -c /dev/zero
alice pts/1 192.168.10.21 1:35 -bash
bob pts/2 192.168.10.35 1:35 tail -f /var/log/messages
接続元の表示を切り替える(-f)
-f(--from)はFROM列の表示を切り替えるトグルである。デフォルトの状態はディストリビューションのビルド設定によって異なるため、同じオプションでも効果が逆になる。
- Rocky Linux 9などのRHEL系: デフォルトではFROM列が出ないため、
w -fで表示する - Debian系やUbuntu: デフォルトでFROM列が出るため、
w -fで非表示になる
Rocky Linux 9で-fを付けない場合の出力は以下のとおり。
10:56:36 up 17 days, 14:05, 3 users, load average: 0.96, 0.60, 0.31
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
carol pts/0 10:55 1:35 1:34 1:34 gzip -9 -c /dev/zero
alice pts/1 10:55 1:35 0.00s 0.00s -bash
bob pts/2 10:55 1:35 0.00s 0.00s tail -f /var/log/messages
IPアドレスで表示する(-i)
-i(--ip-addr)はFROM列をホスト名ではなくIPアドレスで表示する。名前解決の結果ではなく実際の接続元を確認したい場合に使う。
$ w -i
特定のユーザーだけ表示する
引数にユーザー名を渡すと、そのユーザーのセッションだけを表示する。
$ w alice
10:56:36 up 17 days, 14:05, 3 users, load average: 0.96, 0.60, 0.31
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
alice pts/1 192.168.10.21 10:55 1:35 0.00s 0.00s -bash
ヘッダーのユーザー数は絞り込みの影響を受けず、システム全体の数のままである。
実行中のコマンドのPIDを表示する(-p)
新しいバージョンのprocps-ngには-p(--pids)がある。WHAT列の先頭に968/983のような形式でPIDが付き、ログインプロセス(セッションリーダー)と実行中のプロセスのPIDを確認できる。プロセスを特定してからkillする場合に役立つ。
$ w -p
利用できるかはバージョン次第である。Debian 13のprocps-ng 4.0.4では使えるが、Rocky Linux 9のprocps-ng 3.3.17には-pが無い。バージョンはw --versionで確認する。
$ w --version
w from procps-ng 3.3.17
whoやlastとの使い分け
3つのコマンドは見る対象が異なる。
| コマンド | 対象 | 分かること |
|---|---|---|
w | 現在のセッション | ログイン中のユーザーと実行中のコマンド |
who | 現在のセッション | ログイン中のユーザーと接続元、ログイン時刻 |
last | 過去の履歴 | 誰がいつログイン・ログアウトしたか |
サーバーの負荷が高い場合、wで誰が重い処理を実行しているかを最初に確認できる。
