lastでは最終ログイン時刻は見れない、lastlogを使う

  • Linux

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

lastで探して迷った

「ユーザーの最終ログイン時刻を知りたい」と思って真っ先に last を打った。けど last はログイン・ログアウトの履歴を全部並べただけのコマンドで、ユーザーごとの最終ログインを一発で出してくれるわけじゃなかった。

lastlogを使う

ユーザーごとの最終ログイン時刻がほしいなら lastlog の方が近い。shadow-utilsパッケージに入っているコマンドで、CentOS6でもUbuntu12.04でも標準で入ってた。

ターミナル
lastlog

これで全ユーザー分がずらっと出る。特定ユーザーだけでいいなら以下でいい。

ターミナル
lastlog -u example_user

ログイン履歴が一件もないユーザーは **Never logged in** と表示される。

lastlogが見てるところ

lastlog は /var/log/lastlog を見て表示しているだけらしい(実機未確認)。last が /var/log/wtmp を見ているのとは別物。

ディストリ・バージョンでの違い

  • CentOS6 / RHEL6系: shadow-utils由来の lastlog がそのまま使える。オプションも -u -b(指定日数より前を表示)-t(指定日数以内を表示)あたりが一通り揃ってる。
  • Ubuntu12.04(LTS): 同じくshadow-utils系なので挙動はほぼ同じ。
  • この時点(2013年時点)では、まだRHEL/CentOSもUbuntuもinitはSysV init(Ubuntuだと一部Upstart)で、systemdはまだ主流ではない。なので今回は loginctl の類は使わない・使えない前提で書いてる。

今ログイン中のユーザーを知りたい場合

最終ログイン時刻ではなく「今誰がログインしているか」なら who や w の方が合っている。

追記(この記事より新しい情報)

  • systemdが主流になったディストリ(RHEL7以降、Ubuntu15.04以降など)では、ログインセッション管理は loginctl 経由でも見れる。loginctl list-sessions でセッション一覧、loginctl show-user <user> -p State で状態確認ができる。ただしこれは lastlog の代替ではなく「今のセッション」を見るためのもの。
  • 上記のためこの記事のlastlog/lastの使い分け自体は現行のディストリでも変わらない。