Obtenha a data de compilação

Obtenha a data de compilação

Estou tentando extrair a data de compilação de um comando do Linux (ou cpp também serviria). Estou usando:

stat -c %z ./myProgram.bin

Porém, se eu copiar myProgram.binpara outro local via ssh, por exemplo, o comando stat basicamente me dará a data da cópia.

Como posso obter a data real da compilação? Obrigado.

Responder1

A resposta de Thomas Dickeyaborda o problema em geral, para qualquer binário (ELF). Dada a forma como sua pergunta foi formulada, você pode achar que__DATE__e __TIME__macros predefinidasútil; eles permitem que a data e hora de compilação sejam referidas dentro de um programa (para que um programa saiba sua própria data e hora de compilação).

Aqui está um exemplo rápido:

#include <stdio.h>

int main(int argc, char **argv) {
    printf("This program was compiled on %s at %s.\n", __DATE__, __TIME__);
    return 0;
}

Responder2

stat -c %zexibe a hora da última criação/atualização do arquivo e não pode ser alterada ou preservada. Portanto, se você copiar o arquivo para outro local, ele sempre terá um novo horário de criação. O que você está procurando é stat -c %yexibir a hora da última modificação, que geralmente é preservada pela maioria das ferramentas que lidam com arquivos e diretórios.

Responder3

Você pode copiar preservando a hora da modificação, por exemplo,

cp --preserve=timestamps source destination

ou (mais geralmente:modo,propriedadeecarimbos de data/hora)

cp -p source destination

embora em alguns casos, preservandopropriedadenão é desejado.

Da mesma forma, você pode copiar para sistemas remotos usando -pa opção do scp:

scp -p source remote:destination

mas scpnão possui opções separadas para o modo, etc. Como funciona com o determinadocontrolo remotopermissões, ele não possui um recurso para definir propriedade remota ao mesmo tempo. Devido a essas limitações, você pode querer usar tarpara fazer um arquivo que você extrai no sistema remoto, preservando o máximo de informações possível.

O formato ELF usado para arquivos binários não inclui uma data, portanto, o carimbo de data/hora da modificação do arquivo é tudo o que você pode preservar.

Leitura adicional:

informação relacionada