컴파일 날짜 가져오기

컴파일 날짜 가져오기

Linux 명령에서 컴파일 날짜를 추출하려고 합니다(또는 cpp도 괜찮습니다). 나는 다음을 사용하고 있습니다 :

stat -c %z ./myProgram.bin

그러나 예를 들어 ssh를 통해 다른 위치로 복사하면 myProgram.binstat 명령은 기본적으로 복사 날짜를 제공합니다.

실제 편집 날짜를 어떻게 알 수 있나요? 감사해요.

답변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 형식에는 날짜가 포함되지 않으므로 파일의 수정 타임스탬프만 보존할 수 있습니다.

추가 자료:

관련 정보