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


11

我试图找出一个过程来监视远程服务器上的用户会话,并在用户空闲时间过长时向他们发出警报,使用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.BBs”显然意味着自从她最后一次激活控制台以来已经过去了AA秒和BB 1/100秒(6月为46秒)。
  • “ AA:BBm”可能意味着自约翰上一次参加会议以来,AA时间和BB分钟已经过去。
  • “ AA:BB”是我不知道的格式-珍妮弗(Jennifer)在会议中没有活跃多长时间了?

Answers:


4

如果没有限定符,则表示MM:SS,即分钟和整秒。另外,输出中没有第四种格式-闲置天数(NNdays)。


10

从手册页

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

因此您的输出为MM:SS(> 1m和<1小时)。


1

不是您问题的答案,而是一种更简单的方法来检查登录会话的空闲时间是查看/ dev / pts。其中的文件修改时间反映了登录会话最后一次收到输入的时间。

您应该能够在那里执行stat操作(例如,stat --format =“%n%X” *),并将所有内容保持在新纪元中。应该使任何时间的计算更加容易。


1
如果您发现自己解析时间格式,则可能要在纪元时间中寻找该时间戳的来源。
cjc 2011年

1
我读到一些有关的内容,但我注意到报告的空闲时间w/dev/pts文件上的时间戳不同。知道为什么吗?
摊铺

在什么情况下有什么不同?我没有仔细看过,但是“ w”必须从某个地方提取信息,/ dev / pts是一个明显的地方。嗯,如果屏幕上发生了某些事情(/ dev / pts / *应该是双向通讯);在这种情况下,用户将处于空闲状态,但是由于设备中存在某些问题,例如,将更新/ dev / pts / 0。
cjc 2011年

这可能是一种解释,它会破坏我的方案-因为即使用户尾随一些活动日志文件或使用,我也要关闭空闲会话watch
摊铺

1

答案是27分47秒

  1. 默认格式为MM:SS。
  2. 22:29m表示22小时29分钟
  3. 46.00s表示46秒
  4. 4d表示4天
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.