Si vous avez toujours un shell racine, vous pouvez avoir une chance de réparer votre système. Disons que vous avez déplacé tous les répertoires communs ( /bin
, /etc
, /lib
, /sbin
, /usr
- ce sont ceux qui pourraient rendre difficile la récupération) sous /oops
.
Vous ne pourrez pas lancer la mv
commande directement, même si vous spécifiez le chemin complet /oops/bin/mv
. C'est parce qu'il mv
est lié dynamiquement ; parce que vous avez déplacé le /lib
répertoire, mv
ne peut pas s'exécuter car il ne peut pas trouver les bibliothèques qui font partie de son code. En fait, c'est encore pire que cela: mv
impossible de trouver le chargeur dynamique /lib/ld-linux.so.2
(le nom peut varier selon votre architecture et la variante Unix, et le répertoire peut être un nom différent tel que /lib32
ou /lib64
). Par conséquent, jusqu'à ce que vous ayez /lib
replacé le répertoire, vous devez invoquer l'éditeur de liens de manière explicite et vous devez spécifier le chemin d'accès aux bibliothèques déplacées. Voici la commande testée sur Debian squeeze i386.
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
Vous devrez peut-être l'ajuster un peu pour d'autres distributions ou architectures. Par exemple, pour CentOS sur x86_64:
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
Lorsque vous avez foiré quelque chose /lib
, il est utile d'avoir une boîte à outils liée statiquement. Certaines distributions (je ne connais pas CentOS) fournissent une copie liée statiquement de Busybox . Il y a aussi sash , un shell autonome avec de nombreuses commandes intégrées. Si vous en avez un, vous pouvez effectuer votre récupération à partir de là. Si vous ne les avez pas installés avant le fait, il est trop tard.
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
Si vous n'avez plus de shell racine, mais que vous avez toujours un démon SSH à l'écoute et que vous pouvez vous connecter directement en tant que root sur ssh, et que vous avez l'une de ces boîtes à outils liées statiquement, vous pourriez être en mesure de ssh. peut fonctionner si vous avez déménagé /lib
et /bin
, mais pas /etc
.
ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
Certains administrateurs configurent un autre compte avec un shell lié statiquement, ou obligent le compte root à utiliser un shell lié statiquement, juste pour ce genre de problème.
Si vous n'avez pas de shell racine et n'avez pas pris de précautions, vous devrez démarrer à partir d'un CD / USB live Linux (tout le monde le fera aussi longtemps qu'il sera suffisamment récent pour pouvoir accéder à vos disques et systèmes de fichiers) et déplacer les fichiers en arrière.