web-dev-qa-db-fra.com

Quel est le contenu de / bin / bash et que dois-je faire si je les écrase accidentellement

J'ai accidentellement remplacé le fichier/bin/bash par un script stupide que j'avais l'intention de placer dans le dossier/bin.

Comment récupérer le contenu de ce fichier? Existe-t-il un moyen de trouver le contenu sur le Web et de le recopier? Quelles sont mes options ici, étant donné que le terminal donne une erreur en parlant de "Trop de liens symboliques?"

Je suis encore un nouveau venu dans ce genre de choses et j'apprécie toute l'aide que je peux obtenir.

Edit: j'ai oublié de mentionner que je suis sur Kali 2.2 Rolling, qui est à peu près Debian avec quelques fonctionnalités supplémentaires.

Edit 2: J'ai également redémarré la machine, car je n'ai réalisé mon erreur qu'il y a quelques jours. Cela rend cela un peu plus difficile.

25
GarrukApex

bash est un Shell, probablement votre Shell système, donc maintenant des choses étranges se produisent, tandis que des parties du Shell sont toujours en mémoire. Une fois que vous vous déconnectez ou redémarrez, vous aurez de plus gros problèmes.

Donc, la première chose devrait être de changer votre Shell en quelque chose de sûr. Voir les coques que vous avez installées

cat /etc/shells

Ensuite, changez votre Shell pour l'un des autres shells répertoriés ici, par exemple

chsh -s /bin/dash

Mise à jour, car vous avez déjà redémarré:

Vous avez de la chance qu'aujourd'hui le processus de démarrage ne repose pas sur bash, donc votre système démarre, vous ne pouvez tout simplement pas obtenir de ligne de commande. Mais vous pouvez démarrer un éditeur pour modifier /etc/passwd et changez le Shell dans la ligne root de /bin/bash à /bin/dash. Déconnectez-vous et reconnectez-vous. N'apportez simplement aucune autre modification à ce fichier, sinon vous risquez de gâcher complètement votre système.

Essayez ensuite de réinstaller bash avec

apt-get --reinstall install bash

Si tout a réussi, vous pouvez chsh revenir à bash.

Enfin: je pense que kali est une distribution hautement spécialisée, probablement pas adaptée aux personnes qui écrasent accidentellement leur Shell. Comme cette phrase était appelée grossière et dure, je dois ajouter que je l'ai écrite à partir de ma propre expérience. Quand j'étais plus jeune, j'ai ruiné mon système parce que personne ne m'a dit d'éviter de déconner en tant que root.

35
Philippos

N'arrêtez pas votre machine.

Avez-vous toujours un shell en cours d'exécution? C'est bash? Si oui, ça va. (Mais ne recommencez pas.)

Courir:

Sudo cp /proc/$$/exe /bin/bash

Voila, tout va bien.


Étant donné que quelqu'un dans les commentaires doute que cela fonctionne:

[vagrant@localhost ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[vagrant@localhost ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[vagrant@localhost ~]$ echo $0
-bash
[vagrant@localhost ~]$ Sudo rm /bin/bash
[vagrant@localhost ~]$ bash
-bash: /bin/bash: No such file or directory
[vagrant@localhost ~]$ Sudo su -
su: /bin/bash: No such file or directory
[vagrant@localhost ~]$ Sudo cp /proc/$$/exe /bin/bash
[vagrant@localhost ~]$ bash
[vagrant@localhost ~]$ exit
[vagrant@localhost ~]$ Sudo su -
[root@localhost ~]# logout
[vagrant@localhost ~]$ 
66
Wildcard

Si vous pouvez vous connecter, mais vous ne pouvez pas ouvrir un terminal ou accéder à un shell, mais vous pouvez accéder aux fichiers via l'interface graphique, accédez à /bin, recherchez les fichiers dont le nom se termine par sh (mais pas .sh) et exécutez-en un (en double-cliquant ou en cliquant avec le bouton droit). Recherchez en particulier les éléments suivants:

  • sh
  • dash
  • ash
  • ksh (ou ksh suivi d'un nombre; par exemple, ksh93)
  • zsh
  • yash

ou, en dernier recours,

  • tcsh ou
  • csh

Si vous pouvez faire fonctionner un Shell, essayez alors réponse de Philippos .

Une autre approche consiste à démarrer en mode mono-utilisateur en suivant ces instructions mais spécifiez init=/bin/sh (ou l'un des autres obus) au lieu de init=/bin/bash.

5
Scott