whoコマンド
whoは現在ログイン中のユーザーを表示するコマンド。/var/run/utmpに記録された現在のセッションを読み取る。
$ who
alice pts/0 Aug 11 11:09 (192.168.10.21)
bob pts/1 Aug 11 11:09 (192.168.10.35)
左から、ユーザー名、端末名、ログイン時刻、接続元である。pts/0はSSHなどの擬似端末を表す。コンソールからのログインはtty1のように表示され、接続元の欄は空になる。
列見出しを表示する(-H)
-H(--heading)を付けると列見出しが出る。列の意味を確認したい場合に使う。
$ who -H
NAME LINE TIME COMMENT
alice pts/0 Aug 11 11:09 (192.168.10.21)
bob pts/1 Aug 11 11:09 (192.168.10.35)
アイドル時間とPIDを表示する(-u)
-u(--users)はアイドル時間とプロセスIDを追加する。
$ who -H -u
NAME LINE TIME IDLE PID COMMENT
alice pts/0 Aug 11 11:09 00:01 266 (192.168.10.21)
bob pts/1 Aug 11 11:09 00:01 287 (192.168.10.35)
IDLE欄は端末が操作されていない時間を表す。直近1分以内に操作があった場合は.、24時間より長く放置されている場合はoldと表示される。放置されたSSHセッションを見つける場合に使う。
PID欄はutmpに記録されたログインプロセスのIDである。SSHでの接続ではsshdのセッションプロセスを指す。放置されたセッションを強制的に切断する場合、このPIDをkillする。
$ sudo kill 266
ログイン中の人数を数える(-q)
-q(--count)はユーザー名の一覧と人数だけを表示する。
$ who -q
alice bob
# users=2
同じユーザーが複数のセッションを開いている場合、その数だけ名前が並ぶ。
システムの起動時刻を表示する(-b)
-b(--boot)はシステムの起動時刻を表示する。
$ who -b
system boot Jul 25 05:51
現在のランレベルは-r(--runlevel)で表示する。
$ who -r
run-level 5 Jul 25 05:51
すべての情報を表示する(-a)
-a(--all)は起動時刻、ランレベル、ログインプロセス、終了したプロセスまで含めて表示する。
$ who -a
system boot Jul 25 05:51
run-level 5 Jul 25 05:51
LOGIN tty1 Jul 25 05:52 712 id=tty1
alice + pts/0 Aug 11 11:09 00:01 266 (192.168.10.21)
pts/2 Aug 11 11:09 374 id=ts/2 term=0 exit=0
LOGINの行はログイン待ちの端末である。最終行は終了したセッションの記録で、-d(--dead)だけでも表示できる。
ユーザー名の右にある+は、writeやwallによるメッセージを受け取れる状態を示す。-は拒否、?は不明である。この表示だけを追加するには-Tを使う。
自分のセッションを確認する
who am iは自分自身のセッションだけを表示する。-mも同じ動作をする。
$ who am i
alice pts/0 Aug 11 11:09 (192.168.10.21)
引数のam iに意味は無く、標準入力に紐づく端末の情報を表示する指定として扱われる。who mom likesのような2つの引数でも同じ結果になる。
whoamiとの違い
whoamiは現在の実効ユーザー名を表示するコマンドである。who am iとは結果が異なる場合もある。
$ sudo whoami
root
$ sudo who am i
alice pts/0 Aug 11 11:09 (192.168.10.21)
whoamiはid -unと同じく今の権限を表す。who am iは端末にログインしたユーザーを表すため、sudoやsuで権限を切り替えても元のユーザー名のままである。誰が作業しているかを調べる場合はwho am iが役立つ。
過去のログイン履歴を読む
引数にファイルを渡すと、そのファイルを読んで表示する。/var/log/wtmpを指定すると過去のログイン記録を確認できる。
$ who /var/log/wtmp
ただし履歴の確認にはlastのほうが適している。lastはログアウト時刻や接続時間も表示する。
wやlastとの使い分け
| コマンド | 分かること |
|---|---|
who | ログイン中のユーザー、端末、接続元、ログイン時刻 |
w | ログイン中のユーザーに加えて、実行中のコマンドとCPU時間 |
last | 過去のログインとログアウトの履歴 |
誰がいるかだけを知りたい場合はwho、何をしているかまで知りたい場合はwを使う。
参考
- who(1) - Linux manual page
- 【Linux】wコマンドでログイン中のユーザーと実行中のコマンドを確認する
- 【Linux】lastコマンドでログイン履歴を確認する
- 【Linux】uptime -sでシステムの起動時刻を表示する
