![是否可以显示可执行文件上次运行的时间?](https://linux22.com/image/200653/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E6%98%BE%E7%A4%BA%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E4%B8%8A%E6%AC%A1%E8%BF%90%E8%A1%8C%E7%9A%84%E6%97%B6%E9%97%B4%EF%BC%9F.png)
请注意,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 "$@"
显然,您可以添加一个+
参数来根据需要格式化日期字符串。