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 stat
comando, 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 -i
comando (digamos, por ejemplo, su X )Sepa en qué partición se guarda su directorio por
df -T /path
comando (digamos que está activado/dev/sda1
)Ahora usa este comando:
sudo debugfs -R 'stat <X>' /dev/sda1
Verá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
debugfs
extrae 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_crtime
para imprimir las fechas de creación de tantos archivos o directorios como desee:fuente
cp -p
o similar.df
no parece admitir la--output
opció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
stat
mostrar 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 -r
si 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 questat
el 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.c
código o, si solo desea la hora de nacimiento, crear unbirth.c
en el directorio clonado con el siguiente código (que es una versión mínima destatx.c
impresió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:
debugfs
es una herramienta para sistemas de archivos ext2 / 3/4, e inutilizable en otros)make
ylinux-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,stat
seguirá pronto y podremos usar elstat
comando 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 questat
en 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
statx
funció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