web-dev-qa-db-fra.com

Supprimer un fichier sur Linux à l'aide du numéro d'inode

Si vous créez un fichier sur 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 comme utilisateur qu'il a été utilisé dans la création de fichiers).

J'ai vérifié le manuel pour RM, mais il n'y a aucune mention du numéro d'inode. En faisant rm inodenumber ne fonctionne pas non plus.

Quelle est la commande pour cela?

15
KdgDev

quelques autres méthodes incluent :

échapper aux caractères spéciaux:

[~] $ rm\"la\*

utilisez la commande de recherche et recherchez uniquement le répertoire actuel. La commande de recherche peut rechercher des numéros d'inode et a une pratique pratique -delete changer:

[~] $ ls -i 
 7404301 "La * [.____] [.____] [~] $.] [~] $ trouver. -MaxDepth 1 -Type f -num 7404301 [ * 
 [.____] [~] $ trouver. -MaxDepth 1 -Type f -inum 7404301 -Delete [.____] [~] $ LS -I [.____] [~] $
24
John T

Peut-être que je manque quelque chose, mais ...

rm '"la*'

Quoi qu'il en soit, les noms de fichiers n'ont pas d'inodes, fichiers. Essayer de supprimer un fichier sans supprimer tous les noms de fichiers qui pointent sur celui-ci endommagera votre système de fichiers.

Si vous Vraiment Voulez-vous faire cela - et votre cas d'utilisation ne ressemble pas vraiment à vous en avant, vous pouvez essayer des outils de débogage du système de fichiers. Si vous êtes prêt à tout perdre, c'est-à-dire.

Par exemple, pour ext2/3/4 la commande debugfs a une option "kill_file" qui semble prendre une inode. Comme mentionné dans d'autres réponses, ce Will endommager votre système de fichiers, car il y aura des entrées de répertoire pointant vers un fichier inexistant. Exécution fsck ensuite peut être en mesure de la réparer. Il est peu probable que vous puissiez le faire sur un système de fichiers monté.

Mais je -Fortement recommandé Vous n'utilisez simplement pas de manière appropriée/citant et supprimez de tels fichiers avec la commande régulière rm comme mentionné dans une réponse antérieure - et utilisez rm -i Pour une sécurité supplémentaire lors de la gestion des noms de fichiers contenant des caractères de globe tels que *

5
user235

Le défi que j'avais retiré d'un nom de fichier qui commence par un tableau de bord - RM souhaite toujours l'interpréter comme un nom d'hôte. J'ai résolu cela en utilisant:

rm ./-g4xxx
2
Anthony V Edwards

Bien que je recommande fortement l'approche "Échapper aux caractères spéciaux", il y a toujours la commande clri lorsque vous voulez vraiment une corruption de systèmes de fichiers fixables.

1
mpez0

Vous pouvez supprimer des fichiers commençant par un tiret en appelant rm -- filename.

1
uli42