du
, como qualquer comando que percorra árvores de diretórios de maneira recursiva, opera da seguinte maneira:
- Leia informações sobre um arquivo, acessado pelo caminho¹. No caso de
du
, a chamada ao sistemastat
fornece o tipo de arquivo (em particular, se é um diretório) e tamanho. Inicialmente, os nomes são retirados da linha de comando. - Se o arquivo for um diretório, abra e ler a lista de nomes de arquivos.
- Para cada nome de arquivo no diretório, construa um caminho de arquivo (
DIRECTORY/ENTRY_NAME
) e aja recursivamente a partir da etapa 1. Essa etapa pode ser executada parcialmente em paralelo com a anterior (depende da implementação).
rm
está em execução e excluindo arquivos um por um. Ocasionalmente, du
lê um nome de arquivo na etapa 2, mas, quando chega a hora de processá-lo na etapa 3, rm
o excluiu. Se você vê esse erro e quantas vezes depende da velocidade relativa de rm
e du
e é praticamente imprevisível.
¹ Existem apenas duas maneiras de acessar diretamente um arquivo: por caminho (incluindo informações de diretório, relativo ou absoluto) ou (se o arquivo estiver aberto) pelo descritor.