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 shell
commandes, je ls
ne 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, cd
est l'une d'entre elles et lorsque j'essaie de le cd
faire /etc
ou que /bin
cela 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 /var
répertoire, j'ai essayé /var/bin/su
et obtenir:
-bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
/var/bin/su
directement?/var/bin/su: user root does not exist
Je pense que nous avons déterminé que cela ne pouvait pas être fait parce que / etc est dans / var / etcRéponses:
Si votre système est
busybox
installé, vous pouvez l'utiliser pour remettre les choses en place.busybox
est un binaire avec de nombreux utilitaires standard intégrés. Des choses comme çamv
,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/tmp
qui existent également sous/var/tmp
, vous ne pouvez donc pas simplement les déplacer. J'espère que ce sont ceux quimv
se 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
su
qui vous donne uneld-linux
erreur de bibliothèque. Vous pourrez peut-être utiliser les éléments suivants:Remarque: En tentant cela, cela ne fonctionne pas. En effet , il
su
faut plusieurs fichiers dans/etc
(passwd
,pam.d
et 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
:À 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
su
ou d'sudo
augmenter 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
/var
vers leur page d'origine/
.Synopsis de ce qui s'est passé
folder/*
aurait étendu à quelque chose commefolder/foo
etfolder/bar
./*
aurait étendu à quelque chose comme/bin
/lib32
/lib64
/etc
/home
/root
/var
. Notant que/var
c'est le dernier élément.Ainsi, lorsque le shell a étendu tous ces globes, il aurait exécuté quelque chose comme ceci:
Tout
/var
comme le dernier élément de la liste, tout y a été déplacé.Pourquoi des
/var/bin/su
erreurs 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-linux
est 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
.la source
busybox
sonne 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.2
place de/lib64/ld-linux-x86-64.so.2
? Cela semble être ce qui tue les commandes dans/var/bin
/etc
qui ne sont pas là (/etc/passwd
,/etc/nsswitch
,/etc/pam.d
, et probablement plus). Poursu
travailler,/etc
doit être de retour dans son emplacement d'origine. À moins que vous n'ayez une racine qui traîne, je pense que vous êtes coincé :-(mv folder/* ./*
est faux aussi. Vous devez faire plus attention à la sémantique des commandes que vous exécutez. Lamv
commande 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:
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.
la source
mv
dû être ma commande pour déplacer tous les fichiers et dossiers du dossier vers le répertoire actuel?/
et/var
peuvent se trouver sur des partitions différentes, auquel cas vous devez monter les deux.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:
la source
IMPORTANT Si vous êtes ici et que vous ne l'avez pas exécuté
mv
correctement, vous ne pouvez pas exécuter lesshell
commandes et les dossiers manquants dans le répertoire racine (/
), tout d'abord, si c'est le casSU
, NE quittez PASSU
jusqu'à 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 passsh
, laissez le serveur tranquille, ne le faites pasreboot
- 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
shell
lorsque 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
lvscan
encore, 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!
la source