실행 파일이 마지막으로 실행된 시간을 표시할 수 있습니까?

실행 파일이 마지막으로 실행된 시간을 표시할 수 있습니까?

FS가 사용된다는 점에 유의하세요.관계 시간옵션을 선택하세요(따라서 가장 최근의 마지막 액세스 시간은 표시되지 않습니다).

실행 파일(ELF 64비트 LSB 실행 파일)이 마지막으로 실행된 시간을 확인할 수 있는 방법이 있습니까?

루트 액세스를 사용하십시오. 아이디어는 복잡한 프로덕션 애플리케이션이 현재 두 개의 서로 다른 위치(설치 예정)에 존재하는 동일한 실행기를 실행할 수 있다는 것입니다. 나는 지금부터 아무것도 깨지지 않고 그 중 하나만 실행하고 싶습니다(예: 일시적으로 하나를 제거할 수 없습니다. 99%는 그중 하나만 사용하지만 100% 확실해야 함).

답변1

제가 기억하는 한, relatime액세스 시간은 24시간마다 업데이트되거나 이전 atime이 mtime보다 빠르거나 같은 경우 업데이트됩니다. 그러면 프로그램이 하루 종일 사용되지 않았는지 알 수 있고, 기다리지 않으려면 touch programfile나중에 실행하여 atime이 변경되었는지 확인할 수 있습니다.

Plain은 touchatime == mtime을 설정하지만 atime <= mtime이면 업데이트되므로 중요하지 않습니다. touch -a -d 1999-12-31mtime을 수정하지 않고 유사한 작업을 수행하여 atime을 변경할 수도 있습니다 .

이와 같이:

$ 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 "$@"

+물론 필요에 따라 날짜 문자열 형식을 지정하는 매개변수를 추가할 수 있습니다 .

관련 정보