Linux

以秒為單位獲取上次會話的時間

  • February 15, 2022

我正在使用如下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 秒)。

可能有一個更簡單的方法,但這是我在午餐時搞砸的時候想出的。

引用自:https://unix.stackexchange.com/questions/485965