O que acontece passo a passo ao usar o "diretório rm -rf"? [duplicado]

2

Vamos supor que tenho 150 GB de dados em um diretório e acidentalmente executei esse comando para um diretório.

De repente eu percebi, eu não deveria colocar "/" no começo do diretório e cancelei o comando com Ctrl + C após alguns segundos.

O diretório ainda está lá e atualmente há pastas de a a z, mas se fosse o Windows, eu saberia o que foi e o que não está. Eu tentei testar este comando em um servidor de teste e assumi que o comando excluirá pastas começando com 0-9 e, em seguida, para a-z. Nos meus testes, não consegui verificar esta teoria porque ou tudo desapareceu ou nada foi eliminado.

Ainda curioso. É esse o caso? Como este comando funciona exatamente passo a passo? Eu perdi alguns dados?

    
por motto 04.06.2015 / 08:12

1 resposta

4

How this command exactly works step by step ?

Recursivamente. rm não excluirá um diretório se não estiver vazio. Por esse motivo, ele primeiro recorre a ele e exclui seu conteúdo (arquivos "regulares"). Isso significa que o processo desvinculando é iniciado no nível mais profundo da hierarquia de diretórios e sobe para remover os diretórios depois que eles são esvaziados. Eu acho que você poderia colocar dessa maneira (mesmo que haja pequenas variações):

/
---- somedir                        <-- (5)
-------- a                          <-- (4)
------------ a                      <-- (3)
---------------- a                  <-- (2)
-------------------- somefile1.txt  <-- (1)
-------------------- somefile2.txt  <-- (1)
-------------------- somefile3.txt  <-- (1)
-------------------- [...]
---------------- b                  <-- (2)
---------------- [...]              <-- (2)
------------ b                      <-- (3)
------------ [...]                  <-- (3)
-------- b                          <-- (4)
-------- [...]                      <-- (4)

     ^   ^   ^   ^   ^
    (5) (4) (3) (2) (1)

A propósito, rm tem uma opção -v que ajudará você a entender o que acontece enquanto é executado.

-v, --verbose
    explain what is being done

Did I lose some data ?

Sim (isso é muito provável), na parte inferior da hierarquia de diretórios. Desvincular um arquivo é realmente rápido, e se esses arquivos fossem pequenos o suficiente, não demorou muito para o kernel se livrar de blocos de dados associados a cada um deles.

Vá o mais longe possível dentro de seu diretório: arquivos como /dir/a/e/g/r/c/somefile (assumindo que a classificação alfabética vai tão longe) provavelmente desaparecerão ... É claro que a quantidade de dados perdidos depende da rapidez com que você bateu Ctrl + C .

    
por 04.06.2015 / 09:15