Eu acidentalmente sincronizei tudo novamente (com o link simbólico em seguida) /
para outro disco.
Eu estava executando o rsync como um usuário comum.
Percebendo meu erro, eu quis limpar o backup. Ele apagou todos os arquivos, exceto os arquivos (com backup) emBACKUPFOLDER/dev/fd
Já era tarde e eu estava impaciente, então sudo rm -rf *
entrei no BACKUPFOLDER e me livrei deles.
Agora fiquei pensando: por que não consegui excluir esses backups do descritor de arquivo (eles tinham meu nome de usuário como proprietário) e danifiquei alguma coisa ao executar sudo rm -rf
esse backup?
Em sistemas operacionais baseados em Linux,
/dev/fd
é um link simbólico para/proc/self/fd
,/proc/self
um link simbólico para/proc/$pid
,$pid
sendo o id do processo que está fazendo issoreadlink()
nele, e/proc/$pid/fd
é um diretório virtual somente leitura cujas permissões fazem com que ninguém tenha permissão de gravação nele.Então, se você
rsync
copiou/dev/fd
como uma cópia/proc/$pid/fd
(em vez de uma cópia do link simbólico) preservando as permissões nele, você acabou com umdr-x------ your-user your-group
diretório erm
não pode excluir arquivos dentro dele, pois não tem permissão para modificar o diretório.Como você é o proprietário do diretório, você deve conseguir alterar essas permissões ou, de forma mais geral, fazer
chmod -R u+rwx BACKUPFOLDER
um backup como você mesmo, o querm -rf
garantirá o sucesso.Em qualquer caso,
sudo rm -rf BACKUPFOLDER
ousudo rm -rf BACKUPFOLDER/dev
(comosudo rm -rf BACKUPFOLDER/*
teria expandido para) ousudo rm -rf BACKUPFOLDER/dev/fd
não poderia ter causado nenhum dano ao resto do SO. Mesmo sersync
tivesse feito links simbólicos para arquivos ou diretórios no sistema lá,rm
teria removido os links simbólicos lá e não seguido os links simbólicos para diretórios para remover arquivos dentro. E em qualquer caso, nemroot
poderia ter removido/proc/$pid/fd/$n
arquivos, pois esses são arquivos virtuais expondo informações internas do kernel Linux que o kernel não deixará você remover.O
/dev/fd
symlink pode ser removido como nas versões atuais de sistemas baseados em Linux,/dev
não é um sistema de arquivos virtual como poderia ser em versões mais antigas do Linux, mas algo preenchido automaticamente por programas de espaço do usuário (udev/systemd) com base em informações fornecidas pelo kernel, mas novamenterm -rf BACKUPFOLDER/dev/fd
só poderia remover o/dev/fd
symlink seBACKUPFOLDER/dev
fosse um symlink para/dev
(ouBACKUPFOLDER
um symlink para/
ou para um diretório que contivesse umdev
symlink para/dev
) o que não tem razão para estar aqui.Algumas notas sobre seu
sudo rm -rf *
pensamento:*
é expandido (pelo shell, nãorm
) para a lista de arquivos não ocultos ali, então ele não teria deletado os ocultos. Se estiver usandozsh
, você pode usar*(D)
em vez de*
para também remover os ocultos.Se houver arquivos ou diretórios lá cujos nomes começam com
-
, a expansão de*
poderia incluir argumentos que seriam tratados como opções porrm
. Geralmente, ao usar globs ou pelo menos globs cuja expansão não é garantida para não ter elementos começando com-
(ou+
para alguns comandos), você quer usar o--
delimitador de opção:Embora você também possa fazer:
O melhor seria fazer isso
sudo rm -rf BACKUPFOLDER
aqui, o que evitaria ambos os problemas.