如何找到谁调用了一个程序?

如何找到谁调用了一个程序?

我正在处理夏令时并发现了一些有趣的事情。

假设现在时间为下午 2:00,夏令时将从下午 3:00 开始,偏移 +1 小时。

下午 3:00 后,hwlock 将显示增加 1 小时的时间信息。

我的猜测是某些程序一定调用了 hwclock 并更改了时间信息。

我怎么知道是哪个程序执行的? Linux shell 是否支持一些显示通话记录历史记录的命令?

喜欢

# log hwclock
# program_xxx invoke it at p.m. 3:00

答案1

通常,命令的输出hwclock位于本地时区...并且时区定义包括夏令时转换。

Linux 内核的内部时钟(与大多数类 Unix 系统一样)始终以 UTC 时间在内部运行:每当需要本地时间时,时区定义用于将内部 UTC 表示转换为本地时间。当 DST 转换发生时,这意味着“当地时间”似乎跳跃根据需要向前或向后。同时,与本地时间值一起报告的时区偏移量也会发生变化:通常会添加或删除 DST 前缀,或者如果时区表示为 UTC 时间的 +/- 偏移量,则该偏移值也会在夏令时过渡。

如果您请求hwclock以 UTC 时区(即 )显示其输出,TZ=UTC hwclock那么您会像往常一样看到时间向前滴答,在 DST 转换时没有任何特殊情况发生。

所以真正的解释是:没有执行任何特殊命令,而是在/etc/localtimeexpired 中指定的旧 UTC 偏移值和为新时间段定义的新偏移量生效。zdump -v /etc/localtime如果您愿意,您可以查看所有过去和未来的 DST 转换时间。如果您当地时区的历史记录中还有其他非夏令时变化,这些变化也应该包括在内。

但对于您的实际问题,找出谁运行特定命令的唯一可靠方法是审核子系统(auditd和相关工具),它将在/var/log/audit配置时生成日志(或者如果需要,生成自定义目录)。但它只会记录从启动时开始的事情:如果尚未配置合适的日志记录,它对过去的事件没有帮助。

相关内容