Déplacement accidentel du répertoire /

English version

L'autre jour, en voulant installer ce blog, j'ai réussi à mettre le désordre dans mon serveur. En effet, j'ai réussi à déplacer tous les dossiers de / dans un autre dossier, si bien qu'il m'était ensuite impossible d'accéder à des commandes de base telles que mv, cp

Que s'est-il passé ?

En voulant installer mon Wordpress, j'ai téléchargé l'archive de Wordpress sur le site officiel à l'aide de la commande wget dans le dossier /tmp de mon serveur. Suite à cela, j'ai décompressé l'archive avec un petit unzip ce qui a eu pour conséquence de me créer un dossier wordpress-4.4-1 contenant les fichiers nécessaires à Wordpress.

Il ne me restait alors qu'à déplacer le contenu de ce dossier dans le répertoire /var/www/blog de mon serveur personnel. Et c'est là que l'erreur s'est produite. En effet, j'ai lancé cette commande (faites attention aux espaces dans cette commande) :

mv /tmp/wordpress-4-4-1 / /var/www/blog

La commande mv ayant pour habitude de déplacer tous les dossiers passés en argument dans le dossier défini par le dernier argument. Ce qui fait que j'ai bien eu le dossier /tmp/wordpress-4-4-1 et son contenu dans /var/www/blog, mais que, oh joie, j'ai également eu tous les dossiers et fichiers (à l'exception de quelques-uns) de / dans /var/www/blog.

Conséquences

M'étant rendu compte de mon erreur dès que j'ai voulu faire un ls (voir erreur plus bas) pour vérifier le contenu de mon répertoire, j'ai voulu revenir en arrière en déplaçant à nouveau les fichiers et dossiers dans /. Hors, impossible de le faire car la seule réponse que j'ai eu lors du lancement de la commande mv a été celle-ci :

No such file or directory

Bien sûr, peu de commandes de base étaient encore fonctionnelles (il me restait cd et c'est presque tout).

J'ai bien essayé de lancer la commande mv avec son chemin complet : /var/www/blog/bin/mv, mais sans grand succès.

Si vous êtes dans mon cas et que vous n'avez pas redémarrer votre machine ou vous ne vous êtes pas déconnecté de votre session, NE LE FAITES SURTOUT PAS et suivez les explications qui vont suivre.

Explications

Le fait d'avoir déplacé les répertoires de / dans un autre répertoire a affecté l'utilisation des bibliothèques partagées du système qui ne retrouvent alors plus leurs petits. En effet, le Dynamic linker /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 de mon Ubuntu 64 bits (d'autres architectures peuvent avoir des dynamic loader avec des noms différents) n'est plus accessible dans /lib, ce qui fait que les exécutables ne fonctionnent plus correctement.

Solution

Le dynamic linker n'étant plus accessible en l'état, il faut indiquer explicitement à nos commandes où il se trouve. Pour remettre les chose en place, il faut remettre le dynamic loader et tout ce qui était auparavant dans /lib et dans /bin à leur place. Cela a été fait avec la commande suivante :

/var/www/blog/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 –library-path /var/www/blog/lib/x86_64-linux-gnu /var/www/blog/bin/mv /var/www/blog/bin /var/www/blog/lib /

Puis, il suffit de lancer la commande mv pour remettre les autres choses à leur place (c'est à dire dans /) :

/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 --library-path /lib/x86_64-linux-gnu /bin/mv /var/www/blog/* /

Voilà tout est bien qui finit bien. Cependant, j'ai bien cru un moment que j'allais être bon pour me refaire une installation complète avec restauration des sauvegardes. Cela m'a aussi fait repenser ma stratégie de sauvegarde car mes sauvegardes n'étaient pas de toute dernière jeunesse.

J'espère que cela a pu en aider quelque-uns.