Si vous créez un fichier sous UNIX / Linux avec des caractères spéciaux, tels que touch \"la*
, vous ne pouvez pas le supprimer avec rm "la*
. Vous devez utiliser le numéro d'inode (vous pouvez si vous ajoutez le \
avant le nom, je sais, mais vous devez deviner en tant qu'utilisateur qu'il a été utilisé dans la création du fichier).
J'ai vérifié la page de manuel pour rm, mais il n'y a aucune mention du numéro d'inode. Faire rm inodenumber
ne marche pas non plus.
Quelle est la commande pour cela?
-xdev
option car d'autres systèmes de fichiers montés peuvent également avoir des fichiers non liés avec le même numéro d'inode.Peut-être que je manque quelque chose, mais ...
Quoi qu'il en soit, les noms de fichiers n'ont pas d'inodes, les fichiers en ont. Essayer de supprimer un fichier sans supprimer tous les noms de fichiers qui pointent vers lui endommagera votre système de fichiers.
la source
Si vous voulez vraiment le faire - et que votre cas d'utilisation ne semble pas vraiment du tout nécessaire, vous pouvez essayer des outils de débogage du système de fichiers. Si vous êtes prêt à tout perdre, bien sûr.
Par exemple, pour ext2 /
debugfs
3/4, la commande a une option "kill_file" qui semble prendre un inode. Comme mentionné dans d' autres réponses, cela va endommager votre système de fichiers, car il y aura des entrées de répertoire pointant vers un fichier inexistant. L'exécutionfsck
ultérieure peut être en mesure de réparer cela. Il est peu probable que vous puissiez le faire sur un système de fichiers monté.Mais je vous recommande fortement d'utiliser simplement des échappements / guillemets appropriés et de supprimer ces fichiers avec la
rm
commande régulière comme mentionné dans une réponse précédente - et d'utiliserrm -i
pour plus de sécurité lorsque vous traitez des noms de fichiers contenant des caractères globbing comme *la source
Bien que je recommande fortement l'approche "échapper aux caractères spéciaux", il y a toujours la
clri
commande lorsque vous voulez vraiment une corruption du système de fichiers réparable.la source
clri
n'est généralement présent que sur les systèmes Oracle (par exemple SunOS).Vous pouvez supprimer des fichiers commençant par un tiret en appelant
rm -- filename
.la source
Le défi que j'avais était de supprimer un nom de fichier qui commence par un tiret - rm veut toujours l'interpréter comme un nom d'hôte. J'ai résolu cela en utilisant:
la source