Se você ainda possui um shell raiz, pode ter a chance de reparar seu sistema. Vamos dizer que você moveu todos os diretórios comuns ( /bin
, /etc
, /lib
, /sbin
, /usr
- estas são as únicas que podem tornar difícil recuperação) sob /oops
.
Você não poderá emitir o mv
comando diretamente, mesmo se especificar o caminho completo /oops/bin/mv
. Isso porque mv
é dinamicamente vinculado ; porque você moveu o /lib
diretório, mv
não pode ser executado porque não consegue encontrar as bibliotecas que fazem parte do seu código. De fato, é ainda pior do que isso: mv
não é possível encontrar o carregador dinâmico /lib/ld-linux.so.2
(o nome pode variar dependendo da sua arquitetura e da variante unix, e o diretório pode ser um nome diferente, como /lib32
ou /lib64
). Portanto, até que você mova o /lib
diretório de volta, é necessário chamar explicitamente o vinculador e especificar o caminho para as bibliotecas movidas. Aqui está o comando testado no Debian squeeze i386.
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
Pode ser necessário ajustar um pouco isso para outras distribuições ou arquiteturas. Por exemplo, para o CentOS em x86_64:
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
Quando você estraga alguma coisa /lib
, ajuda ter uma caixa de ferramentas vinculada estaticamente por aí. Algumas distribuições (não sei sobre o CentOS) fornecem uma cópia do Busybox vinculada a estaticamente . Há também sash , um shell autônomo com muitos comandos embutidos. Se você tiver um desses, poderá fazer sua recuperação a partir daí. Se você não os instalou antes do fato, é tarde demais.
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
Se você não possui mais um shell raiz, mas ainda tem um daemon SSH ouvindo e pode efetuar login diretamente como root pelo ssh, e você possui uma dessas caixas de ferramentas vinculadas estaticamente, poderá fazer o ssh. pode funcionar se você se mudou /lib
e /bin
, mas não /etc
.
ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
Alguns administradores configuram uma conta alternativa com um shell vinculado estaticamente ou fazem com que a conta raiz use um shell vinculado estaticamente, apenas para esse tipo de problema.
Se você não possui um shell raiz e não tomou precauções, precisará inicializar a partir de um CD / USB ao vivo do Linux (qualquer um será suficiente, desde que seja recente o suficiente para acessar seus discos e sistemas de arquivos) e mova os arquivos de volta.