Déplacé bin et d'autres dossiers! Comment les récupérer?

J'ai accidentellement déplacé tous les dossiers de la racine vers un sous-dossier. ( /bin , /etc , /home , /lib , /usr … tous déplacés) Les seuls qui n'ont pas été déplacés depuis leur utilisation sont /bak , /boot , /dev , /proc , /sys .

Maintenant, toute command que j'essaie d'exécuter ne se fera tout simplement pas. Je reçois constamment "Pas de tel file ou directory".

Je suis connecté via ssh et via ftp, mais je ne peux pas déplacer les files via ftp, car la connection directe de la connection est désactivée. J'ai également access au server réel si j'ai besoin de faire quelque chose directement à partir de là.

Je suppose que je devrais éditer un file de configuration afin de lui dire où find le dossier /bin et qui m'aiderait à accéder à nouveau, mais je ne sais pas quel file le serait ou comment le faire ( puisque je ne peux même pas exécuter chmod pour changer les permissions).

Y at-il un moyen de sortir de cette autre que la réinstallation?

Je travaille sur une ancienne version de CentOS.

Je suis extrêmement nouveau dans le monde de Linux, d'où cette action et la question …

Si vous avez toujours un shell racine, vous pouvez avoir la possibilité de réparer votre système. Disons que vous avez déplacé tous les directorys communs ( /bin , /etc , /lib , /sbin , /usr – ceux qui pourraient rendre la récupération difficile) sous /oops .

Vous ne pourrez pas émettre la command mv directement, même si vous spécifiez le path complet /oops/bin/mv . C'est parce que mv est dynamicment lié ; parce que vous avez déplacé le directory /lib , mv ne peut pas s'exécuter car il ne trouve pas les bibliothèques qui font partie de son code. En fait, c'est encore pire que ça: mv ne peut pas find le chargeur dynamic /lib/ld-linux.so.2 (le nom peut varier en fonction de votre architecture et de la variante unix, et le directory pourrait être un nom différent tel que /lib32 ou /lib64 ). Par conséquent, tant que vous n'avez pas déplacé le directory /lib , vous devez invoquer explicitement l'éditeur de liens et spécifier le path d'access aux bibliothèques déplacées. Voici la command testée sur Debian squeeze i386 (vous devrez peut-être l'ajuster un peu pour d'autres dissortingbutions ou architectures).

 export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu /oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* / 

Lorsque vous avez foiré quelque chose /lib , il est possible d'avoir une boîte à outils liée statiquement. Certaines dissortingbutions (je ne sais pas sur CentOS) fournissent une copy liée statiquement de Busybox . Il y a aussi une ceinture , un shell autonome avec de nombreuses commands embeddedes. Si vous en avez un, vous pouvez faire votre récupération à partir de là. Si vous ne les avez pas installés avant, 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 une de ces boîtes à outils liées statiquement, vous pourriez peut-être le faire. peut fonctionner si vous avez déplacé /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 créent un count alternatif avec un shell lié statiquement, ou font que le count root utilise un shell lié statiquement, uniquement pour ce type de problème.

Si vous n'avez pas de shell racine et que vous n'avez pas pris de précautions, vous devrez démarrer à partir d'un CD / USB Live Linux (tout fonctionnera aussi longtime qu'il est assez récent pour pouvoir accéder à vos disques et filesystems). déplacer les files en arrière.

Vous pouvez probablement récupérer sans redémarrer, donc ne redémarrez pas avant d'avoir essayé d'autres choses, car cela ne démarrera pas. Si vous avez toujours ouvert votre session SSH, essayez ceci:

  • Où les programmes sont exécutés est défini en utilisant la variable $ PATH. Vous pouvez append votre nouvel location bin au path en exécutant l' export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin" . Vous devrez peut-être également append les directorys sbin correspondants. Vous pouvez également exécuter des programmes manuellement via leur path d'access complet /path/to/mv [from] [to] par exemple devrait fonctionner même si mv est dans un endroit différent. La partie la plus difficile est que la plupart des commands vont vouloir accéder à des bibliothèques communes et vous dites que /lib été déplacé, vous devez donc définir une variable pour l'endroit où il se trouve. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib

  • Une fois que vous pouvez exécuter certaines commands de base, déplacez les choses en arrière! mv /path/to/subfolder/* / serait en ordre! Une fois que tout est remis en place, le système devrait se comporter normalement.

Si cela échoue, démarrez tout LiveCD et monter le lecteur devrait vous permettre de déplacer les dossiers d'où ils appartiennent. Vous n'avez pas besoin de réinstaller ni même d'utiliser votre dissortingbution livecd, il vous suffit de monter le lecteur et de remettre les dossiers au bon endroit sur le disque. Beaucoup de disques de secours basés sur Linux se spécialisent en vous donnant juste quelques outils de console de base pour faire ce genre de réparation.

Vous devriez pouvoir redémarrer l'ordinateur avec un CD d'installation en mode mono-user, monter le système de files racine et déplacer les files sur Linux. Je ne connais pas beaucoup de centos, mais c'est comme RHEL, donc ça devrait marcher.

Merci beaucoup à Gilles, 5 ans plus tard et vos posts ont encore sauvé ma journée, sinon la semaine.

Je voulais déplacer le contenu d'un sous-dossier dans le dossier courant mais au lieu de mv sub/* . , J'ai fait mv sub /* . , donc j'ai tout déplacé vers le dossier actuel. Heureusement, j'ai trouvé cette réponse, et j'ai réussi à réparer ma machine avec une relative facilité. Cependant, j'ai dû ajuster légèrement les commands depuis que je travaille sur une machine x86_64 exécutant Ubuntu 16.04. Je voudrais laisser les instructions ici, au cas où quelqu'un se débattrait:

 export LD_LIBRARY_PATH=/oops/lib:/oops/lib/x86_64-linux-gnu /oops/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /