Linux / コマンド / last - ログイン記録とシステム起動履歴の確認

lastは、システムのログイン・ログアウト履歴を最近の記録から確認するコマンドです。この記事で扱う util-linux 版は通常 /var/log/wtmp を読み込み、ユーザー、端末、リモートホスト、ログイン時刻、ログアウト時刻とセッションの持続時間を表示します。

特定のユーザーや期間の接続履歴を確認したり、再起動・異常終了の時点を調べるのに有用です。ただし、wtmpが記録されていない場合やローテーション・削除された期間は参照できず、この記録だけでセキュリティ事故の有無を断定してはいけません。

lastコマンドとは?

先に last --version、last --help と man last で実装を確認してください。たとえば Ubuntu 26.04 の last マニュアルは wtmpdb を案内しており、通常 /var/log/wtmp.db の SQLite データベースを使用します。以下の旧 wtmp ファイル指定、相対時刻、ランレベル表示や lastb の例を、その環境でそのまま使えるとは限りません。データ形式を確認してから対応する手順を選んでください。

lastはwtmpのログイン記録を後ろから検索して最新の項目を先に出力します。通常、ログインしたユーザー名、使用した端末(ttyまたはpts)、接続したホストやIPアドレス、ログイン・ログアウト時刻とセッション時間を確認できます。

wtmpはテキストログではなく、システムで定義されたレコード形式のファイルです。そのため、catやテキストエディタで読むよりも、lastのように形式を理解するツールを使用する必要があります。配布版やシステム設定により、ファイルの場所、記録の有無、保存期間は異なる場合があります。

基本文法と出力の読み方

基本的な文法は次の通りです。ユーザー名や端末を省略すると、利用可能な全ての記録が表示されます。

last [オプション] [ユーザー名|ターミナル...]

最新のログイン記録から確認するには、次のように実行します。

last
mina     pts/1        192.0.2.24       Fri Sep 18 21:10 - 22:42  (01:31)
alex     tty1                          Fri Sep 18 19:04 - 19:35  (00:31)
reboot   system boot  6.12.0           Fri Sep 18 18:58   still running

最初の列はユーザー、二番目の列は端末、三番目の列はリモートホストまたはカーネル情報、その後が接続時刻と終了状態です。リモートアドレスがないローカルコンソールログインでは、ホスト列が空の場合があります。

出力の一番下のwtmp beginsは、現在読み取ったファイルで確認できる最も古い時点を示します。システムの初回インストール時点や実際の初回ログイン時点であるとは断定できません。

よく使うlastオプション

オプション 機能 活用例
-n N, --limit N 最大N件の項目を出力 last -n 20
-s 時間, --since 時間 指定時刻以降の状態を表示 last -s 2026-09-01
-t 時間, --until 時間 指定時刻までの状態を表示 last -t 2026-09-19
-p 時間, --present 時間 指定時刻に接続中のユーザーを表示 last -p '2026-09-18 21:00'
-F, --fulltimes ログインおよびログアウトの全日時を表示 年が省略されていない詳細確認
--time-format iso ISO 8601形式とタイムゾーンを表示 他のシステムの記録と比較する際に便利
-i, --ip リモートホストを数値IPで表示 DNS名ではなく記録されたアドレスを確認
-a, --hostlast ホストフィールドを最後の列に移動 長い日付表示と共に可読性を改善
-R, --nohostname ホストフィールドを非表示 ローカルセッションと時間に集中
-x, --system 終了やランレベル変更の記録も表示 再起動前後の状態を調査
-f ファイル, --file ファイル 他のwtmpファイルの読み取り last -f /var/log/wtmp.1

オプションの名前とサポート範囲はlastの実装によって異なる場合があります。この記事は従来の wtmp ファイルを読む util-linux の実装を基準としており、最新の定義はutil-linux last公式マニュアルページで確認できます。

必要なログイン記録だけを絞り込む

特定ユーザーの履歴を見る

ユーザー名を引数として追加すると、そのユーザーの履歴のみが表示されます。

last mina

複数のユーザー名を入力すると、そのうちの1つに一致する項目を見ることができます。名前が長い場合、デフォルトの出力では切り捨てられることがあるため、util-linuxの-wまたは--fullnamesオプションで全フィールドを表示できます。

last -w mina alex

特定の端末の履歴を見る

端末名を指定すると、その端末で生成されたセッションのみを確認できます。pts/0はSSHのような仮想端末でよく見られ、tty1はローカル仮想コンソールを示すことがあります。

last pts/0

マニュアルによるとtty0は0のように省略して書くこともできますが、ドキュメントやスクリプトでは端末名全体を書く方が意図が明確です。

出力件数を制限する

最新の履歴の一部だけを素早く確認したい場合、-nで最大項目数を指定します。

last -n 10

-10のように短く書くこともできますが、他のオプションと区別しやすい-n 10形式の方がスクリプトや文書で読みやすいです。

期間と特定の時刻で検索する

開始時刻と終了時刻を指定する

-sは検索開始時刻、-tは検索終了時刻を指定します。二つのオプションを組み合わせると特定の期間を絞り込むことができます。

last -s '2026-09-01 00:00' -t '2026-09-19 00:00'

日付のみを指定した場合、通常はその日の00:00:00として解釈されます。対象日の期間を指定するには、翌日の00:00を終了境界として指定する方法が明確です。

相対時間表現を使用する

util-linuxのlastは、today、yesterday、now、-7daysのような相対時間表現をサポートしています。

last -s yesterday
last -s -7days

自動化結果を繰り返し比較する必要がある場合は、実行時点によって範囲が変わる相対表現よりも、明示的な日付とタイムゾーンを使う方が再現性が高いです。

特定の時刻にログインしていたユーザーを探す

-pは指定した時刻に接続中だったユーザーを示します。障害発生時刻に維持されていたセッションを確認する際に参考にできます。

last -p '2026-09-18 21:30'

結果はwtmpに残るログイン・ログアウトの記録を基に計算されるため、欠落や破損した記録まで復元することはできません。

時間形式を明確に表示する

全ログイン・ログアウト時刻を見る

デフォルト出力では画面幅を縮小するために年や一部の時刻が省略されることがあります。-Fはログインとログアウトの全ての日付と時刻を表示します。

last -F -n 10

ISO形式とタイムゾーンも表示

他のサーバーのログと比較したり、外部に結果を送信する場合には--time-format isoが便利です。ISO形式にはタイムゾーン情報が含まれるため、時刻解釈の混乱を減らすことができます。

last --time-format iso -n 10

複数のシステムのイベント順序を比較する際は、各サーバーのシステム時刻とタイムゾーン設定が正しいかも併せて確認する必要があります。

再起動とシステム停止の記録を確認する

再起動履歴を見る

rebootは実際のユーザーアカウントではなく、システムが起動する際に記録される疑似ユーザー(pseudo user)です。次のコマンドは現在wtmpファイルに残っている再起動履歴を表示します。

last reboot

表示範囲は現在保存されているwtmpデータまでです。古い再起動が見えない場合、記録がなかったのではなく、ローテーションされた可能性も確認する必要があります。

シャットダウンとランレベル変更まで表示する

-xはシステムのシャットダウンとランレベル変更の記録を一般のログイン記録と共に表示します。再起動直前に正常終了が記録されていたか確認する際に役立ちます。

last -x -n 30

last shutdownでシャットダウン項目だけに絞ることもできます。しかし、不正常な電源遮断のように終了レコードを残せなかった場合、正常なshutdown項目が存在しないこともあります。

出力に表示される状態を解釈する

表示 一般的な意味 確認する事項
still logged in ログアウト記録がまだない 現在のセッションかwhoまたはwで再確認
still running 該当のブートセッションが終了していない 現在のブートかuptimeで確認
crash 正常なログアウトなしで起動セッションが終了したものと解釈 カーネル・ジャーナル・ハードウェアログとともに調査
gone - no logout 対応するログアウトレコードが見つからない ログの損失、再起動、セッション記録の問題の可能性を確認
wtmp begins 現在の入力ファイルで最も古い記録の開始 ローテーションされた以前のファイルの存在を確認

各表示は調査の手がかりであり、原因を証明する証拠ではありません。例えば crash が表示されても、ハードウェア故障だけを意味するわけではなく、カーネルログや systemd ジャーナル、仮想化プラットフォームのイベントなどを併せて確認する必要があります。

以前の wtmp ファイルとログローテーション

他の記録ファイルを読む

-fは基本ファイルの代わりに指定されたwtmp形式のファイルを読みます。配布版のログローテーション設定によっては、以前の記録が/var/log/wtmp.1などに残っている場合があります。

last -f /var/log/wtmp.1

util-linuxでは-fを複数回指定して複数のファイルを処理することもできます。実際のファイル名と権限はシステム設定を先に確認してください。

圧縮された記録の処理時の注意

ローテーションされたファイルがgzipなどで圧縮されている場合、lastが圧縮ファイルを直接解凍して読むと考えてはいけません。元のファイルを壊さず、アクセス権が制限された作業スペースにコピー・解凍してから-fで読み、調査目的の場合は元のハッシュと保存手順も記録してください。

失敗したログイン試行の確認

lastbとbtmpの関係

lastbはlastに似ていますが、基本的に/var/log/btmpを読み、失敗したログイン試行を表示します。配布版によっては管理者権限が必要な場合があります。

sudo lastb -n 20

失敗が繰り返されたリモートアドレスとユーザー名を確認するのに役立ちますが、インターネットに公開されたサーバーでは自動化されたスキャンが多いため、個別の試行だけで侵害を断定しないでください。

成功記録と比較する

同じ時間帯の成功したログイン、SSH認証ログ、ファイアウォールおよびアクセス制御の記録を一緒に比較することで意味のある判断が可能です。

last --time-format iso -s '2026-09-18 00:00'
sudo lastb --time-format iso -s '2026-09-18 00:00'

認証ログの保存場所と参照方法は、ディストリビューションやログ設定によって異なります。systemdジャーナルを使用するシステムでは、関連するサービス単位のジャーナルも合わせて確認してください。

セキュリティチェックに活用する順序

参照範囲と時間帯を最初に固定する

調査対象事件の開始・終了時刻とサーバーのタイムゾーンを記録します。可能であれば--time-format isoを使用して出力にタイムゾーン情報を含め、複数サーバーの時刻同期状態も確認します。

ユーザー・ホスト・端末をクロスチェックする

予想外のユーザー、普段と異なるリモートアドレス、異常な接続時間やセッションの長さを確認します。IPアドレスの所有者や位置は変更される可能性があり、プロキシ・VPN・NATの影響を受けるため、アドレスだけで利用者本人を特定することはできません。

再起動とログの空白を確認する

last reboot、last -x、およびwtmp beginsを確認して記録の範囲と起動の境界を把握します。ログローテーションの時刻と比較して説明できない空白があるかどうか確認してください。

他の証拠と合わせて判断する

lastの結果をSSH認証ログ、systemdジャーナル、コマンド監査ログ、ファイアウォール・VPN・クラウド接続記録と照合します。事故が疑われる場合は、元のログを変更せず、組織の対応手順に従って保管する必要があります。

last記録の限界

  • ローカルファイル依存: wtmpが存在しない、またはサービスが記録しない場合、結果が空になることがあります。
  • 保管期間の制限: ログローテーションや削除後の記録は現在のファイルからは参照できません。
  • 改ざんの可能性: 十分な権限を持つ攻撃者は、ローカル記録を変更または削除することができます。
  • 時間依存: システム時計の変更や誤ったタイムゾーン設定は、事件の順序やセッション時間を混乱させる可能性があります。
  • 環境の違い: コンテナ、最小インストール環境、一部のリモート接続方式では、期待されたwtmp項目が残らない場合があります。

したがってlastは、迅速な現状把握や調査の出発点としては有用ですが、完全な監査ログや中央セキュリティ記録に代わるものではありません。

lastに似たコマンドの比較

コマンド 主な目的 適した状況
last 過去のログイン・ログアウト履歴 wtmpに残ったセッションと起動記録の調査
lastb 失敗したログイン履歴 btmpに記録された認証失敗の確認
who 現在のログインユーザー 現在のセッションのユーザーと端末の確認
w 現在のユーザーと実行活動 ログインユーザー、アイドル時間とプロセスの確認
lastlog または lslogins アカウントごとの最後のログイン 長期間使用していないアカウントや最後の接続の確認

よくある質問

lastに何も結果が出ない理由は何ですか?

/var/log/wtmpが存在しないか空であるか、システムがそのファイルにログイン記録を残さない構成である可能性があります。ファイルの存在有無と権限、ロギングポリシーを確認してください。空の結果だからといって、ログイン履歴が全くなかったわけではありません。

still logged inは現在接続中という意味ですか?

該当ログインに対応するログアウトレコードがないことを意味します。実際の現在のセッションはwho、w、loginctlなどで再確認するのが良いでしょう。異常終了や記録の欠落で古いセッションがそう見えることもあります。

古いログイン記録はどのように確認できますか?

ログローテーションされたwtmp.1のようなファイルが残っていればlast -f ファイル名で読むことができます。圧縮されたファイルはアクセス権を制限したコピーを解凍して使用し、元のファイルを直接変更しないでください。

lastの結果だけでハッキングの有無を判断できますか?

いいえ。予期しないログインは重要な手がかりですが、ローカルwtmpの記録は不完全であったり改ざんされている可能性があります。認証ログ、ネットワーク記録、コマンド監査ログ、システム変更履歴を合わせて分析する必要があります。

まとめ

最近のログイン履歴はlast、特定のユーザーはlast ユーザー名、再起動の記録はlast reboot、失敗したログインはlastbで確認します。期間は-sと-t、特定の時点は-p、明確な時間の表示は--time-format isoを活用できます。

lastの結果は、現在残っているwtmp記録の範囲内でのみ有効です。セキュリティ調査では、タイムゾーンとログ保存範囲をまず確認し、他の記録とクロスチェックする必要があります。関連する基本ツールはLinuxでよく使うコマンド一覧で一緒に確認できます。