Reparando depois de “mv / * ../”

1

Depois de deixar meu laptop com um shell de root aberto na minha mesa (rodando o ubuntu 13.10), algumas pessoas não tão legais construíram meu sistema usando "mv / * ../"

Existe alguma maneira fácil de corrigir isso ou estou melhor salvando o que pode ser salvo e reformatado?

    
por James 05.01.2014 / 15:31

3 respostas

0

Agora, não sou especialista em comandos, mas isso parece ser desagradável (por que você deixaria uma máquina aberta no usuário root?).

Se os arquivos ainda estiverem no sistema (não é provável), você poderá movê-los de volta. Mas desde que você está perguntando isso eu não acho que eles são.

Minha melhor aposta seria reinstalar o sistema.

E diga a si mesmo para nunca mais deixar um novo sistema ROOT. : P

    
por Dan Johansen 05.01.2014 / 15:37
0

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

    
por Lekensteyn 05.01.2014 / 16:02
0

Isso dependerá do diretório em que seu shell de root foi deixado aberto. O comando mv /* ../ moverá tudo da pasta / para a pasta pai do diretório atual .

Agora, o principal problema que você terá é que nenhum comando funcionará, pois /bin será agora /home/bin (supondo que o diretório de trabalho do seu shell root seja seu $HOME ). Isso pode ser facilmente resolvido iniciando em uma sessão ao vivo, montando sua unidade local e movendo os arquivos de volta.

Você também pode tentar executar /home/bin/ls /home . Se isso mostrar pastas como /usr e /etc , você sabe que seus arquivos / foram movidos para / home 'e poderá recuperá-los executando (a partir do shell de raiz aberta):

/home/bin/mv /home/{bin,boot,dev,etc,lib,lib32,lib64,media,mnt,opt,proc,root,run,sbin,srv,sys,tmp,usr,var} /
    
por terdon 05.01.2014 / 16:03