En jouant avec e2fsprogs debugfs
, par changement / accident, un fichier nommé a filen/ame
été créé. De toute évidence, le caractère barre oblique /
sert de caractère de séparation spécial dans les noms de chemin.
Toujours en utilisant, debugfs
je voulais supprimer le fichier nommé filen/ame
, mais j'ai eu peu de succès, car le /
caractère n'est pas interprété comme faisant partie du nom de fichier?
Debugfs fournit-il un moyen de supprimer ce fichier contenant la barre oblique? Si c'est le cas, comment?
J'ai utilisé:
cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs
qui génère:
debugfs 1.43.4 (31-Jan-2017)
2 (12) . 2 (12) .. 11 (20) lost+found 12 (980) filen/ame
J'ai essayé ce qui suit pour supprimer le filen/ame
fichier:
debugfs -w -R "rm filen/ame" /tmp/ext4fs
mais cela n'a pas fonctionné et n'a produit que:
debugfs 1.43.4 (31-Jan-2017)
rm: File not found by ext2_lookup while trying to resolve filename
Outre la modification manuelle du contenu du nœud de répertoire, existe-t-il un moyen de supprimer le fichier à l'aide de debugfs
?
filen\/ame
) ne fonctionne pas?Réponses:
Si vous voulez un correctif et que vous ne l'essayez pas seulement
debugfs
, vous pouvez demander à fsck de faire le travail pour vous. Marquez le système de fichiers comme sale et exécutezfsck -y
pour obtenir le nom de fichier modifié:la source
e2fsck
a une-f
option orce qui mènera à une vérification complète «même si le système de fichiers semble propre».Félicitations pour le fonctionnement de fsck; si pour une raison quelconque cela n'a pas fonctionné, la réponse est
ls -i1
suivie deumount
puisclri
.Réf: http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm
J'ai effectivement testé cette méthode.
la source
clri
n'est pas une commande distincte (comme c'est le cas sur certains autres systèmes Unix), c'est une sous-commande à l'intérieurdebugfs
.Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?
au lieu de celui noté dans l'autre réponse - mais faire le clri est une étape supplémentaire. Il ne semble pas y avoir de moyen de résoudre ce problème uniquement à partir de debugfs.Si vous déplacez le fichier vers un répertoire, vous pouvez ensuite supprimer le répertoire contenant le fichier.
la source
/
.