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; -)