2 votos

El HTML de la memoria USB no se puede renderizar después de la edición

Hace poco recibí un montón de archivos HTML en una memoria USB (FAT32), que fueron creados en un sistema Windows, pero con terminaciones LF-line. Los revisé en mi navegador (Firefox) en MacOS 10.14, y como en uno de ellos encontré algunos cambios por hacer, encendí mi editor de texto y modifiqué ese archivo. Después de guardarlo, intenté volver a cargarlo, pero Firefox se negó ahora a mostrarlo y dijo que tiene sin permiso para abrir este archivo.

Revisé el archivo desde la línea de comandos, y encontré que podía mostrar el archivo usando

less /Volume/Stick/original/x.html

bien y mis cambios también estaban presentes. Intenté reiniciar Firefox, e incluso reiniciar el propio Mac, sin éxito. Otros navegadores (Vivaldi, Chrome) tampoco pudieron abrir el archivo. Mirando ese directorio /Volume/Stick/original utilizando Finder En el caso de los archivos de la serie "Y", vi que Finder podía mostrar una vista previa de todos los demás archivos (y.html, z.html), pero no de x.html que había modificado.

A continuación hice un

ls -l /Volume/Stick/original

y encontré que todos los archivos "de trabajo" (y, z, ...) mostraban sus permisos como rwxrwxrwx (el innecesario x-bit tal vez un artefacto del hecho de que los archivos fueron creados en Windows), pero el archivo x.html mostró los permisos como rwxrwxrwx@ . AFIK, la @ indicaría que la entrada del directorio es en realidad un enlace, pero ls no mostró dónde se vincularía. Haciendo un stat de este archivo tampoco proporcionó más información.

Para experimentar un poco, hice un

mkdir /Volume/Stick/copy 
cp -v /Volume/Stick/original/* /Volume/Stick/copy 

creando así una copia de esos archivos. A

ls -l /Volume/Stick/copy/x.html

también mostró la @ en los permisos en el archivo copiado. Sin embargo la versión copiada, copy/x.html puede abrirse desde cualquier navegador sin problemas, incluso el original/x.html no puede. Incluso después de copiar redundantemente el archivo roto con

cp -v /Volume/Stick/copy/x.html /Volume/Stick/original

la versión de original/x.html era inutilizable de la misma manera que antes.

Por supuesto, ahora tengo una versión que funciona perfectamente en /Volume/Stick/copy Pero todavía me gustaría entender qué ha pasado aquí, y por qué la edición del archivo arruinó el archivo, aunque una copia de ese archivo editado no tiene ningún problema.

Mi mejor conjetura es que el problema está relacionado de alguna manera con el hecho de que FAT32 básicamente mantiene los archivos de acuerdo con el infame esquema de nomenclatura 8.3 de MSDOS, y alguna entrada en la sombra se utiliza para almacenar el nombre de archivo "real"; pero no veo cómo esto podría explicar el comportamiento que experimenté, porque nunca hasta ahora he tenido problemas al crear archivos en una memoria USB en el Mac.

¿Alguna idea para explicar el misterio?

ACTUALIZACIÓN :

Tras el comentario de gidds que señaló el @ no indica aquí un enlace simbólico, sino un atributo extendido, he aplicado un ls -l@ a ambos archivos (el original que no funciona y la copia de trabajo). En ambos casos, la salida fue

com.apple.lastuseddate#PS     16

Probablemente eso última fecha de uso se estableció cuando edité el archivo. Luego hice un xattr -p para este atributo, y ambos mostraron

69 FE DA 61 00 00 00 00 F0 9F C2 33 00 00 00 00

Aunque no puedo decir si este valor es razonable, pero ya que el mismo valor se muestra en ambos archivos, no explica por qué un archivo "funciona" y otro no.

ENCONTRADO UN REMEDIO (pero sigue sin entenderlo):

En primer lugar, he comprobado que reiniciar el Mac ha solucionado el problema, ya que el archivo no puede ser procesado después por todos los navegadores, y además la vista previa en Finder se ve bien. Sin embargo, al editar el archivo -o, para el caso, cualquier otro archivo en la memoria USB- el problema volvió a ocurrir.

Después de algunos experimentos, descubrí que el problema estaba relacionado con un editor de texto particular . Utilicé el Editor de cotas para editar el archivo, y con esto, las cosas se rompen si el archivo está en una memoria USB.

Si, después de reiniciar, edité el archivo usando Tincta en cambio, todo está bien.

Además, me di cuenta de que, una vez que tenía un archivo roto con el Editor Cot, también podía arreglarlo copiando primero el archivo roto en la línea de comandos a algún otro archivo temporal, luego borrar el archivo roto y, finalmente, volver a copiarlo desde el archivo temporal.

No sé qué hace Cot Editor especialmente con esos archivos, pero en un momento de mis experimentos, cuando quise salir de Cot Editor, me salió un mensaje emergente que decía "El documento x.html está en un volumen que no admite el almacenamiento permanente de versiones". He visto este mensaje la primera vez y no sé, lo que significa, pero al menos muestra que hay es hay algo especial en el volumen del USB que molesta a este editor de texto.

3voto

aaceofspades Puntos 1

En primer lugar, tenga en cuenta que los permisos de los archivos no existen en las unidades con formato FAT32. Los permisos que ves están definidos por la forma en que montaste esa unidad ( Leer más ).

Como ya has descubierto por ti mismo, CotEditor está causando el problema en su caso. Esto se debe a que CotEditor tiene una función de copia de seguridad y versionado automático que probablemente no sea compatible con el sistema de archivos FAT32:

Copia de seguridad automática

Ya no tiene que perder sus datos no guardados. CotEditor hace una copia de seguridad de sus documentos automáticamente durante la edición.

Desde el código puede leer esto sobre el Guardar automáticamente con las versiones característica:

Guarde automáticamente los documentos en su archivo constantemente mientras los edita. Esta opción también habilita Versiones, la moderna función del sistema que permite volver a versiones anteriores, así como modificar el nombre o la ubicación del documento desde la barra de título de la ventana.

Incluso si está desactivado, CotEditor crea una copia de seguridad de forma encubierta para un accidente inesperado.

Así que, lamentablemente, no puedes desactivar el comportamiento que te causa problemas. Pero usted no es solo y puede que se arregle o cambie en el futuro.

El problema con FAT32 podría estar relacionado con esta función que intenta escribir metadatos, lo cual no es compatible con los sistemas de archivos FAT32 (excepto el nombre del archivo y las marcas de tiempo). Y esta función no funcionará, porque no tiene real permisos de los archivos aquí. Sólo tiene los permisos de archivo del montaje, que no pueden ser alterados dinámicamente.

0voto

Jonathan Sampson Puntos 121800

Mi opinión es que el problema se debe a que el editor de Cot no libera el tipo de bloqueo de archivos está estableciendo en los archivos que abre desde el volumen con formato FAT32.

Generalmente, cuando un programa abre un archivo con acceso exclusivo (es decir, cuando bloquea el archivo), también debería liberar ese bloqueo después de cerrar el archivo (o guardarlo), lo que probablemente no está ocurriendo en este escenario.

Dado que al reiniciar el ordenador se resuelve el problema, la razón más lógica para que esto ocurra es que no se haya liberado el bloqueo de un archivo temporal (ya que todos los bloqueos de archivos se liberan cuando se inicia el sistema). Además, una copia de ese archivo no tendría un bloqueo de archivo (ya que es una copia, y no el archivo que estaba siendo editado por Cot Editor), lo que también apunta a algún bloqueo de archivo temporal.

No estoy seguro de la forma de mostrar una lista de todo archivos que tienen un bloqueo de archivo en las versiones actuales de MacOS. Puede ser posible utilizar lsof para ver algunos de los procesos que están bloqueando archivos (por ejemplo sudo lsof | grep 'x\.html' ). Sin embargo, es posible que esto no funcione en todas las situaciones (por ejemplo, cuando el proceso de Cot Editor ya no se está ejecutando pero no ha liberado el bloqueo). Creo que la información de bloqueo de archivos se mantiene dentro de la memoria del espacio del núcleo, y que ningún otro proceso tiene acceso a ella. Más información sobre cómo se implementa el bloqueo de archivos en MacOS puede estar disponible en el Núcleo XNU 's Página de GitHub para fcntl .

Alternativamente: como usted menciona, el @ que aparece en el listado de permisos en el Terminal indica que el archivo tiene establecidos atributos extendidos. También es posible que uno de esos atributos sea el inmutable del sistema ( schg ) o inmutable para el usuario ( uchg ). Utilizando el chflags (por ejemplo, chflags nouchg x.html o chflags noschg x.html ) podría permitirle "desbloquear" los archivos que el Editor de Cot ha dejado sin modificar (esto probablemente no va a ayudar basado en el razonamiento sugerido anteriormente).

Si otras aplicaciones pueden editar esos archivos con normalidad, es posible que exista algún tipo de error de edición de archivos FAT32 con la aplicación Cot Editor (es decir, si funciona normalmente en volúmenes formateados con APFS o HFS+ ), que el desarrollador del software podría rectificar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X