Na maioria dos casos, é relativamente fácil desfazer um movimento errado. O comando mv /* ../
move cada arquivo não oculto em seu diretório de nível superior para o pai de seu diretório de trabalho atual .
Se você estava logado como root, seu diretório de trabalho atual é /root
por padrão. Nesse caso, o comando mv /* ../
não tem nenhum efeito, pois é efetivamente traduzido para mv /* /
.
Desde que você mencionou que "seu sistema está emparedado", presumo que você tenha tido azar e seu diretório atual não é /root
(ou qualquer coisa com o diretório pai /
). Digamos que você estivesse no diretório /var/www
. Agora, isso significa que todos os arquivos foram movidos para o diretório /var/
.
Como nenhum dos programas será iniciado (as bibliotecas não estão acessíveis, os programas também estão corrompidos), sugiro que você inicialize em um Live CD e continue com a recuperação. Nos seguintes comandos, substitua $ROOT
pelo ponto de montagem da sua instalação do Ubuntu (por exemplo, /media/Ubuntu
).
Vamos ver o que está contido no diretório raiz:
$ ls $ROOT
bin
boot
dev
etc
home
initrd.img # symlink to /boot/initrd.img-3.8.0-34-generic
lib
lib32
lib64
lost+found # special directory for ext filesystems, cannot be moved
media
mnt
opt
proc
root
run
sbin
selinux
srv
sys
tmp
usr
var
vmlinuz # symlink to boot/vmlinuz-3.8.0-34-generic
O padrão glob /*
é expandido pelo shell, então o comando se torna algo como:
mv /bin /boot (stripped for saving space) /usr /var /vmlinuz /var/
Se /var/
não contiver nenhum dos nomes de /
, você poderá simplesmente movê-lo de volta. Supondo que seu diretório de trabalho atual seja /var
( cd /var
), você pode executar:
mv bin boot (stripped for saving space) usr var vmlinuz $ROOT/
Ou faça um por um:
mv bin $ROOT/
mv boot $ROOT/
...
mv var $ROOT/
mv vmlinuz $ROOT/
Casos especiais:
- Quando um diretório em
/var/
tem o mesmo nome de um diretório em /
, o diretório não é movido. Este é o caso de /run/
e /var/run/
.
Casos especiais que não são aplicáveis aqui, mas mencionados para sua integridade:
- Quando um diretório em
/var/
tiver o mesmo nome que um item em /
(diretório, arquivos, links simbólicos etc.), o item de /
será movido para o diretório /var/NAME
. Por exemplo, se /NAME
for um arquivo ou diretório e /var/NAME/
for um diretório, /NAME
será movido para /var/NAME/NAME
.
- Quando
/var/NAME
é um arquivo e /NAME
também é um arquivo, então /var/NAME
é sobrescrito com /NAME
. A recuperação não é tão fácil aqui, já que você precisa de ferramentas forenses agora.
- Quando
/var/NAME
for um arquivo e /NAME
for um diretório, nada acontecerá (e uma mensagem de erro será impressa).
Da próxima vez, não esqueça de travar a tela ( Ctrl + Alt + L ) e sugerir o "cara não tão legal" que perda de dados não é um bom presente de Ano Novo; -)