ログイン履歴を抽出するにはどうすればよいですか?


94

特定のユーザーのログイン履歴(ログイン時間とログアウト時間など)を知る必要があります。Linuxで特定の日付範囲のこの履歴を抽出するにはどうすればよいですか?

回答:


133

lastコマンドを試すことができます:

last john 

ユーザーjohnのログイン/アウト履歴を出力します。一方、ただ実行している

last

すべてのユーザーのログイン/アウト履歴を印刷します。


5
これは、ほとんどのLinuxディストリビューションで今月の値のみを返します。
ewwhite

42

1か月よりも履歴をさかのぼる必要がある場合/var/log/wtmp.1は、lastコマンドでファイルを読むことができます。

last -f wtmp.1 johnユーザーのログインの前月の履歴が表示されますjohn

最後のログ出力は重すぎず、比較的簡単に解析できるため、おそらく特定の日付パターンを探すために出力をgrepにパイプします。

last john | grep -E 'Aug (2[0-9]|30) '8月20〜30日を表示します。または次のようなもの:

last -f /var/log/wtmp.1 john | grep -E 'Jul (1[0-9]|2[0-9]|30) 'ユーザーの7月10日から30日までを取得しますjohn


21

Linuxで特定の日付範囲のログイン履歴を抽出する方法は?

25から28 / Augまでのすべてのユーザーログインを一覧表示する例:

last | while read line
do
    date=`date -d "$(echo $line | awk '{ print $5" "$6" "$7 }')" +%s`
    [[ $date -ge `date -d "Aug 25 00:00" +%s` && $date -le `date -d "Aug 28 00:00" +%s` ]] && echo $line
done
  • awk '{ print $5" "$6" "$7 }'last出力から対応する列の日時を抽出する
  • +%s 日時をエポック時間に変換する
  • -ge 以上の略
  • -le 以下の略

特定のユーザーに対してを使用して行うこともできますlast <username>


1
それは非常にugい表現です。last出力は非常に読みやすいので、grep はきれいになりませんか?
ewwhite

3
grep「8月15日09:00」から「8月25日21:00」までできますか?
量子

1
OPは時間範囲を要求しませんでした。
ewwhite

1
@ewwhite式は私にとって美しく見えますが、bash構文の外観が気に入らない場合は、このサイトはあなたには向かないかもしれません。
ekerner

1
@ekernerそのとおりです。私は別の場所に行きます;)
ewwhite
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.