是否可以显示可执行文件上次运行的时间?

是否可以显示可执行文件上次运行的时间?

请注意,FS 是用关系时间选项(因此不显示最近的上次访问时间)。

有没有办法查看可执行文件(ELF 64 位 LSB 可执行文件)上次运行的时间?

使用 root 访问权限。这个想法是,复杂的生产应用程序可以运行当前存在于两个不同位置(待安装)的相同执行程序。我只是想确保从现在开始只运行其中之一,而不会中断任何事情(例如,不能暂时删除其中之一;99% 确定只使用其中之一,但需要 100% 确定)。

答案1

据我记得,relatime每 24 小时更新一次访问时间,或者如果旧的 atime 早于或等于 mtime。这会让您知道该程序是否已经一整天未使用;或者,如果您不想等待,请运行touch programfile并稍后查看 atime 是否已更改。

Plaintouch会设置 atime == mtime,但如果 atime <= mtime 则会更新,所以没关系。您还可以执行类似的操作touch -a -d 1999-12-31来更改 atime 而不修改 mtime。

就像这样:

$ cp /bin/ls .
$ touch ./ls
$ stat ./ls
...
Access: 2022-01-07 13:07:16.640132600 +0200
Modify: 2022-01-07 13:07:16.640132600 +0200
Change: 2022-01-07 13:07:16.640132600 +0200
 Birth: -
$ ./ls > /dev/null
$ stat ./ls
...
Access: 2022-01-07 13:07:57.175525517 +0200
Modify: 2022-01-07 13:07:16.640132600 +0200
Change: 2022-01-07 13:07:16.640132600 +0200
 Birth: -

程序运行时访问时间戳会更新。

当然,如果文件只是。像这样读取二进制文件可能并不常见,但例如备份工具可以做到这一点。这会让 atime 对此毫无用处。

但如果atime没有改变,那么该文件既没有被读取也没有被执行,因此可以用来证明反面情况。

答案2

您可能可以修改程序以使其在使用时记录日志。

将程序移动到新位置(例如/usr/bin/program.real)并将其替换为将时间写入文件的简短包装脚本:

#!/bin/sh
/usr/bin/date -u >/var/log/program.access
exec /usr/bin/program.real "$@"

显然,您可以添加一个+参数来根据需要格式化日期字符串。

相关内容