En Linux (que actualmente usa el sistema de archivos ext4), ¿cómo se puede verificar rápidamente si el contenido de un archivo se ha modificado sin leer ninguno de sus contenidos?
¿Es el stat
comando un enfoque recomendado? Actualmente lo hago
$ stat --format "%Y" hello.txt
y luego puedo verificar si el mismo comando produce el mismo resultado. Si lo hace, concluyo que hello.txt no ha cambiado.
Mi sensación es que uno quiere incluir más parámetros para estar aún más seguro. Por ejemplo, ¿agregar el tamaño del archivo, el nombre del archivo, etc., proporcionaría una "huella digital" aún mejor del archivo?
Sobre este tema, recuerdo que un volumen de TrueCrypt que una vez tuve siempre fue ignorado por mi programa de copia de seguridad incremental, posiblemente porque TrueCrypt se aseguró de no dejar atrás ningún cambio de metadatos. Supongo que es posible cambiar todos los datos devueltos por stat
, por lo tanto, no se puede garantizar que recoja cada posible modificación del archivo.
fuente
md5sum filename
?md5sum
o cualquier tipo de suma de verificación lee el contenido del archivo. No quiero hacer eso, ya que es demasiado lento para mis propósitos.ls -t
ordenará los contenidos en un directorio por hora de modificación.Respuestas:
Si desea detectar si un archivo ha sido modificado por medios normales (editándolo en alguna aplicación, revisando una nueva versión desde un sistema de control de revisión, reconstruyéndolo, etc.), verifique si su tiempo de modificación (mtime) ha cambiado de El último cheque. Eso es lo que
stat -c %Y
informa.El tiempo de modificación puede ser establecido por el
touch
comando. Si desea detectar si el archivo ha cambiado de alguna manera (incluido el uso detouch
, extraer un archivo, etc.), verifique si su tiempo de cambio de inodo ( ctime ) ha cambiado desde la última verificación. Eso es lo questat -c %Z
informa. El ctime no puede ser falsificado excepto por el administrador del sistema (e incluso entonces, solo por medios indirectos: cambiando el reloj del sistema o accediendo directamente al disco, sin pasar por el sistema de archivos).fuente
El comando stat solo tiene una resolución de un segundo. Entonces, si el archivo se modificó dos veces en el mismo segundo, podría perderse una modificación. Los sistemas de archivos más nuevos como ext4 proporcionan marcas de tiempo de mayor resolución en nanosegundos, pero algunas de las herramientas antiguas aún no se han puesto al día.
Además, es posible que otros programas establezcan un tiempo de modificación arbitrario. Puede ver cómo puede suceder esto mediante el comando táctil.
Si le preocupa cualquiera de esas dos posibilidades, no sería una mala idea mirar también el tamaño del archivo. Esto es lo que hace rsync cuando busca archivos modificados.
fuente
Lo que tienes es el método correcto. La única razón para que eso falle es si el sistema de archivos no se actualiza correctamente, en cuyo caso terminará con un montón de problemas más serios.
Por supuesto, supongo que alguien con el conocimiento adecuado y el acceso raíz a un sistema donde se puede acceder a la partición podría alterar la información para que parezca que el archivo no ha cambiado. Sin embargo, en este caso seguramente se habrían asegurado de hacer lo mismo con el tamaño, etc.
fuente
Hago la huella digital más detallada.
Hice una pequeña función de contenedor que genera una salida idéntica para las versiones de MacOS / BSD y GNU de
stat
(también detecta la versión instalada de Homebrew con ung
prefijo).La
init
función se llama una vez durante la inicialización del script ygetFileStatus
se puede llamar repetidamente sin la sobrecarga de detección.fuente