Remove um diretório de dentro usando a interface de linha de comando [duplicate]

4

Imaginando a próxima estrutura de arquivos simples dentro do diretório / home / user /:

/home/user 
       |--dir0 
           |--dir1
               |--file1

Meu diretório atual é 'dir1' e eu removo o diretório de dentro com o seguinte comando:

rm -r ../dir1

Depois disso (e não recebendo nenhum erro no terminal), o diretório de trabalho ainda é o mesmo e ao usar o comando pwd a saída é:

user@ubuntu:~/dir0/dir1$ pwd
/home/user/dir0/dir1
user@ubuntu:~/dir0/dir1$

Por que o SO retornaria que o diretório de trabalho é 'dir1' se ele já foi removido do sistema de arquivos?

    
por jessag 31.07.2015 / 17:34

4 respostas

7

Acho que pwd que você executou era um shell bash embutido. Apenas imprimiu o caminho que guardava na memória sem procurar o sistema de arquivos.

$ type pwd
pwd is a shell builtin
$ /bin/pwd
/bin/pwd: couldn't find directory entry in '..' with matching i-node
    
por 31.07.2015 / 17:41
7

Por que você pode continuar vendo um filme, embora ele tenha sido excluído?

Porque o descritor de arquivos pode ter desaparecido, mas o inode ainda está lá! E somente quando o inode for deletado, o arquivo será perdido para sempre!

Portanto, no seu caso: quando cd to / e todos os arquivos nessa árvore forem fechados, os inodes serão reciclados e o diretório desaparecerá para sempre ...

Lembre-se: isto não é o Windows, este é um sistema operacional profissional!

; -)

¹ A menos que seja recuperado antes de ser reciclado.

    
por 31.07.2015 / 17:42
2

O sistema operacional não retorna que o diretório de trabalho é 'dir1', o shell faz. O shell mantém o controle do diretório de trabalho atual, e o comando 'pwd' que você está executando é um comando embutido no shell. O shell não está ciente do fato de que seu comando 'rm' removeu o diretório.

$ type pwd
pwd is a shell builtin

Tente executar / bin / pwd:

$ /bin/pwd
/bin/pwd: couldn't find directory in .. with matching i-node
    
por 31.07.2015 / 17:45
2

O arquivo (diretório) está aberto. Quando você executa rm it, o SO o marca como excluído sem realmente excluí-lo. Caso você tente fazer cd neste diretório a partir de outra instância do shell, a permissão será negada. Depois de você cd sair desse diretório, o diretório será realmente excluído.

    
por 31.07.2015 / 17:48