GNU/Linux >> Tutoriels Linux >  >> Linux

Bin déplacé et autres dossiers ! Comment les récupérer ?

Si vous avez toujours un shell root, 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 la récupération difficile) sous /oops .

Vous ne pourrez pas émettre le mv commande directement, même si vous spécifiez le chemin complet /oops/bin/mv . C'est parce que mv est lié dynamiquement ; parce que vous avez déplacé le /lib répertoire, 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 impossible de trouver le chargeur dynamique /lib/ld-linux.so.2 (le nom peut varier en fonction de votre architecture et de 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 déplacé le /lib répertoire arrière, vous devez invoquer explicitement l'éditeur de liens 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 ajuster cela 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/* /

Quand tu as 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 root, 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 disposez de l'une de ces boîtes à outils liées statiquement, vous pourrez peut-être vous connecter en ssh. peut fonctionner si vous avez déplacé /lib et /bin , mais pas /etc .

ssh [email protected] /oops/bin/sash
[email protected]'s password:
Stand-alone shell (version 3.7)
> -mv /oops/* /

Certains administrateurs configurent un autre compte avec un shell lié statiquement, ou font en sorte que le compte root utilise un shell lié statiquement, juste pour ce genre de problème.

Si vous n'avez pas de root shell et que vous n'avez pas pris de précautions, vous devrez démarrer à partir d'un live CD/USB Linux (n'importe lequel fera l'affaire tant qu'il est assez récent pour pouvoir accéder à vos disques et systèmes de fichiers) et déplacer les fichiers 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 il ne démarrera pas. Si votre session SSH est toujours ouverte, essayez ceci :

  • L'emplacement d'exécution des programmes est défini à l'aide de la variable $PATH. Vous pouvez ajouter votre nouvel emplacement bin au chemin en exécutant export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin" . Vous devrez peut-être ajouter le sbin correspondant les répertoires aussi. Vous pouvez également exécuter des programmes manuellement via leur chemin complet /path/to/mv [from] [to] par exemple devrait fonctionner même si mv est dans un endroit différent. La partie délicate est que la plupart des commandes voudront accéder aux bibliothèques communes et vous dites /lib a été déplacé, vous devez donc définir une variable pour savoir où cela se trouve également. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib

  • Une fois que vous pouvez exécuter certaines commandes de base, remettez les éléments en place ! mv /path/to/subfolder/* / serait dans l'ordre ! Une fois que tout est remis en place, le système devrait se comporter normalement.

Si cela échoue, démarrer N'IMPORTE QUEL LiveCD et monter le lecteur devrait vous permettre de déplacer les dossiers à leur place. Vous n'avez pas besoin de réinstaller ou même d'utiliser vos livecd de distributions, il vous suffit de monter le lecteur et de déplacer les dossiers au bon endroit sur le disque. De nombreux disques de secours basés sur Linux se spécialisent dans la fourniture de quelques outils de console de base pour effectuer ce type de réparation.


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


Linux
  1. `^m` et comment s'en débarrasser ?

  2. Comment obtenir la propre adresse IP et l'enregistrer dans une variable dans un script shell ?

  3. Centos - Corbeille déplacée et autres dossiers ! Comment les récupérer ?

  4. Comment obtenir tous les fichiers dépassant une certaine taille et les supprimer

  5. Comment obtenir le PYTHONPATH en shell?

Systèmes de fichiers virtuels sous Linux :pourquoi nous en avons besoin et comment ils fonctionnent

Comment configurer ZSH et Oh-my-zsh sous Linux

Comment obtenir des informations sur d'autres utilisateurs de Linux

Comment installer et utiliser ZSH Shell sous Linux

Comment installer et utiliser Nu Shell sous Linux

Comment créer et exécuter un script shell dans Ubuntu 22.04