Se você criar um arquivo no UNIX / Linux com caracteres especiais, como touch \"la*
, não poderá removê-lo rm "la*
. Você precisa usar o número do inode (você pode, se adicionar o \
nome anterior, eu sei, mas você teria que adivinhar como usuário que foi usado na criação do arquivo).
Eu verifiquei a página de manual quanto à rm, mas não há menção ao número do inode. Fazer rm inodenumber
também não funciona.
Qual é o comando para isso?
-xdev
opção, pois outros sistemas de arquivos montados também podem ter arquivos não relacionados com o mesmo número de inode.Talvez esteja faltando alguma coisa, mas ...
De qualquer forma, os nomes de arquivos não têm inodes, os arquivos. Tentar remover um arquivo sem remover todos os nomes de arquivos que apontam para ele danificará o sistema de arquivos.
fonte
Se você realmente deseja fazer isso - e seu caso de uso não parece realmente necessário, tente as ferramentas de depuração do sistema de arquivos. Se você está disposto a perder tudo, é isso.
Por exemplo, para ext2 /
debugfs
3/4, o comando possui uma opção "kill_file" que parece receber um inode. Como mencionado em outras respostas, isso irá danificar o seu sistema de arquivos, uma vez que haverá entradas de diretório apontando para um arquivo inexistente. A execuçãofsck
posterior poderá consertar isso. É improvável que você possa fazer isso em um sistema de arquivos montado.Mas eu recomendo fortemente que você use escape / citação apropriado e exclua esses arquivos com o
rm
comando regular, conforme mencionado em uma resposta anterior - e userm -i
para obter segurança extra ao lidar com nomes de arquivos que contenham caracteres brilhantes como *fonte
Embora eu recomendo fortemente a abordagem "escapar dos caracteres especiais", sempre há o
clri
comando quando você realmente deseja corrupção do sistema de arquivos corrigível.fonte
clri
geralmente está presente apenas nos sistemas Oracle (por exemplo, SunOS).Você pode excluir arquivos começando com um traço ligando para
rm -- filename
.fonte
O desafio que tive foi remover um nome de arquivo que começa com um traço - a rm sempre quer interpretá-lo como um nome de host. Eu resolvi isso usando:
fonte