Necesito encontrar el tiempo de creación de un archivo, cuando leí algunos artículos sobre este problema, todos mencionaron que no hay solución (como Site1 , Site2 ).
Cuando probé el statcomando, dice Birth: -.
Entonces, ¿cómo puedo encontrar el tiempo de creación de un archivo?
filesystem
metadata
stat
nux
fuente
fuente

Respuestas:
Hay una manera de conocer la fecha de creación de un directorio, solo siga estos pasos:
Conozca el inodo del directorio por
ls -icomando (digamos, por ejemplo, su X )Sepa en qué partición se guarda su directorio por
df -T /pathcomando (digamos que está activado/dev/sda1)Ahora usa este comando:
sudo debugfs -R 'stat <X>' /dev/sda1Verás en la salida:
crtime es la fecha de creación de su archivo.
Lo que probé :
Lo modificó creando un archivo.
Intenté el comando y me dio una hora exacta.
fuente
debugfsextrae directamente del sistema de archivos para que no necesite usar la API del núcleo. Ver aquí .statx()partir de marzo de 2019.@Nux encontró una gran solución para esto que todos deberían votar. Decidí escribir una pequeña función que se puede utilizar para ejecutar todo directamente. Solo agrega esto a tu
~/.bashrc.Ahora, puede ejecutar
get_crtimepara imprimir las fechas de creación de tantos archivos o directorios como desee:fuente
cp -po similar.dfno parece admitir la--outputopción. En ese caso, puede reemplazar esa línea confs=$(df foo | awk '{a=$1}END{print a}'y la función funcionará también. Todo lo que estoy mostrando en esta respuesta es una forma de ajustar el comando de la respuesta aceptada de una manera que se puede ejecutar directamente para los objetivos de archivo / directorio.La incapacidad de
statmostrar el tiempo de creación se debe a la limitación de lastat(2)llamada al sistema , cuya estructura de retorno no incluyó un campo para el tiempo de creación. A partir de Linux 4.11 (es decir, 17.10 y posterior *), sin embargo, la nuevastatx(2)llamada del sistema está disponible, lo que incluye un tiempo de creación en su estructura de retorno.* Y posiblemente en versiones anteriores de LTS utilizando los núcleos de la pila de habilitación de hardware (HWE). Verifique
uname -rsi está utilizando un núcleo al menos a 4.11 para confirmar.Desafortunadamente, no es fácil llamar a las llamadas del sistema directamente en un programa en C. Por lo general, glibc proporciona un contenedor que facilita el trabajo, pero glibc solo agregó un contenedor para
statx(2)agosto de 2018 (versión 2.28 , disponible en 18.10). Afortunadamente, @whotwagner escribió un programa C de muestra que muestra cómo usar lastatx(2)llamada del sistema en sistemas x86 y x86-64. Su salida es el mismo formato questatel predeterminado, sin ninguna opción de formato, pero es simple modificarlo para imprimir solo la hora de nacimiento.Primero, clónalo:
Puede compilar el
statx.ccódigo o, si solo desea la hora de nacimiento, crear unbirth.cen el directorio clonado con el siguiente código (que es una versión mínima destatx.cimpresión solo la marca de tiempo de creación, incluida la precisión de nanosegundos):Entonces:
En teoría, esto debería hacer que el tiempo de creación sea más accesible:
debugfses una herramienta para sistemas de archivos ext2 / 3/4, e inutilizable en otros)makeylinux-libc-dev).Probar un sistema xfs, por ejemplo:
Sin embargo, esto no funcionó para NTFS y exfat. Supongo que los sistemas de archivos FUSE para aquellos no incluyeron el tiempo de creación.
Si, o más bien cuándo, glibc agrega soporte para la
statx(2)llamada al sistema,statseguirá pronto y podremos usar elstatcomando anterior para esto. Pero no creo que esto sea compatible con las versiones de LTS, incluso si obtienen núcleos más nuevos. Por lo tanto, no espero questaten cualquier corriente versión LTS (14.04, 16.04 y 18.04) para imprimir cada vez el tiempo de creación sin intervención manual.Sin embargo, en 18.10, puede usar directamente la
statxfunción como se describe enman 2 statx(tenga en cuenta que la página de manual 18.10 es incorrecta al indicar que glibc aún no ha agregado el contenedor).fuente
1?TL; DR: solo ejecuta:
sudo debugfs -R 'stat /path/to/your/file' /dev/<your fs>(Para averiguar tu fs, corre
df -T /path/to/your/file, lo más probable es que sea/dev/sda1).Versión larga:
Vamos a ejecutar dos comandos:
Averigüe el nombre del nombre de la partición para su archivo.
El resultado se verá así (el nombre de la partición es el primero):
Descubra el tiempo de creación para ese archivo.
En la salida, busque
ctime.fuente