$ last -aid foouser pts/12 Sun Feb 15 07:30 - 15:23 (2+07:52) XXX.YYY.ZZZ.QQQ
Sun Feb 15 07:30 - 15:23 部分非常明显。该用户于周日 7:30 登录。但是 (2+07:52) 不清楚。7:52 是两次之差,但 2+ 部分是多少?
使用来源,卢克:
sprintf(length, "(%d+%02d:%02d)", days, hours, mins);
这是来自sysvinit
Debian 上的源代码包。
提示那些没有 C 知识的人:这是天数。
括号之间的字符串是会话的持续时间。正如您所注意到的,时间是结束时间和开始时间之间的差异。2+ 是hop 注明的天数。
在某些时候,这个问题可能应该转移到服务器故障,因为它最有可能引起系统管理员的兴趣。
一旦你知道你在看什么,这是一种相当易读的格式。如果我正在设计输出,我想我会将星期几设为可选,并将整个结束日期放在字符串中。更好的是让日期戳是可配置的。这样,输出可以更容易地被另一个程序使用。
实际持续时间,如果用户已经退出会话,使用正则表达式很容易找出:
$ last | perl -lne 'print "$2 days, $3 hours, $4 minutes" if /\(((\d+)\+)(\d{2}):(\d{2})\)$/'
17 days, 05 hours, 23 minutes
3 days, 23 hours, 16 minutes
14 days, 06 hours, 09 minutes
23 days, 04 hours, 54 minutes
16 days, 06 hours, 57 minutes
...
那可能是几天,但我不确定;这也不是编程问题。