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

我试图找出一个过程来监视远程服务器上的用户会话,并在空闲时间过长时发出警报,这与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 

正如您所看到的,IDLE对于每个用户都有不同的格式:

  • “AA.BB”显然意味着自上次在主机上运行以来,AA秒和BB 1/100秒(六月份为46秒)已经过去了。
  • “AA:BBm”可能意味着自从John上次活跃起,AA小时和BB分钟已经过去了。
  • “AA:BB”是我无法想象的格式 – Jennifer在会话中没有活跃多久?

如果没有限定词,那就意味着MM:SS–即分钟和整秒。 作为一个额外的好处,在输出中没有第四种格式 – 不活动的天数(NN日)。

从手册页

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

所以你的输出是MM:SS(> 1米和<1小时)。

不完全是你的问题的答案,但更容易的方法来检查login会话的空闲时间将是看/ dev / pts。 其中文件的修改时间反映了上次login会话接收input的时间。

你应该可以在那里做统计操作(例如,stat –format =“%n%X”*),并保持一切在时代秒。 应该使任何时间计算更容易。

答案是27分47秒

  1. 默认格式是MM:SS。
  2. 22:29m意味着22小时29分钟
  3. 46.00s意味着46秒
  4. 4天意味着4天