UTMP(5)

名称
utmp, wtmp, lastlog - ログイン記録

書式
<sys/types.h> <utmp.h>

解説
<utmp.h> ファイルは、 utmp ファイルでの現在のユーザについての情報や wtmp ファイル中でのログインやログアウトの情報、 lastlog ファイル中での最終ログイン情報の記録のために使われる構造体を 宣言しています。 時刻の変更やシャットダウンおよびリブートのタイムスタンプは、同じように wtmp ファイルに記録されます。

    #define _PATH_UTMP      "/var/run/utmp"
    #define _PATH_WTMP      "/var/log/wtmp"
    #define _PATH_LASTLOG   "/var/log/lastlog"
    #define UT_NAMESIZE     16
    #define UT_LINESIZE     8
    #define UT_HOSTSIZE     16
    struct lastlog {
            time_t  ll_time;		/* ユーザが何時ログインしたか */
            char    ll_line[UT_LINESIZE];	/* 端末線名 */
            char    ll_host[UT_HOSTSIZE];	/* ユーザの出身ホスト */
    };
    struct utmp {
            char    ut_line[UT_LINESIZE];	/* 端末線名 */
            char    ut_name[UT_NAMESIZE];	/* ユーザのログイン名 */
            char    ut_host[UT_HOSTSIZE];	/* ユーザの出身ホスト */
            time_t  ut_time;		/* ユーザが何時ログインしたか */
    };

lastlog ファイルは、 lastlog 構造体の線型配列であり、ユーザの UID でインデックスされています。 utmp ファイルは、 utmp 構造体の線型配列であり、端末線番号 ( ttyslot(3) 参照) でインデックスされています。 wtmp ファイルは、 utmp 構造体から成るバイナリログファイルであり、 ファイルの終端に追記されていきます。

ユーザがログインするたびに、 login(1) プログラムは lastlog ファイル中のユーザの UID を検索します。 もし見つかった場合、ユーザが最後にログインした時刻のタイムスタンプ、 端末線、ホスト名が標準出力に書き出されます ( ログインが メッセージを表示しない ように設定されていない場合。 login(1) を参照 )。 login(1) プログラムは、その後 lastlog ファイルに新しいログイン時刻を記録します。

新しい lastlog への記録が書き出された後で、 utmp ファイルがオープンされ、ユーザに対する utmp 記録が挿入されます。 この記録は、ユーザがログアウトして削除される時まで保持されます。 utmp ファイルは、 rwho(1), users(1), w(1), who(1) プログラムで使われます。

次に、 login(1) プログラムは wtmp ファイルをオープンし、ユーザの utmp 記録を追加します。 その後ユーザが端末線からログアウントすると、特別な utmp レコードが記録されます。 すなわち ut_line が適切に設定され、 ut_time が更新されますが、 ut_name と ut_host は空であるものが記録されます ( init(8) 参照)。 wtmp ファイルは、 last(1) と ac(8) プログラムで使われます。

時刻変更やシャットダウン・リブートの際には、 以下の項目が wtmp ファイルに記録されます。

reboot
shutdown
    システムのリブートやシャットダウンが開始された。 ut_line フィールドに ‘~’ と言う文字が、 ut_name フィールド中に reboot もしくは shutdown が記録されます ( shutdown(8) と reboot(8) 参照)。

date
    システム時刻が手動もしくは自動で更新された ( date(1) 参照)。 コマンド名 date がフィールド ut_name に記録されます。 ut_line フィールド中の ‘|’ 文字は、変更前の時刻を示し、 ‘{’ 文字は新しい時刻を示しています。

注
wtmp ファイルは、忙しいシステムでは急速に大きくなりますので、 毎日もしくは毎週ローテションすることを推奨します。 このファイルは、 newsyslog(8) によって管理されます。

これらのファイルが存在しない場合、 login(1) はこれらを作成しません。 これらのファイルは、手動で作成する必要があります。

utmp および wtmp のファイルに対する通常の操作は、提供された login(3), logout(3), logwtmp(3) ユーティリティ関数で行い、 これらのファイルの書式が異なるシステム間での互換性を維持すべきです。

関連ファイル
/var/run/utmp
    utmp ファイル。
/var/log/wtmp
    wtmp ファイル。
/var/log/lastlog
    lastlog ファイル。

関連項目
last(1), login(1), w(1), who(1), login(3), logout(3), logwtmp(3), ttyslot(3), ac(8), init(8)

歴史
utmp と wtmp ファイル書式は AT&T UNIX から登場しました。 lastlog ファイル書式は 3.0BSD から登場しました。