Linux
以秒為單位獲取上次會話的時間
我正在使用如下
last
命令獲取特定使用者的最後一次會話的時間:last -aiF -n 1 fakeuser
此命令的輸出類似於:
fakeuser pts / 0 2018 年 11 月 27 日星期二 11:03:19 - 2018 年 11 月 27 日星期二 11:14:57 (00:11) 999.999.99.999
我的問題是關於會話時間(
(00:11)
在範例中)。有沒有辦法在幾秒鐘內得到這個時間?我知道我可以根據登錄和註銷時間來計算它,但是我正在直接在命令中尋找一些解決方案,因為我在web.xml 中的命令入口中
last
都沒有找到任何東西。man
僅供參考,我正在使用 Debian 9.5,但我相信它的一些解決方案應該適用於任何發行版。
完美答案的附帶問題(我在這裡的第一個答案之後確定了它):如何確定持續時間不到一分鐘的會話?
如果我沒記錯的話,您感興趣的欄位通常是 format
Days+HH:MM
,要將其轉換為秒,我們可以執行以下操作:last -aiF -n 1 fakeuser | \ awk '{gsub(/\(|\)/, "", $14); print $14}' | \ awk -F'[:+]' 'length($0) != 0 {if(length($3) == 0) {$3=$2; $2=$1; $1=0} {print ($1 * 86400) + ($2 * 3600) + ($3 * 60)}}'
第一行是您的
last
命令。在第二行中,我們從命令輸出中隔離出您想要的欄位,該欄位似乎是欄位 14。
第三行有所有動作。分隔符設置為 (
-F
) 以拆分加號 (+
) 和冒號 (:
) 上的欄位。然後我們測試以確保該行不為空(length($0) != 0
)。下一位 (if(length($3) == 0) {$3=$2; $2=$1; $1=0}
) 是一個快速技巧,可以將任何行標準化為三個欄位:天、小時和分鐘。其餘的 ({print ($1 * 86400) + ($2 * 3600) + ($3 * 60)}
) 只是轉換為秒(一天 86400 秒,一小時 3600 秒,一分鐘 60 秒)。可能有一個更簡單的方法,但這是我在午餐時搞砸的時候想出的。