2 votes

Le HTML sur la clé USB ne peut pas être rendu après édition

J'ai reçu récemment un tas de fichiers HTML sur une clé USB (FAT32), qui ont été créés sur un système Windows, mais avec des fins de ligne LF. Je les ai vérifiés dans mon navigateur (Firefox) sous MacOS 10.14, et comme sur l'un d'eux j'ai trouvé quelques changements à faire, j'ai lancé mon éditeur de texte et modifié ce fichier. Après l'avoir sauvegardé, j'ai essayé de le recharger, mais Firefox refuse maintenant de l'afficher et dit qu'il a aucune permission pour ouvrir ce fichier.

J'ai vérifié le fichier à partir de la ligne de commande, et j'ai constaté que je pouvais afficher le fichier en utilisant

less /Volume/Stick/original/x.html

bien et mes changements étaient également présents. J'ai essayé de redémarrer Firefox, et même de redémarrer le Mac lui-même, en vain. D'autres navigateurs (Vivaldi, Chrome) n'ont pas pu non plus ouvrir le fichier. En regardant ce répertoire /Volume/Stick/original en utilisant Finder J'ai vu que le Finder pouvait afficher un aperçu de tous les autres fichiers (y.html, z.html), mais pas de x.html que j'avais modifié.

Ensuite, j'ai fait un

ls -l /Volume/Stick/original

et j'ai constaté que tous les fichiers "fonctionnels" (y, z, ...) affichaient les permissions suivantes rwxrwxrwx (le bit x inutile est peut-être un artefact dû au fait que les fichiers ont été créés sous Windows), mais le fichier x.html présentait les permissions suivantes rwxrwxrwx@ . D'après moi, le @ indique que l'entrée du répertoire est en réalité un lien, mais ls n'a pas montré où il serait lié. Faire un stat de ce dossier n'a pas non plus permis d'en savoir plus.

Pour expérimenter un peu, j'ai fait un

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

créant ainsi une copie de ces fichiers. A

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

a aussi montré le @ dans les permissions du fichier copié. Cependant la version copiée, copy/x.html peut être ouvert sans problème à partir de n'importe quel navigateur, même le original/x.html ne peut pas. Même après avoir recopié de manière redondante le fichier cassé avec la fonction

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

la version de original/x.html était inutilisable de la même manière qu'avant.

Bien sûr, je dispose maintenant d'une version entièrement fonctionnelle dans /Volume/Stick/copy Mais j'aimerais quand même comprendre ce qui s'est passé ici, et pourquoi l'édition du fichier a détruit le fichier, alors qu'une copie de ce fichier édité ne présente aucun problème.

Je pense que le problème est lié au fait que la FAT32 gère les fichiers selon le fameux schéma de nommage 8.3 de MSDOS, et qu'une entrée fantôme est utilisée pour stocker le "vrai" nom de fichier ; mais je ne vois pas comment cela pourrait expliquer le comportement que j'ai rencontré, car je n'ai jamais eu de problèmes jusqu'à présent en créant des fichiers sur une clé USB sur le Mac.

Des idées, comment expliquer ce mystère ?

UPDATE :

Suivant le commentaire donné par gidds qui a fait remarquer que le @ n'indique pas un lien symbolique ici, mais un attribut étendu, j'ai appliqué un ls -l@ aux deux fichiers (l'original non fonctionnel, et la copie fonctionnelle). Dans les deux cas, le résultat était

com.apple.lastuseddate#PS     16

Probablement que date de la dernière utilisation a été défini lorsque j'ai édité le fichier. J'ai ensuite fait un xattr -p pour cet attribut, et les deux ont montré

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

Je ne peux pas dire si cette valeur est raisonnable, mais comme la même valeur est indiquée dans les deux fichiers, cela n'explique pas pourquoi un fichier "fonctionne" et l'autre pas.

TROUVER UNE CORRECTION (mais ne peut toujours pas le comprendre) :

Tout d'abord, j'ai constaté que le redémarrage du Mac a résolu le problème dans la mesure où le fichier ne peut plus être traité ensuite par tous les navigateurs, et où l'aperçu dans le Finder semble correct. Cependant, l'édition du fichier - ou, d'ailleurs, de tout autre fichier sur la clé USB - a provoqué la réapparition du problème.

Après quelques expérimentations, j'ai découvert que le problème était lié à une éditeur de texte particulier . J'ai utilisé le Rédacteur en chef pour éditer le fichier, et avec cela, les choses se cassent si le fichier est sur une clé USB.

Si, après le redémarrage, j'ai édité le fichier en utilisant Tincta à la place, tout va bien.

De plus, j'ai remarqué qu'une fois que j'avais obtenu un fichier cassé avec l'éditeur Cot, je pouvais également le réparer en copiant d'abord le fichier cassé sur la ligne de commande vers un autre fichier temporaire, puis en effaçant le fichier cassé, et enfin en le recopiant à partir du fichier temporaire.

Je ne sais pas ce que Cot Editor fait spécialement avec ces fichiers, mais à un moment de mes expériences, quand j'ai voulu quitter Cot Editor, j'ai eu un message pop-up disant : "Le document x.html se trouve sur un volume qui ne supporte pas le stockage permanent des versions". J'ai vu ce message pour la première fois et je ne sais pas ce qu'il signifie, mais au moins, il montre qu'il y a un problème avec la version permanente. est quelque chose de spécial à propos du volume USB qui dérange cet éditeur de texte.

3voto

stackprotector Points 313

Tout d'abord, sachez que les autorisations de fichiers n'existent pas sur les disques formatés en FAT32. Les autorisations que vous voyez sont définies par la façon dont vous avez monté ce disque ( en savoir plus ).

Comme vous l'avez déjà découvert par vous-même, CotEditor est à l'origine du problème dans votre cas. C'est parce que CotEditor a une fonction de sauvegarde et de versionnement automatique qui n'est probablement pas compatible avec le système de fichiers FAT32 :

Sauvegarde automatique

Vous n'avez plus besoin de perdre vos données non sauvegardées. CotEditor sauvegarde automatiquement vos documents pendant l'édition.

De la code vous pouvez lire ceci à propos de la Sauvegarde automatique avec les versions fonction :

Enregistrez automatiquement les documents dans votre fichier en permanence pendant l'édition. Cette option active également les Versions, la fonction moderne du système qui vous permet de revenir aux versions précédentes, ainsi que de modifier le nom ou l'emplacement du document à partir de la barre de titre de la fenêtre.

Même s'il est désactivé, CotEditor crée secrètement des sauvegardes en cas de crash inattendu.

Donc, malheureusement, vous ne pouvez pas désactiver le comportement qui vous cause des problèmes. Mais vous n'êtes pas seul et peut-être qu'il sera corrigé ou modifié à l'avenir.

Le problème avec FAT32 peut être lié à cette fonction qui tente d'écrire des métadonnées, ce qui n'est pas pris en charge par les systèmes de fichiers FAT32 (à l'exception du nom de fichier et des horodatages). Et cette fonction ne fonctionnera pas, car vous n'avez pas real les autorisations de fichiers ici. Vous avez juste les autorisations de fichiers du montage, qui ne peuvent pas être modifiées dynamiquement.

0voto

Jonathan Sampson Points 121800

Je pense que le problème est causé par le fait que l'éditeur de Cot ne libère pas un type quelconque de verrouillage des fichiers il établit sur les fichiers qu'il ouvre à partir du volume formaté en FAT32.

En général, lorsqu'un programme ouvre un fichier avec un accès exclusif (c'est-à-dire lorsqu'il verrouille le fichier), il doit également libérer ce verrou après la fermeture (ou l'enregistrement) du fichier, ce qui n'est probablement pas le cas dans ce scénario.

Puisque le redémarrage de l'ordinateur résout le problème, un verrou de fichier temporaire qui ne se libère pas semble être la raison la plus logique de ce phénomène (puisque tous les verrous de fichiers sont libérés au démarrage du système). De plus, une copie de ce fichier n'aurait pas de verrou de fichier (puisqu'il s'agit d'une copie, et non du fichier qui était édité par Cot Editor), ce qui indique également un verrou de fichier temporaire.

Je ne suis pas sûr de la manière d'afficher une liste de tous les fichiers qui ont un verrou de fichier dans les versions actuelles de MacOS. Il peut être possible d'utiliser lsof pour voir un peu de des processus qui verrouillent les fichiers (par ex, sudo lsof | grep 'x\.html' ). Cependant, cela peut ne pas fonctionner dans toutes les situations (par exemple, comme celle où le processus Cot Editor n'est plus en cours d'exécution mais n'a pas libéré le verrou). Je pense que les informations relatives au verrouillage des fichiers sont conservées dans la mémoire de l'espace noyau et qu'aucun autre processus n'y a accès. Plus d'informations sur la façon dont le verrouillage des fichiers est implémenté dans MacOS peuvent être disponibles sur le site Noyau XNU 's Page GitHub pour fcntl .

Autre possibilité : comme vous le mentionnez, le @ qui apparaît dans la liste des autorisations dans le Terminal indique que le fichier a des attributs étendus. Il est également possible que l'un de ces attributs soit l'attribut immuable du système ( schg ) ou immuable pour l'utilisateur ( uchg ). En utilisant le chflags (par exemple, chflags nouchg x.html o chflags noschg x.html ) pourrait vous permettre de "déverrouiller" les fichiers que Cot Editor a laissé non-mutables (cela ne va probablement pas vous aider selon le raisonnement suggéré ci-dessus).

Si d'autres applications sont capables d'éditer ces fichiers normalement, il est possible qu'il y ait une sorte de bug d'édition de fichiers FAT32 qui existe avec l'application Cot Editor (c'est-à-dire, si elle fonctionne normalement sur des volumes formatés avec APFS ou HFS+), que le développeur du logiciel pourrait être en mesure de rectifier.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X