/ bin / etc / lib64 / root / sbin supprimé ou déplacé par le dossier mv / * / * tandis que su

11

Le système d'exploitation est Centos 6.5 64 bits

J'ai téléchargé un fichier tar et je voulais le décompresser mv.

Je n'ai pas été averti, puis accidentellement (en tant que root) j'ai couru mv folder/* /*au lieu de mv folder/* .bash, disant qu'il ne pouvait pas écraser certains fichiers, puis demandé la permission pour d'autres. J'ai fait un ctrl-c'd out.

J'ai laissé la session de terminal ouverte, mais je suis sortie su.

Maintenant, j'ai perdu l'accès à la plupart des shellcommandes, je lsne peux pas trouver de répertoire et je ne peux plus y revenir su.

Le serveur Web et les services semblent toujours fonctionner. Je peux exécuter très peu de commandes, cdest l'une d'entre elles et lorsque j'essaie de le cdfaire /etcou que /bincela génère des erreurs no directory found.

EDIT Il suffit de remarquer tous les dossiers manquants de /( bin, etc, lib64, root, sbin) avons été transférés dans le /varrépertoire, j'ai essayé /var/bin/suet obtenir: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

webaholik
la source
1
Tu ne peux pas courir /var/bin/sudirectement?
Darkhogg
Veuillez ne pas modifier la question avec des solutions. Sur le réseau d'échange de pile, vous ajoutez plutôt une réponse, laissez un commentaire sur une réponse existante pour améliorer une réponse.
Bernhard
@Darkhogg /var/bin/su: user root does not existJe pense que nous avons déterminé que cela ne pouvait pas être fait parce que / etc est dans / var / etc
webaholik
@Bernhard a essayé de corriger
webaholik

Réponses:

22

Si votre système est busyboxinstallé, vous pouvez l'utiliser pour remettre les choses en place.

busyboxest un binaire avec de nombreux utilitaires standard intégrés. Des choses comme ça mv, sh, ls, etc.

D'après votre commentaire sur la réponse de Pavel, il semble que tout se soit terminé /var. Vous pouvez essayer de faire /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /. Cela devrait rendre la plupart de votre système opérationnel à nouveau. Il existe quelques répertoires tels que ceux /tmpqui existent également sous /var/tmp, vous ne pouvez donc pas simplement les déplacer. J'espère que ce sont ceux qui mvse sont plaints et qu'ils ont été laissés seuls.

 

Obtenir un shell racine

Vous avez également mentionné que vous avez perdu votre shell racine, ce suqui vous donne une ld-linuxerreur de bibliothèque. Vous pourrez peut-être utiliser les éléments suivants:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

Remarque: En tentant cela, cela ne fonctionne pas. En effet , il sufaut plusieurs fichiers dans /etc( passwd, pam.det d' autres). S'ils /etcétaient encore intacts, cela aurait de bonnes chances de réussir.

 

Sans occupé

Si vous n'avez pas de busybox disponible, vous pourrez peut-être utiliser la même astuce ld-linux que pour su:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

 

À partir d'un CD live

Comme discuté dans les commentaires, si vous avez perdu le shell racine, vous êtes à peu près coincé. Fondamentalement, pour résoudre ce problème, vous avez besoin des privilèges root. La seule façon d'y arriver est d'avoir un utilitaire tel que suou d' sudoaugmenter vos autorisations (qui ne sont pas fonctionnelles à ce stade), ou de pirater un autre programme déjà exécuté en tant que root (selon ce qui est en cours d'exécution, peu probable).

Cela laisse la seule option étant un CD live. Une fois démarré sur un CD live (ou USB live, ou quoi que ce soit), montez simplement le volume racine et déplacez les répertoires concernés /varvers leur page d'origine /.


Synopsis de ce qui s'est passé

folder/*aurait étendu à quelque chose comme folder/fooet folder/bar.
/*aurait étendu à quelque chose comme /bin /lib32 /lib64 /etc /home /root /var. Notant que /varc'est le dernier élément.
Ainsi, lorsque le shell a étendu tous ces globes, il aurait exécuté quelque chose comme ceci:

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

Tout /varcomme le dernier élément de la liste, tout y a été déplacé.


Pourquoi des /var/bin/suerreurs avec/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Presque tous les binaires sous Linux sont liés dynamiquement ld-linux. ld-linuxest la bibliothèque chargée de charger les autres bibliothèques nécessaires à un binaire. Sur votre système, cela vit /lib64/ld-linux-x86-64.so.2. Depuis que ce répertoire a été déplacé, tout exécutable lié dynamiquement ne fonctionnera plus.

La raison pour laquelle la boîte occupée fonctionne est que la boîte occupée est liée statiquement. Il n'utilise pas ld-linux.

Patrick
la source
Bonne idée. CentOS a généralement une busybox installée à cause d' initramfs , donc cela pourrait bien fonctionner.
Pavel Šimerda
busyboxsonne comme la solution parfaite, malheureusement non installée, sera après cela corrigé ... en attendant, est-il possible de corriger le chemin pour les commandes à exécuter à la /var/lib64/ld-linux-x86-64.so.2place de /lib64/ld-linux-x86-64.so.2? Cela semble être ce qui tue les commandes dans/var/bin
webaholik
@ Patrick: Pourriez-vous s'il vous plaît ajouter les informations que la commande OP destinée à utiliser est également incorrecte? Je pourrais alors supprimer ma réponse car elle est maintenant (presque) redondante. Est-ce que c'est la bonne façon d'utiliser l'échange de pile, au fait?
Pavel Šimerda
1
Il cherche plusieurs choses /etcqui ne sont pas là ( /etc/passwd, /etc/nsswitch, /etc/pam.d, et probablement plus). Pour sutravailler, /etcdoit être de retour dans son emplacement d'origine. À moins que vous n'ayez une racine qui traîne, je pense que vous êtes coincé :-(
Patrick
2
@ user1296209 Une fois que vous obtenez un livecd, montez simplement le volume racine et ramenez ces répertoires. Cela devrait être tout ce dont vous avez besoin pour recommencer.
Patrick
10

mv folder/* ./*est faux aussi. Vous devez faire plus attention à la sémantique des commandes que vous exécutez. La mvcommande avec plus de deux arguments prend tout l'argument sauf le dernier et déplace les chemins vers lesquels ils pointent dans le répertoire spécifié dans le dernier argument.

Pour déplacer tous les répertoires (sauf ceux masqués) du dossier vers le répertoire courant, vous devez utiliser:

mv folder/* .

Vous avez cassé votre système en cours d'exécution. Vos commandes shell et intégrées continuent de fonctionner. Vous devrez démarrer un CD live et déplacer les répertoires. Je ne connais pas de bash intégré pour déplacer / renommer des fichiers qui vous permettrait de corriger la situation sans redémarrer, voir la réponse de Patrick pour plus de détails.

Pavel Šimerda
la source
Je ne m'en rendais pas compte: je peux faire un cd vers / var / bin & / var / etc, on dirait que les dossiers ont été déplacés vers var, de toute façon je peux les reculer? ... sans livecd?
webaholik
J'ai essayé / var / bin / su et obtenir: -bash: / var / bin / su: /lib64/ld-linux-x86-64.so.2: mauvais interpréteur ELF: aucun fichier ou répertoire de ce type
webaholik
Aha ... je vais arranger la réponse.
Pavel Šimerda
Quelle aurait mvdû être ma commande pour déplacer tous les fichiers et dossiers du dossier vers le répertoire actuel?
webaholik
1
@ user1296209: Si vous démarrez un système actif, vous avez certainement un accès root sur votre système de vie. Votre système réel n'est qu'une partition montée sans signification particulière pour le système live. La seule complication est que vos répertoires /et /varpeuvent se trouver sur des partitions différentes, auquel cas vous devez monter les deux.
celtschk
2

J'ai accidentellement déplacé / usr vers / usr_old et tout est allé en enfer. Heureusement, je suis resté dans l'invite et j'ai pu exécuter la commande suivante pour restaurer le dossier usr:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr
Mansehr
la source
Bienvenue à U&L, était-ce la seule commande que vous tapiez? Veuillez fournir une procédure plus détaillée. (spécialement pour une question vieille de dix mois, il n'est pas nécessaire de se dépêcher)
Archemar
1
Oui, après avoir tapé cette commande, tout a été restauré. Je devrais peut-être mentionner que j'étais root pendant tout cela.
Mansehr
1

IMPORTANT Si vous êtes ici et que vous ne l'avez pas exécuté mvcorrectement, vous ne pouvez pas exécuter les shellcommandes et les dossiers manquants dans le répertoire racine ( /), tout d'abord, si c'est le cas SU, NE quittez PAS SUjusqu'à ce qu'il soit corrigé, car vous ne le récupérerez pas. Si vous êtes connecté à distance, si vous vous déconnectez, vous ne pourrez pas ssh, laissez le serveur tranquille, ne le faites pas reboot- la plupart des services en cours d'exécution devraient être OK. Vous pouvez essayer l'une des nombreuses solutions suggérées par Patrick ... mais vous aurez probablement besoin d'un accès physique si vous avez foiré comme moi.

Une fois devant la machine, je l'ai redémarré. Comme prévu, j'ai reçu une panique du noyau.

Je pensais que ce serait une solution assez facile, insérez livecd, entrez en mode de secours JUSQU'À CE POINT, C'ÉTAIT FACILE - alors j'ai dû essayer de monter mon répertoire racine. Cependant, j'avais besoin de plus qu'une simple commande de montage.

C'était parce que j'avais, comme beaucoup de gens, un système de fichiers lvm, et c'était la première fois que je devais faire face à un sauvetage comme celui-ci. J'ai dû chercher sur le Web pour voir ce que je devais faire. J'ai consolidé ces informations à ce poste. Voici mon processus pour résoudre mon problème.

1) CD Centos_6.4_min inséré

2) L'interface graphique m'a demandé ce que je voulais faire, a choisi Rescue

3) Rescue a essayé de monter le système actuel, mais a indiqué que je n'avais pas de partitions Linux

4) Vous avez choisi d'entrer shelllorsque l'option a été donnée

À ce stade, j'ai essayé beaucoup de choses pour monter le système, sans chance, je suis presque sûr que ce sont toutes les étapes que j'ai dû prendre (à cause de lvm):

5) Numérisé mes volumes,

lvmdiskscan

6) Ran lvscan, a montré tous répertoriés comme "inactifs"

lvscan

7) Charger le module de l'appareil

modprobe dm-mod

8) changer les volumes existants en actifs

vgchange -ay

9) Ran lvscanencore, maintenant tous les éléments répertoriés comme "actifs"

10) Créé le point de montage et monté la partition logique

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) Dossiers déplacés en arrière (VOUS pourriez en avoir besoin d'autres):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12)reboot

13) SUCCÈS!

webaholik
la source