Come eliminare un file chiamato "filen / ame" (con barra) su un filesystem ext4 in debugfs?


26

Giocando con e2fsprogs debugfs, per caso / incidente, è filen/amestato creato un file chiamato . Ovviamente il carattere barra viene utilizzato /come carattere di separazione speciale nei nomi dei percorsi.

Continuando a utilizzare debugfsvolevo rimuovere il file denominato filen/ame, ma ho avuto scarso successo, poiché il /personaggio non è interpretato come parte del nome file?

Il debugfs fornisce un modo per rimuovere questo file contenente la barra? Se é cosi, come?

Ero solito:

cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs

che produce:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame

Ho provato quanto segue per rimuovere il filen/amefile:

debugfs -w -R "rm filen/ame" /tmp/ext4fs

ma questo non ha funzionato e ha prodotto solo:

debugfs 1.43.4 (31-Jan-2017)
rm: File not found by ext2_lookup while trying to resolve filename

Oltre a modificare manualmente il contenuto del nodo della directory, c'è un modo per rimuovere il file usando debugfs?


L'escaping del forwardslash ( filen\/ame) non funziona?
JAB

17
+1 e congratulazioni. Sei riuscito a trovare uno dei due soli casi di "carattere strano nel nome del file" in cui semplicemente citare e / o sfuggire correttamente al personaggio in un comando di shell non risolverà il problema. (L'altro sarebbe un byte nullo nel nome di un file, anche se sospetto che, sulla maggior parte dei filesystem, questo
troncerebbe

Risposte:


33

Se vuoi una soluzione e non stai solo provando debugfs, puoi fare in modo che fsck faccia il lavoro per te. Contrassegna il filesystem come sporco ed eseguilo fsck -yper cambiare il nome del file:

$ debugfs -w -R "dirty" /tmp/ext4fs
$ fsck -y /tmp/ext4fs
 ...
/tmp/ext4fs was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry 'filen/ame' in / (2) has illegal characters in its name.
Fix? yes
 ...
$ debugfs -w -R "ls" /tmp/ext4fs
2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen.ame   

3
e2fsckha -fun'opzione orce che porterà a un controllo completo "anche se il file system sembra pulito".
David Foerster,

3

Laureati su fsck working; se per qualche motivo non ha funzionato la risposta è ls -i1seguita da umounte poi clri.

Rif: http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm

Ho effettivamente testato questo metodo.


Se questo è Linux (come sembra), vale la pena notare che clrinon è un comando separato (come lo è su alcuni altri sistemi Unix), è un sottocomando all'interno debugfs.
Hobbs

@hobbs: allora devo rendere insolito il mio. Oh aspetta, nvm clri era solo eco "clri $ 2" | debug "$ 1"
Joshua

Le tue istruzioni richiedono comunque di eseguire fsck - che risolverà il problema, con il messaggio Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?anziché quello indicato nell'altra risposta - ma fare il clri è un passo in più. Non sembra esserci un modo per risolverlo puramente all'interno di debugfs.
Casuale 832

@ Random832: ho avuto fsck non risolverlo da solo in passato. :(
Joshua,

-1

Se si sposta il file in una directory, è possibile quindi eliminare la directory con il file in essa contenuto.

mkdir foo 
mv filen* foo
rm -rf foo

1
Funzionerebbe per qualsiasi altro nome di file scomodo, ma non funzionerà per un nome di file che contiene /.
zwol,
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.