Linux 명령에서 컴파일 날짜를 추출하려고 합니다(또는 cpp도 괜찮습니다). 나는 다음을 사용하고 있습니다 :
stat -c %z ./myProgram.bin
그러나 예를 들어 ssh를 통해 다른 위치로 복사하면 myProgram.bin
stat 명령은 기본적으로 복사 날짜를 제공합니다.
실제 편집 날짜를 어떻게 알 수 있나요? 감사해요.
답변1
토마스 디키의 답변모든 (ELF) 바이너리에 대한 일반적인 문제를 해결합니다. 질문의 표현 방식을 고려하면 다음을 찾을 수 있습니다.__DATE__
사전 __TIME__
정의된 매크로유용한; 이를 통해 프로그램 내에서 컴파일 날짜와 시간을 참조할 수 있습니다(그래서 프로그램은 자체 컴파일 날짜와 시간을 알 수 있습니다).
간단한 예는 다음과 같습니다.
#include <stdio.h>
int main(int argc, char **argv) {
printf("This program was compiled on %s at %s.\n", __DATE__, __TIME__);
return 0;
}
답변2
stat -c %z
파일의 마지막 생성/업데이트 시간을 표시하며 변경하거나 보존할 수 없습니다. 따라서 파일을 다른 위치에 복사하면 항상 새로운 생성 시간을 얻게 됩니다. 당신이 찾고 있는 것은 stat -c %y
파일과 디렉토리를 다루는 대부분의 도구에 의해 일반적으로 보존되는 마지막 수정 시간을 표시하는 것입니다.
답변3
수정 시간을 보존하면서 복사할 수 있습니다. 예:
cp --preserve=timestamps source destination
또는 (보다 일반적으로:방법,소유권그리고타임스탬프)
cp -p source destination
어떤 경우에는 보존하지만소유권원하지 않습니다.
마찬가지로 scp -p
옵션을 사용하여 원격 시스템에 복사할 수 있습니다.
scp -p source remote:destination
하지만 scp
모드 등에 대한 별도의 옵션은 없습니다. 주어진 옵션으로 실행되기 때문에원격권한이 없으므로 원격 소유권을 동시에 설정하는 기능이 없습니다. 이러한 제한으로 인해 tar
가능한 한 많은 정보를 보존하면서 원격 시스템에서 추출한 아카이브를 만드는 데 사용할 수 있습니다 .
바이너리 파일에 사용되는 ELF 형식에는 날짜가 포함되지 않으므로 파일의 수정 타임스탬프만 보존할 수 있습니다.
추가 자료: