Eliminar un archivo en Linux usando el número de inodo

14

Si crea un archivo en UNIX / Linux con caracteres especiales, como touch \"la*, no puede eliminarlo con rm "la*. Tienes que usar el número de inodo (puedes agregarlo \antes del nombre, lo sé, pero como usuario deberías adivinar que se usó en la creación del archivo).

Revisé la página de manual de rm, pero no se menciona el número de inodo. Hacer rm inodenumbertampoco funciona.

¿Cuál es el comando para esto?

KdgDev
fuente

Respuestas:

23

Algunos otros métodos incluyen:

escapando de los caracteres especiales:

[~] $ rm \ "la \ *

use el comando find y solo busque en el directorio actual. El comando find puede buscar números de inodo y tiene un práctico -deleteinterruptor:

[~] $ ls -i
7404301 "la *

[~] $ buscar. -maxdepth 1 -tipo f -inum 7404301
./"la*

[~] $ buscar. -maxdepth 1 -tipo f -inum 7404301 -delete
[~] $ ls -i
[~] $
John T
fuente
Je, utilizando hallazgo sin duda sería más fácil que mi sugerencia, yo nunca había notado -inum :)
Find tiene muchos cambios geniales para explorar, es mi herramienta navaja suiza para ser sincero :)
John T
t: oh que cierto.
akira
Solaris no tiene las opciones "-delete" de "-maxdepth".
guthrie 01 de
Debe limitar la búsqueda con la -xdevopción, ya que otros sistemas de archivos montados también pueden tener archivos no relacionados con el mismo número de inodo.
Jonas Berlin
5

Tal vez me estoy perdiendo algo, pero ...

rm '"la*'

De todos modos, los nombres de archivo no tienen inodes, los archivos sí. Intentar eliminar un archivo sin eliminar todos los nombres de archivo que apuntan a él dañará su sistema de archivos.

Ignacio Vazquez-Abrams
fuente
bueno, esto solo funcionaría para el directorio actual, pero de hecho es una causa válida de preocupación. Estúpido que me perdí eso. Sin embargo, todavía no elimina el archivo.
KdgDev
3
Por supuesto no. El archivo solo se elimina cuando no hay más nombres de archivo apuntando a él y no hay procesos que lo mantengan abierto.
Ignacio Vazquez-Abrams
5

Si realmente desea hacer esto, y su caso de uso no parece realmente necesario, puede probar las herramientas de depuración del sistema de archivos. Si estás dispuesto a perder todo, eso es.

Por ejemplo, para ext2 / debugfs3/4 el comando tiene una opción "kill_file" que parece tomar un inodo. Como se ha mencionado en otras respuestas, esto va a dañar el sistema de archivos, ya que habrá entradas de directorio que apunta a un archivo que no existe. Correr fsckdespués puede reparar esto. Es poco probable que pueda hacer esto en un sistema de archivos montado.

Pero le recomiendo encarecidamente que solo use el escape / cita apropiado y elimine dichos archivos con el rmcomando regular como se mencionó en una respuesta anterior, y use rm -ipara mayor seguridad al tratar con nombres de archivo que contienen caracteres globales como *


fuente
1

Si bien recomiendo encarecidamente el enfoque de "escapar de los caracteres especiales", siempre existe el clricomando cuando realmente desea que se corrija el sistema de archivos.

mpez0
fuente
2
Cabe señalar que clrigeneralmente solo está presente en los sistemas Oracle (por ejemplo, SunOS).
can-ned_food
1

Puede eliminar archivos que comienzan con un guión llamando rm -- filename.

uli42
fuente
1
Esto parece ser un comentario sobre esta respuesta en lugar de una respuesta a la pregunta del OP.
Digo reinstalar a Mónica el
1

El desafío que tuve fue eliminar un nombre de archivo que comienza con un guión: rm siempre quiere interpretarlo como un nombre de host. Resolví esto usando:

rm ./-g4xxx
Anthony V Edwards
fuente