Estoy intentando extraer la fecha de compilación de un comando de Linux (o cpp también estaría bien). Estoy usando:
stat -c %z ./myProgram.bin
Sin embargo, si copio myProgram.bin
a otro lugar a través de ssh, por ejemplo, el comando stat básicamente me da la fecha de la copia.
¿Cómo puedo obtener la fecha de compilación real? Gracias.
Respuesta1
La respuesta de Thomas Dickeyaborda el problema en general, para cualquier binario (ELF). Dada la forma en que está formulada su pregunta, es posible que encuentre la__DATE__
y __TIME__
macros predefinidasútil; permiten hacer referencia a la fecha y hora de compilación dentro de un programa (de modo que un programa conozca su propia fecha y hora de compilación).
Aquí hay un ejemplo 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;
}
Respuesta2
stat -c %z
muestra la hora de la última creación/actualización del archivo y no se puede cambiar ni conservar. Por lo tanto, si copia el archivo a otro lugar, siempre obtendrá un nuevo momento de creación. Lo que está buscando es stat -c %y
mostrar la hora de la última modificación, que generalmente se conserva en la mayoría de las herramientas que tratan con archivos y directorios.
Respuesta3
Puede copiar conservando el tiempo de modificación, por ejemplo,
cp --preserve=timestamps source destination
o (más generalmente:modo,propiedadymarcas de tiempo)
cp -p source destination
aunque en algunos casos, preservandopropiedadno es deseado.
De manera similar, puede copiar a sistemas remotos usando -p
la opción de scp:
scp -p source remote:destination
pero scp
no tiene opciones separadas para el modo, etc. Dado que se ejecuta con el modo dadoremotopermisos, no tiene una función para configurar la propiedad remota al mismo tiempo. Debido a estas limitaciones, es posible que desee utilizarlo tar
para crear un archivo que extraiga en el sistema remoto, conservando la mayor cantidad de información posible.
El formato ELF utilizado para archivos binarios no incluye una fecha, por lo que la marca de tiempo de modificación del archivo es todo lo que puede conservar.
Otras lecturas: