Rimuovere un file su Linux utilizzando il numero di inode


14

Se si crea un file su UNIX / Linux con caratteri speciali, ad esempio touch \"la*, non è possibile rimuoverlo con rm "la*. Devi usare il numero di inode (puoi se aggiungi il \nome prima, lo so, ma dovresti indovinare come utente che è stato usato nella creazione del file).

Ho controllato la manpage per rm, ma non si fa menzione del numero dell'inode. Anche fare rm inodenumbernon funziona.

Qual è il comando per questo?

Risposte:


23

Alcuni altri metodi includono:

sfuggire ai caratteri speciali:

[~] $ rm \ "la \ *

usa il comando find e cerca solo la directory corrente. Il comando find può cercare numeri di inode e ha un comodo -deleteinterruttore:

[~] $ ls -i
7404301 "la *

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

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

Eh, usare find sarebbe sicuramente più facile del mio suggerimento, non avevo mai notato -inum :)

Find ha molti interruttori fantastici da esplorare, è il mio strumento coltellino svizzero per essere abbastanza onesto :)
John T

t: oh così vero.
Akira,

Solaris non ha le opzioni "-delete" delle opzioni "-maxdepth".
Guthrie,

Dovresti limitare la ricerca con l' -xdevopzione poiché anche altri filesystem montati potrebbero avere file non correlati con lo stesso numero di inode.
Jonas Berlin,

5

Forse mi manca qualcosa, ma ...

rm '"la*'

Comunque, i nomi dei file non hanno inode, i file sì. Cercare di rimuovere un file senza rimuovere tutti i nomi di file che lo indicano danneggerà il tuo filesystem.


bene, questo funzionerebbe solo per la directory corrente, ma è davvero una valida causa di preoccupazione. Stupido che mi mancasse. Tuttavia non rimuove ancora il file.
KdgDev,

3
Ovviamente no. Il file viene rimosso solo quando non ci sono più nomi di file che lo puntano e nessun processo lo tiene aperto.
Ignacio Vazquez-Abrams,

5

Se vuoi davvero farlo - e il tuo caso d'uso non sembra proprio che sia necessario, potresti provare gli strumenti di debug del file system. Se sei disposto a perdere tutto, cioè.

Ad esempio, per ext2 / 3/4 il debugfscomando ha un'opzione "kill_file" che sembra prendere un inode. Come già detto in altre risposte, questo sarà danneggiare il file system, come ci saranno voci di directory che punta a un file inesistente. Correre in fsckseguito potrebbe essere in grado di riparare questo. È improbabile che tu possa farlo su un file system montato.

Ma ti consiglio vivamente di usare solo l'escaping / quoting appropriato ed eliminare tali file con il rmcomando regolare come menzionato in una risposta precedente - e utilizzare rm -iper una maggiore sicurezza quando si tratta di nomi di file contenenti caratteri globbing come *


1

Mentre consiglio vivamente l'approccio "sfuggire ai caratteri speciali", c'è sempre il clricomando quando si vuole veramente corrompere il filesystem risolvibile.


2
Va notato che di clrisolito è presente solo su sistemi Oracle (ad esempio SunOS).
can-ned_food


1

La sfida che ho dovuto affrontare è stata la rimozione di un nome file che inizia con un trattino, ma vuole sempre interpretarlo come nome host. Ho risolto questo usando:

rm ./-g4xxx
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.