Table of Contents
last
コマンド
Def: lastコマンド
last
コマンドは/var/log/wtmp
ファイルを参照しシステムのログイン履歴を一覧表示するコマンド.
1
% last [オプション] [ユーザー名] [端末番号]
デフォルトの表示項目は
- ユーザー名
- 端末
- ホスト(ローカルの場合はdisplay number)
- ログイン日時
- ログアウト日時(ログアウトしていない場合はstill logged in)
ユーザーをkirby
だけに絞って最新10件のみ表示する場合
1
2
3
4
5
6
7
8
9
10
11
% last -n 10 kirby
kirby pts/0 tmux(156948).%0 Tue Feb 21 01:04 - 01:15 (00:11)
kirby pts/0 tmux(154821).%0 Tue Feb 21 00:59 - 00:59 (00:00)
kirby :1 :1 Mon Feb 20 09:23 still logged in
kirby :1 :1 Thu Feb 16 09:24 - down (09:28)
kirby :1 :1 Wed Feb 15 09:28 - down (17:09)
kirby :1 :1 Tue Feb 14 22:18 - down (05:43)
kirby :1 :1 Tue Feb 14 19:38 - down (00:49)
kirby :1 :1 Tue Feb 14 09:24 - down (08:59)
kirby :1 :1 Mon Feb 13 10:34 - down (07:58)
kirby :1 :1 Fri Feb 10 09:27 - down (1+01:37)
最後の行の1+01:37
は1 days + 01:37
, つまり, 25:37
時間稼働したことを意味します.
主要オプション
short option | long option | 説明 |
---|---|---|
-n <num> |
--limit |
lastで表示する行数を数値で指定する |
-t YYYYMMDDhhmmss |
--until |
指定した日時より前のログイン情報を表示する |
-s YYYYMMDDhhmmss |
--since |
指定した日時より後のログイン情報を表示する |
-w |
ユーザー名を省略しない |
特定の期間でのlogin履歴を確認したい場合は,
1
2
3
4
5
% last -s yesterday -t today
kirby :1 :1 Mon Feb 26 09:23 still logged in
reboot system boot 6.5.0-18-generic Mon Feb 26 09:22 still running
wtmp begins Sun Jul 16 03:07:46 2023
last
vs lastlog
各ユーザーの最新ログインのみに関心がある場合はlastlog
コマンドを用いることも有力な選択肢です.
Def: lastlog
/var/log/lastlog
バイナリファイルを参照して最新のログイン情報(ログイン名, ポート,最終ログイン日時)をユーザーごとに表示するコマンド- 一度もログインしていないユーザーについては
**Never logged in**
と表示
Ubuntuサーバーにてlastlog
コマンドを実行してみると
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
kirby@hostname $ lastlog
Username Port From Latest
root **Never logged in**
daemon **Never logged in**
bin **Never logged in**
sys **Never logged in**
sync **Never logged in**
...
sssd **Never logged in**
speech-dispatcher **Never logged in**
fwupd-refresh **Never logged in**
nm-openvpn **Never logged in**
saned **Never logged in**
pulse **Never logged in**
gnome-initial-setup **Never logged in**
hplip **Never logged in**
gdm Wed Feb 21 16:46:04 +0900 2022
dedede Wed Feb 21 16:46:08 +0900 2022
pomuipomupurin **Never logged in**
korokorokirby **Never logged in**
nvidia-persistenced **Never logged in**
donkey Tue Dec 13 12:35:19 +0900 2022
naruto pts/4 123.354.234.71 Thu Feb 15 17:30:35 +0900 2022
sasuke pts/3 123.358.234.94 Tue Jan 24 17:28:13 +0900 2022
kirby pts/0 123.352.234.5 Mon Feb 20 22:43:29 +0900 2022
rstudio-server **Never logged in**
ここで, **Never logged in**
と表記されるユーザーがたくさんいることに気づきます.
- Login via gdm is not logged
- serviceやsystemと紐づくuserは基本loginはしない
が理由となります.
その他のログイン状況を参照するコマンド
ログイン状況を表示するコマンドとして他にも以下のようなコマンドがあります
who
コマンド: ログイン中のユーザーとログイン時刻とIPアドレスを表示するコマンドw
コマンド: ログインしているユーザーとユーザーが実行中のプロセスを表示するコマンドlastb
コマンド: 失敗したログインの記録を表示するコマンドlastlog
: 最新のログインをユーザーごとに表示するコマンド
who
コマンド
1
2
3
kirby@hostname:~$ who
dedede :1 2022-02-04 17:45 (:1)
kirby pts/0 2022-02-26 22:43 (123.456.789.5)
who
コマンドは, /var/run/utmp
の情報に基づいて, 端末とlogin時刻を表示することができます.
上の例ではユーザーdedede
は端末:1
を利用して 2022-02-04 17:45 にloginしていると解釈できます.
:1
はUbuntuの文脈ではdisplay serverの番号を表しており, :1
は特に2つ目のdisplay serverを意味しています.
X Window SystemベースのGUIでloginしているときは基本的には「display serverの番号」が表示されます.
一方, Waylandベースでログインした場合は
1
2
dedede@hostname:~$ who
dedede tty2 2022-02-26 22:43 (tty2)
と僕の環境では表示されます.
REMARKS
who
reports the logged in user from the console but none from the GUI.
who
コマンドのオプション
who
コマンドのオプションの代表例は以下です
short option | long option | 説明 |
---|---|---|
-a |
--all |
全ての情報を表示する |
-b |
--boot |
現在ログインしているシステムが起動した時刻を表示 |
-m |
標準入力に関連付けられたホスト名とユーザーのみを表示, who am i と同じ |
|
-q |
--count |
ログイン中のユーザーのログイン名とユーザー数を表示 |
-r |
--runlevel |
現在のランレベルを表示 |
GUIで起動したUbuntu上でtmux
を起動し, who
コマンドの挙動を見てみます
1
2
3
% who
kirby_ubuntu :1 2022-02-26 09:23 (:1)
kirby_ubuntu pts/0 2022-02-27 01:04 (tmux(1w [オプション] [ユーザー名]56948).%0)
このとき, who -m
で自分の情報だけを表示すると
1
2
3
4
5
6
7
8
% who am i
kirby_ubuntu pts/0 2022-02-27 01:04 (tmux(156948).%0)
% who aa bb
kirby_ubuntu pts/0 2022-02-27 01:04 (tmux(156948).%0)
% whoami
kirby_ubuntu
なお, who aa bb
でもwho am i
と同じ挙動になる理由は任意の2つの引数を指定するとwho -m
として動作するためです.
w
コマンド: ログインしているユーザーと実行中のプロセスを表示
Def: wコマンド
- ログインしているユーザーと実行中のプロセスを表示するコマンド
/var/run/utmp
の情報に基づいて出力
1
w [オプション] [ユーザー名]
who
コマンドと異なり, ヘッダーにて左から
- 現在の時刻
- システムの稼働時間
- 現在ログインしているユーザーの数
- システムの平均負荷(過去1分間, 5分間, 15分間)
を出力します.
ユーザーごとの情報は, 左から
USER
: 現在ログインしているユーザーのログイン名TTY
: 端末FROM
: リモートホストLOGIN@
: ログイン時刻IDLE
: アイドル時間JCPU
: その端末で実行した全プロセスが使った時間PCPU
: カレントプロセスが使用した時間WHAT
: 現在実行中のプロセス
を表示します.w [オプション] [ユーザー名]
lastb
コマンド: Bad Login履歴を確認する
Def: lastbコマンド
/var/log/btmp
ファイルを参照しシステムのログインエラー履歴を一覧表示するコマンド- 実行にはroot権限が必要
1
% lastb [オプション] [ユーザー名] [端末番号]
Optionはlast
コマンドとほぼ同じで
short option | long option | 説明 |
---|---|---|
-n <num> |
--limit |
lastで表示する行数を数値で指定する |
-t YYYYMMDDhhmmss |
--until |
指定した日時より前のログイン情報を表示する |
-s YYYYMMDDhhmmss |
--since |
指定した日時より後のログイン情報を表示する |
-w |
ユーザー名を省略しない |
Appendix: システム上のユーザー一覧を取得する
Linuxでは大まかに2種類のユーザーが存在します
- 人間が操作するためのアカウントとして作られたuser
- 特定のserviceやsystem functionと結びつく形で作られたuser
これらの情報は/etc/passwd
に保存されています. そのため, ユーザー一覧を取得したい場合は
以下のコマンドを入力します:
1
% cut -d : -f 1 /etc/passwd
-d |
区切り文字を指定 |
-f |
切り出すフィールドindexを指定, 複数の場合は1-3 などと指定 |
または, getent
コマンドを用いて
1
% getent passwd | cut -d : -f1
References
(注意:GitHub Accountが必要となります)