`utmpdump /var/log/utmp`のすべてのフィールドを解釈する方法

`utmpdump /var/log/utmp`のすべてのフィールドを解釈する方法

ログイン方法(物理コンソールまたはSSH)を含む、ログインしたセッションとセッションの持続時間を監視したいと思います。

この情報があるようですが、utmpdump /var/log/utmpすべてのフィールドを説明する文書が見つかりません。誰かが私を実現できますか?

答え1

フィールドは次のとおりです(struct utmp括弧内のメンバー名 - 参照man 5 utmp)。

  1. レコードタイプ(ut_type
  2. ログインプロセスPID(ut_pid
  3. 端末名のサフィックスまたはinittab(5)ID(ut_id
  4. ユーザー名(ut_user
  5. デバイス名またはtty - " /dev/"(ut_line
  6. リモートログイン用のホスト名または実行レベルメッセージ用のカーネルバージョン(ut_host
  7. リモートホストのインターネットアドレス(ut_addr_v6
  8. 入力された時間(ut_timeまたは実際にut_tv.tv_sec

ut_type最初のフィールド(または「レコードタイプ」)の可能な値はutmp(5)6例:または「セッションリーダープロセスにログインしているユーザー」など)でLOGIN_PROCESS説明されています。

答え2

print_utlineソースコードの機能にはutmpdumpいくつかのヒントがあります。

static void print_utline(struct utmp ut, FILE *out)
{
....
    /*       pid    id       user     line     host     addr       time */
fprintf(out, "[%d] [%05d] [%-4.4s] [%-*.*s] [%-*.*s] [%-*.*s] [%-15s] [%-28.28s]\n",
       ut.ut_type, ut.ut_pid, ut.ut_id, 8, UT_NAMESIZE, ut.ut_user,
       12, UT_LINESIZE, ut.ut_line, 20, UT_HOSTSIZE, ut.ut_host,
       addr_string, time_string);
}

関連情報