我正在尝试找出一个可以监视远程服务器上的用户会话并在他们空闲时间过长时向他们发出警报的过程,使用 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 百分之一秒(六月的情况是 46 秒)。
- “AA:BBm”可能意味着自 John 上次参加会话以来已经过去了 AA 小时和 BB 分钟。
- “AA:BB” 是我无法理解的格式 - 詹妮弗有多久没有在她的会议中活跃了?
答案1
如果没有限定符,则表示 MM:SS —— 即分钟和整秒。作为额外的奖励,输出中还有第四种格式,这是您没有的 —— 不活动的天数 (NNdays)。
答案2
来自手册页
如果时间分别大于 2 天、1 小时或 1 分钟,则标准格式为 DDdays、HH:MMm、MM:SS 或 SS.CC。
所以你的输出是MM:SS(> 1分钟且<1小时)。
答案3
答案是27分47秒
- 默认格式为 MM:SS。
- 22:29m 表示 22 小时 29 分钟
- 46.00s 表示 46 秒
- 4d 表示 4 天
答案4
这不是您问题的确切答案,但检查登录会话空闲时间的更简单方法是查看/dev/pts
。其中文件的修改时间反映了登录会话上次接收输入的时间。
您应该能够在那里执行统计操作(例如stat --format="%n %X" *
),并将所有内容保留在纪元秒内。应该使任何时间计算都更容易。
要获取当前时间(以秒为单位),您可以使用date +%s
。