who / w / last 入門 - ログイン中のユーザーと履歴を調べる

who / w / last 入門 - ログイン中のユーザーと履歴を調べる

この記事でできるようになること

  • `who` と `w` で今ログインしている人と、その作業内容を確認できる
  • `last` で過去のログイン履歴と再起動の履歴をさかのぼれる
  • 「今」を見るコマンドと「過去」を見るコマンドを使い分けられる

前提知識(先に読むと理解しやすい記事)

このサーバー、今だれが使ってる?

リナ: せんぱい、共有のサーバーで作業していたら、急に動作が重くなったんです。もしかして他の誰かもログインしていますか? そういうのって調べられるんですか?
ライニー先輩: 調べられるよ。who で「今ログインしている人」がわかる。w なら「その人が何をしているか」まで見える。last は「過去に誰がいつログインしたか」だね。
リナ: 3 つもあるんですね。
ライニー先輩: そう。この 3 つはセットで覚えると強いよ。

先に覚える「画面が止まって見えるとき」の抜け方

last は履歴をたくさん出す。画面が流れ続けて止まらないように見えることがある。次の方法でぬけられる。

見えている状態 抜け方
出力がえんえんと流れて終わらない Ctrl+C を押してやめる
:(END) が出て 1 画面ずつ止まる ページャ(長い出力を 1 画面ずつ見せる道具。lessmore のこと)が動いている。q を押すとぬけられる
who を打っても何も出ない 失敗ではない。今ログインしている人がいない状態。WSL やコンテナでは記録ファイルが空のこともある
そもそもたくさん出したくない last -n 5 のように件数を先にしぼって実行する

whowlast はどれも表示するだけのコマンド。押しても設定は変わらないので、安心して試してほしい。

この記事でわかること

  • who今ログイン中のユーザー を一覧で見る方法
  • w で各ユーザーの 作業内容とサーバーの負荷 をたしかめる方法
  • last過去のログイン履歴 をさかのぼる方法
  • last reboot再起動・起動の履歴 を調べる方法
  • whow(今)と last(過去)の 使い分け

1. who / w / last の違いは?

結論: whow は「今ログインしている人」を表示する。last は「過去のログイン履歴」を表示する。wwho より詳しく、各人の作業内容まで見える。

リナ: 3 つもあると、どれを使えばいいか迷いそうです。
ライニー先輩: ざっくり「今」か「過去」かで分けると覚えやすいよ。whow は今この瞬間のログイン状況。last は履歴だね。
ライニー先輩: そのうえで who はシンプル。w はそこに「何をしているか」が加わるイメージだよ。

セッションとは

セッションは「1 人のユーザーがログインしてからログアウトするまでの、ひとつながりの利用」のこと。「ログインセッション」「接続」も、ほぼ同じ意味で使われる。同じ人が 2 か所から入れば、セッションは 2 つになる。

コマンド 何を見る 情報の種類
who 今ログイン中の人 今(ライブ)
w 今+各自の作業内容 今(ライブ・詳細)
last 過去のログイン履歴 過去(ログ)

whow は今のセッション情報(/run/utmp。環境によっては存在しない)を読む。last は蓄積されたログ(/var/log/wtmp)を読む。だから last だけは「すでにログアウトした人」も見える。

2. who で今ログイン中の人を見るには?

結論: who と打つだけで、今ログインしているユーザー名・端末・ログイン時刻が一覧表示される。

リナ: まずは「今だれがいるか」ですね。
ライニー先輩: そう、who をそのまま打つだけ。引数もオプションもいらないよ。
$ who
lina     tty1         2026-06-05 09:12
linny    pts/0        2026-06-05 10:03 (192.168.1.20)
リナ: 2 人いますね。tty1 とか pts/0 って何ですか?
ライニー先輩: ログインしている「端末」の名前だよ。端末(ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。、コンソールも同じものを指す呼び方)は「入力と出力の窓口」だと思ってほしい。
ライニー先輩: tty1 は本体に直接つないだコンソール。pts/0 はネットワーク越し(SSH など)の仮想端末だね。右端の (192.168.1.20) は接続元の IP アドレス。リモートログインのときに出るよ。

列の意味(左から)

  • ユーザー名
  • 端末(tty = 物理端末、pts = 擬似端末=リモート接続)
  • ログイン日時
  • (あれば)接続元のホスト名 / IP
リナ: 「今ログインしているのは自分だよね?」と確認したいときは?
ライニー先輩: who am i と打つと、自分のセッションの行だけが出るよ。スペースを入れて 3 単語で打つのがポイント。
$ who am i
linny    pts/0        2026-06-05 10:03 (192.168.1.20)

リナの失敗:whoami と who am i を混同する

リナ: せんぱい、whoami を打ったのに、名前しか出ません。端末も時刻も出ないんですけど...。
ライニー先輩: それは別のコマンドを打っているからだよ。whoami(スペースなし・1 単語)は ユーザー名だけ を表示する別コマンドなんだ。
リナ: えっ、who の仲間じゃないんですか?
ライニー先輩: 見た目は似ているけれど別ものだね。who am i(スペースあり・3 単語)なら、who の出力から自分の行だけを抜き出してくれるよ。
リナ: なるほど...!スペースの有無で別のコマンドになるんですね。打つ前にたしかめます。

who am i(スペースあり・3 単語)と whoami(スペースなし・1 単語)は別物。whoamiwho のオプションではない。混同しやすいので気をつけよう。

3. w で各ユーザーの作業内容を見るには?

結論: wwho の情報に加えて、各ユーザーが今どんなコマンドを実行しているか、サーバーの負荷(load average)まで一画面で表示する。

リナ: 重くなった原因を知りたいんですけど、誰が何をしているかまで見えますか?
ライニー先輩: それなら w の出番。一番上にサーバー全体の状態が出る。その下に、各ユーザーが今打っているコマンドまで並ぶよ。
$ w
 10:15:32 up 2 days,  3:41,  2 users,  load average: 0.15, 0.10, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
lina     tty1     -                09:12    1:03m  0.20s  0.20s -bash
linny    pts/0    192.168.1.20     10:03    2.00s  0.10s  0.05s w
リナ: 一番上の行、情報が多いです...
ライニー先輩: 左から「現在時刻」「稼働時間(up)」「ログイン中の人数」「load average(負荷)」だよ。
ライニー先輩: load average は数字が大きいほど混んでいる目安。3 つ並ぶのは「1 分・5 分・15 分の平均」なんだ。

load average(負荷平均)とは

load average は「順番待ちを含めて、どれだけの仕事が積まれているか」を表す数字。混雑度の目安と考えてよい。レジの行列に例えると、並んでいる人数に近い。数字が小さいほど空いている。

w の主な列

  • USER / TTY / FROM:誰が・どの端末で・どこから
  • LOGIN@:ログインした時刻
  • IDLE:操作していない時間(長いほど放置中)
  • JCPU / PCPU:CPU をどれだけ使ったかの時間(最初は読み飛ばしてよい)
  • WHAT:今実行しているコマンド
リナ: WHAT を見ると、私は -bash(シェルを開いているだけ)ですね。せんぱいは w を実行中、と。
ライニー先輩: その通り。誰がどの作業で負荷をかけているか、あたりをつけられる。
ライニー先輩: ヘッダー行がじゃまなときは w -h で消せるよ。w lina のように名前を付ければ、そのユーザーだけに絞れる。
$ w -h lina
lina     tty1     -                09:12    1:03m  0.20s  0.20s -bash

4. last で過去のログイン履歴を見るには?

結論: last は過去のログイン履歴を新しい順に表示する。すでにログアウトした人も含めて「いつ誰がどこからログインしたか」をさかのぼれる。

リナ: 「今」ではなく「昨日の夜にログインしたのは誰か」みたいに、過去を調べたいときは?
ライニー先輩: それは last だね。ログインとログアウトの記録が、新しい順にずらっと出るよ。
ライニー先輩: 件数が多くなりやすい。最初は -n で件数をしぼるのがおすすめ。
$ last -n 5
linny    pts/0        192.168.1.20     Fri Jun  5 10:03   still logged in
lina     tty1                          Fri Jun  5 09:12   still logged in
linny    pts/0        192.168.1.20     Thu Jun  4 18:40 - 19:55  (01:15)
lina     pts/1        192.168.1.31     Thu Jun  4 14:02 - 17:30  (03:28)
reboot   system boot  6.8.0-generic    Thu Jun  4 08:00   still running
リナ: still logged in と、- 19:55 (01:15) みたいな書き方がまざっています。
ライニー先輩: いいところに気づいたね。still logged in は「今もログイン中」という意味。
ライニー先輩: 18:40 - 19:55 (01:15) は「18:40 にログインして 19:55 にログアウト、滞在は 1 時間 15 分」だよ。過去の人はログアウト時刻と滞在時間までわかるんだ。

last -n 5 は新しい 5 件だけ表示する。last -5 と書いても同じ。履歴はたまりやすいので、まず件数をしぼってからさがすと見やすい。

5. 再起動や特定ユーザーを調べるには?

結論: last reboot で再起動・起動の履歴、last ユーザー名 で特定ユーザーのログイン履歴だけに絞り込める。

リナ: さっきの履歴に reboot という行がありましたね。サーバーがいつ再起動したかもわかるんですか?
ライニー先輩: わかるよ。last reboot と打つと、起動した時刻の履歴だけが並ぶ。「いつ落ちた / いつ立ち上がった」を追うときに便利なんだ。
$ last reboot
reboot   system boot  6.8.0-generic    Thu Jun  4 08:00   still running
reboot   system boot  6.8.0-generic    Mon Jun  1 07:55 - Jun  4 07:58 (2+23:03)
リナ: 特定の人、たとえば私のログイン履歴だけを見たいときは?
ライニー先輩: last の後ろにユーザー名をつけるだけ。last lina なら lina のログインだけが並ぶよ。
$ last lina
lina     tty1                          Fri Jun  5 09:12   still logged in
lina     pts/1        192.168.1.31     Thu Jun  4 14:02 - 17:30  (03:28)
lina     tty1                          Wed Jun  3 09:30 - 18:10  (08:40)

ログインの失敗 を調べたいときは last ではなく lastb(btmp ログ)を使う。lastb は管理者の権限がいるので sudo lastb と打つ。不正アクセスの兆候(知らない IP からの大量の失敗)を確認するのに役に立つ。

6. ミニ課題で手を動かそう

結論: 「今いる人数」「直近の履歴」「再起動の履歴」の 3 課題で、今と過去の見分け方を体に入れる。

ライニー先輩: 読むだけでは身につかない。3 つ手を動かしてみよう。

課題 1: 今ログインしている人数を調べる

やること: 今このサーバーに何人ログインしているかをたしかめよう。

ヒント1(方向づけ)を見る

「今」を見るコマンドは 2 つある。人数そのものを 1 行目に出してくれる方を選ぼう。

ヒント2(コマンド名)を見る

使うのは w。1 行目のヘッダーに users という表示がある。who の行数を数えてもわかる。

答えを見る
$ w
 10:15:32 up 2 days,  3:41,  2 users,  load average: 0.15, 0.10, 0.05

2 users の部分が人数。

課題 2: 直近 3 件のログイン履歴を見る

やること: 過去のログイン履歴を、新しい方から 3 件だけ表示しよう。

ヒント1(方向づけ)を見る

「過去」を見るコマンドを使う。そのままだと大量に出るので、件数をしぼるオプションを付けよう。

ヒント2(コマンド名)を見る

使うのは last。件数をしぼるのは -n 件数last -3 という書き方でも同じ。

答えを見る
$ last -n 3
linny    pts/0        192.168.1.20     Fri Jun  5 10:03   still logged in
lina     tty1                          Fri Jun  5 09:12   still logged in
linny    pts/0        192.168.1.20     Thu Jun  4 18:40 - 19:55  (01:15)

課題 3: サーバーの再起動履歴を見る

やること: このサーバーがいつ起動したかの履歴を表示しよう。

ヒント1(方向づけ)を見る

履歴を見るコマンドは、後ろに言葉をつけると絞り込める。起動を表す言葉をつけてみよう。

ヒント2(コマンド名)を見る

使うのは last。後ろに reboot をつける。

答えを見る
$ last reboot
reboot   system boot  6.8.0-generic    Thu Jun  4 08:00   still running
リナ: できました!「今いる人は whow、過去は last」で覚えられそうです。
ライニー先輩: その分け方が本質だよ。困ったらまず w を打つ。人数も負荷も作業内容も、1 画面でわかるからね。

7. よくあるつまずきと対処

結論: つまずきの多くは「whoamiwho am i の混同」「laststill logged in の読み違い」「ログイン失敗を last でさがしてしまう」の 3 つ。

症状 原因 対処
ユーザー名しか出ない whoami を使っている 一覧なら who、詳細なら w
who am i がエラーになる スペースの付け方が違う 半角スペースで 3 単語 who am i
last の出力が大量で読めない 全履歴を表示している last -n 10 などで件数をしぼる
ログイン失敗が last に出てこない 成功ログ(wtmp)を見ている 失敗は sudo lastb(btmp)で見る
still logged in の意味がわからない 滞在時間の表記と混同 「今もログイン中」の意味
last が「wtmp begins ...」の 1 行しか出ない 履歴ファイル(/var/log/wtmp)が空 WSL やコンテナではよくある。実サーバか VM で試す

まよったらこの順で。今いる人を知りたい → who今いる人が何をしているか・負荷 → w過去にさかのぼりたい → last

今日の 3 行まとめ

  • who は今いる人の一覧w はそこに作業内容と負荷が加わる。まずこの 2 つで現状をおさえる
  • last は過去の履歴last -n 5 で件数を絞り、last reboot で起動の履歴だけを見られる
  • whoami(1 単語)と who am i(3 単語)は別のコマンド。ログイン失敗を追うときは sudo lastb

まとめ / 次に読む

この記事を共有

次の一手