Quiero averiguar la fecha de creación de un archivo en particular, no la fecha de modificación o la fecha de acceso.
He intentado con ls -ltrh
y stat filename
.
linux
files
timestamps
stat
Özzesh
fuente
fuente
stat(1)
.stap
para recuperar los tiempos de creación.Respuestas:
El estándar POSIX solo define tres marcas de tiempo distintas que se almacenarán para cada archivo: la hora del último acceso a datos, la hora de la última modificación de datos y la hora en que el estado del archivo cambió por última vez.
Dicho esto, los sistemas de archivos modernos de Linux, como ext4, Btrfs y JFS, almacenan el tiempo de creación del archivo (también conocido como hora de nacimiento), pero usan diferentes nombres para el campo en cuestión (
crtime
en ext4,otime
en Btrfs y JFS). Sin embargo, actualmente Linux no proporciona una API de kernel para acceder a los tiempos de creación de archivos , incluso en los sistemas de archivos que los admiten.Como Craig Sanders y Mohsen Pahlevanzadeh señalaron,
stat
no apoyar el%w
y%W
especificadores de formato de visualización de la hora del archivo a luz (en formato legible por humanos y en segundos desde el Epoch respectivamente). Sin embargo,stat
accede al tiempo de nacimiento a través delget_stat_birthtime()
proporcionado por gnulib (inlib/stat-time.h
), que obtiene el tiempo de nacimiento de los camposst_birthtime
yst_birthtimensec
de lastat
estructura devueltos por lastat()
llamada al sistema. Mientras que, por ejemplo, los sistemas BSD (y en la extensión OS X) proporcionanst_birthtime
víastat
, Linux no. Esta es la razón por la cual lasstat -c '%w' file
salidas-
(que indican un tiempo de creación desconocido) en Linux incluso para sistemas de archivos que almacenan el tiempo de creación internamente.Como señala Stephane Chazelas , algunos sistemas de archivos, como ntfs-3g, exponen los tiempos de creación de archivos a través de atributos de archivo extendidos.
fuente
stap
para crear su propia API de kernel. Ver ejemplo en respuesta aquí.TLDR; Use
stap
( "SystemTap" ) para crear su propia API de kernel. Demostración de la extracción del tiempo de creación ext4 a continuación.Puede extraer los tiempos de creación de ext4 en los sistemas Fedora 19. Aquí está el mío:
Está claro que los inodes en mis particiones ext4 tienen el tiempo de creación. Aquí hay un script de shell que determina el inodo asociado con un nombre de archivo y luego aumenta la
stat
salida con el tiempo de creación usandostap
("systemtap").NB: Esto es solo una demostración y enormemente ineficiente ya que se crea, carga y descarga un módulo de kernel para cada ejecución. Esto también es probablemente muy frágil ya que no se realiza ninguna comprobación de errores. Sería preferible una API de kernel adecuada, pero este script podría hacerse mucho más eficiente y leer los tiempos de creación de múltiples archivos / inodos.
[contenido de stap_stat.sh]
Aquí hay una demostración:
fuente
debugfs + stat
permite obtenercrtime
sin mono parchear el núcleo.En
ext4
esto es posible; porqueext4
el sistema de archivos almacena el tiempo de creación del archivo. Pero aún así, encontrará que elstat
comando no puede mostrar la fecha, porque creo que el núcleo no tiene ninguna API para esto.De todos modos, el tiempo de nacimiento del archivo está almacenado
ext4
y puede averiguarlo, aunque no por un método directo, sino utilizandodebugfs
fuente
xstat filename
/dev/sdxX
está montado/some/path
y el archivo está/some/path/some/file
, la ruta a especificar es solosome/file
: su ruta debe referirse no a la raíz del sistema de archivos, sino al punto de montaje. De lo contrario, no se encontrará el archivo.En teoría, con GNU stat podría usar
stat -c '%w'
o%W
para obtener la fecha de creación de un archivo (también conocido como hora de nacimiento).En la práctica, la mayoría de los sistemas de archivos no registran esa información y el kernel de Linux no proporciona ninguna forma de acceder a ella.
Lo más cercano que puede obtener es el ctime del archivo, que no es el tiempo de creación, es el momento en que los metadatos del archivo se modificaron por última vez.
Linux Weekly News tuvo un interesante artículo sobre esto hace unos años: http://lwn.net/Articles/397442/
fuente
Diferencia entre
FreeBSD
yGNU\Linux
sobrestat command
:Si llama al
stat
comandoGNU\Linux
, invoca la-x
opción, pero en FreeBSD, usted mismo debería invocar la-x
opción.Consulte también ¿Qué sistemas de archivos en Linux almacenan el tiempo de creación?
Notas:
--printf
es muy útil enscripting
....!fuente
En OS X puede utilizar
ls -lU
,stat -f%B
,GetFileInfo -d
, omdls -n kMDItemFSCreationDate
:fuente
Mira esto:
Por cierto, esto funciona solo en ext4. No he encontrado una solución para BtrFS ... todavía;)
fuente