it-swarm.com.de

Was ist der Inhalt von / bin / bash und was mache ich, wenn ich sie versehentlich überschrieben habe?

Ich habe versehentlich die Datei/bin/bash mit einem dummen Skript überschrieben, das ich in den Ordner/bin legen wollte.

Wie bekomme ich den Inhalt dieser Datei zurück? Gibt es eine Möglichkeit, die Inhalte im Web zu finden und sie einfach wieder zu kopieren? Was sind meine Optionen hier, wenn man bedenkt, dass das Terminal einen Fehler beim Sprechen über "Zu viele symbolische Links" ausgibt?

Ich bin immer noch ein Neuling in dieser Art von Dingen, und ich schätze jede Hilfe, die ich bekommen kann.

Bearbeiten: Ich habe vergessen zu erwähnen, dass ich auf Kali 2.2 Rolling bin, was ziemlich debian mit einigen zusätzlichen Funktionen ist.

Edit 2: Ich habe die Maschine auch neu gestartet, da ich meinen Fehler erst vor einigen Tagen erkannt habe. Das macht das etwas schwieriger.

25
GarrukApex

bash ist eine Shell, wahrscheinlich Ihre System-Shell. Jetzt passieren seltsame Dinge, während sich Teile der Shell noch im Speicher befinden. Sobald Sie sich abmelden oder neu starten, werden Sie in größere Schwierigkeiten geraten.

Das erste, was Sie tun sollten, ist, Ihre Shell in etwas Sicheres zu ändern. Sehen Sie, welche Shells Sie installiert haben

cat /etc/shells

Ändern Sie dann beispielsweise Ihre Shell in eine der anderen dort aufgeführten Shells

chsh -s /bin/dash

pdate, da du bereits neu gestartet hast :

Sie haben Glück, dass der Startvorgang heutzutage nicht mehr auf bash basiert. Wenn Ihr System also startet, können Sie einfach keine Befehlszeile erhalten. Sie können jedoch einen Editor starten, um /etc/passwd Zu bearbeiten und die Shell in der Zeile root von /bin/bash In /bin/dash Zu ändern. Melden Sie sich ab und wieder an. Nehmen Sie nur keine weiteren Änderungen in dieser Datei vor, da Sie sonst Ihr System komplett durcheinander bringen können.

Versuchen Sie dann, bash mit neu zu installieren

apt-get --reinstall install bash

Wenn alles erfolgreich war, können Sie chsh zurück zu bash.

Schließlich: Ich denke, Kali ist eine hochspezialisierte Distribution, die wahrscheinlich nicht für Leute geeignet ist, die versehentlich ihre Shell überschreiben. Da dieser Satz als unhöflich und hart bezeichnet wurde, sollte ich hinzufügen, dass ich ihn aus eigener Erfahrung geschrieben habe. Als ich jünger war, habe ich mein System ruiniert, weil mir niemand gesagt hat, ich solle es vermeiden, als Wurzel herumzuspielen.

35
Philippos

Fahren Sie Ihre Maschine nicht herunter.

Hast du noch eine laufende Shell? Ist es Bash? Wenn ja, geht es dir gut. (Aber mach das nicht noch einmal.)

Lauf:

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

Voila, alles ist gut.


Da jemand in den Kommentaren daran zweifelt, dass dies funktioniert:

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

Wenn Sie sich anmelden können, aber kein Terminal öffnen oder auf andere Weise auf eine Shell zugreifen können, aber über die GUI auf Dateien zugreifen können, gehen Sie zu /bin Und suchen Sie nach Dateien, deren Namen mit sh enden (aber nicht .sh) und führen Sie eine aus (durch Doppelklick oder Rechtsklick). Achten Sie insbesondere auf Folgendes:

  • sh
  • dash
  • ash
  • ksh (oder ksh gefolgt von einer Zahl; z. B. ksh93)
  • zsh
  • yash

oder als letztes Mittel

  • tcsh oder
  • csh

Wenn Sie eine Shell zum Laufen bringen können, versuchen Sie Philippos 'Antwort .

Ein anderer Ansatz besteht darin, nach diese Anweisungen in den Einzelbenutzermodus zu booten, aber init=/bin/sh (Oder eine der anderen Shells) anstelle von init=/bin/bash Anzugeben.

5
Scott