Jogando com o e2fsprogs debugfs
, por alteração / acidente, um arquivo chamado filen/ame
foi criado. Obviamente, o caractere de barra /
serve como caractere separador especial nos nomes de caminho.
Ainda usando debugfs
, queria remover o arquivo nomeado filen/ame
, mas tive pouco sucesso, pois o /
caractere não é interpretado como parte do nome do arquivo?
O debugfs fornece uma maneira de remover este arquivo que contém a barra? Se sim, como?
Eu usei:
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
quais saídas:
debugfs 1.43.4 (31-Jan-2017)
2 (12) . 2 (12) .. 11 (20) lost+found 12 (980) filen/ame
Eu tentei o seguinte para remover o filen/ame
arquivo:
debugfs -w -R "rm filen/ame" /tmp/ext4fs
mas isso não funcionou e apenas produziu:
debugfs 1.43.4 (31-Jan-2017)
rm: File not found by ext2_lookup while trying to resolve filename
Além de alterar o conteúdo do nó do diretório manualmente, existe uma maneira de remover o arquivo usando debugfs
?
filen\/ame
) não funciona?Respostas:
Se você deseja uma correção e não está apenas testando
debugfs
, pode pedir ao fsck que faça o trabalho por você. Marque o sistema de arquivos como sujo e executefsck -y
para alterar o nome do arquivo:fonte
e2fsck
possui uma-f
opção de orce que levará a uma verificação completa "mesmo que o sistema de arquivos pareça limpo".Parabéns pelo funcionamento do fsck; se por algum motivo não funcionou, a resposta é
ls -i1
seguida porumount
e entãoclri
.Ref: http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm
Eu realmente testei esse método.
fonte
clri
não é um comando separado (como em outros sistemas Unix), é um subcomando por dentrodebugfs
.Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?
vez da anotada na outra resposta - mas executar o clri é uma etapa extra. Não parece haver uma maneira de resolver isso puramente de dentro dos debugfs.Se você mover o arquivo para um diretório, poderá excluir o diretório com o arquivo nele.
fonte
/
.