如何读取 Linux 'w' 命令输出中的“IDLE”列?

Gus*_*uss 14 linux command-line-interface utilities

我试图找出一个进程来监视远程服务器上的用户会话并在他们空闲时间过长时向他们发出警报,这与 Linux 命令w非常合适。

问题是 -w使用 3 种不同的格式来指定会话的空闲时间,我无法正确计算它们。的输出w可能如下所示:

 11:40:57 up 400 days, 10:46, 13 users,  load average: 5.07, 5.10, 4.83
USER     TTY      FROM           LOGIN@   IDLE   JCPU   PCPU WHAT
john     pts/1    XX.XX.XX.XX   Wed13   22:29m  0.13s  0.04s ssh master-db
june     pts/2    XX.XX.XX.XX   Wed13   46.00s  0.67s  0.13s -bash
jenn     pts/4    XX.XX.XX.XX   11:13   27:47   4.16s  0.11s -bash
Run Code Online (Sandbox Code Playgroud)

如您所见,IDLE 对每个用户都有不同的格式:

  • “AA.BBs”显然意味着自她上次在控制台上活动以来已经过去了 AA 秒和 BB 1/100 秒(在六月的情况下为 46 秒)。
  • “AA:BBm”可能意味着自 John 上次在他的会话中处于活动状态以来已经过去了 AA 小时和 BB 分钟。
  • “AA:BB”是我无法弄清楚的格式 - 詹妮弗有多久没有参加她的会议了?

use*_*517 10

从手册页

如果时间分别大于 2 天、1 小时或 1 分钟,则标准格式为 DDdays、HH:MMm、MM:SS 或 SS.CC。

所以你的输出是 MM:SS (>1m and <1 hours)。


wom*_*ble 5

如果没有限定词,则表示 MM:SS —— 即分钟和整秒。作为额外的奖励,您在该输出中没有第四种格式 - 不活动的天数 (NNdays)。