19 votes

Supprimer un fichier sous Linux en utilisant le numéro d'inode

Si vous créez un fichier sous UNIX/Linux avec des caractères spéciaux, tels que touch \"la* vous ne pouvez pas l'enlever avec rm "la* . Vous devez utiliser le numéro d'inode (vous pouvez le faire si vous ajoutez l'option \ avant le nom, je sais, mais vous devriez deviner en tant qu'utilisateur qu'il a été utilisé dans la création du fichier).

J'ai vérifié la page de manuel de 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 ?

30voto

Dalroth Points 2468

D'autres méthodes existent :

l'échappement des caractères spéciaux :

\[~\]$rm \\"la\\\*

utiliser la commande find et ne rechercher que dans le répertoire courant. La commande find peut rechercher les numéros d'inode, et dispose d'une fonction pratique -delete interrupteur :

\[~\]$ls -i
7404301 "la\*

\[~\]$find . -maxdepth 1 -type f -inum 7404301
./"la\*

\[~\]$find . -maxdepth 1 -type f -inum 7404301 -delete
\[~\]$ls -i
\[~\]$

6voto

saviour123 Points 161

Je l'utilise toujours :

# retrieve the inode number
sav@ubuntu:~$ ls -il
total 8
415984 -rw-rw-r-- 1 sav sav    0 Apr 11 10:07 '"la*'
417981 drwxrwxr-x 2 sav sav 4096 Apr 11 09:44  ]rf
415985 -rw-rw-r-- 1 sav sav   11 Apr  8 16:24  text

# use find/delete
find . -inum 415984 -delete

5voto

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

rm '"la*'

De toute façon, 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.

5voto

Si vous vraiment Si vous voulez le faire - et votre cas d'utilisation ne semble pas vraiment en avoir besoin - vous pouvez essayer des outils de débogage de système de fichiers. Si vous êtes prêt à tout perdre, bien sûr.

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

Mais je recommande vivement il suffit d'utiliser l'échappement et le guillemet appropriés et de supprimer ces fichiers avec la méthode habituelle d'effacement des données. rm comme mentionné dans une réponse précédente - et utiliser la commande rm -i pour une sécurité supplémentaire lors de l'utilisation de noms de fichiers contenant des caractères de globalisation comme *.

3voto

lahjaton_j Points 121

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X