web-dev-qa-db-ja.com

/ bin / bashの内容と、それらを誤って上書きした場合の対処方法

誤って/ bin/bashファイルを/ binフォルダー内に置くつもりのないスクリプトで上書きしました。

どうすればそのファイルの内容を取り戻すことができますか? Webでコンテンツを見つけてコピーする方法はありますか?その端末で「シンボリックリンクが多すぎます」というエラーメッセージが表示されることを考えると、ここに私のオプションは何ですか?

私はまだこのようなことの新人であり、私が得ることができるすべての助けに感謝しています。

編集:私はKali 2.2 Rollingを使用していることを忘れていました。これは、いくつかの追加機能を備えたかなりdebianです。

編集2:数日前まで間違いに気づかなかったため、マシンも再起動しました。そのため、これはかなり難しくなります。

25
GarrukApex

bashはシェルであり、おそらくシステムシェルなので、シェルの一部がまだメモリ内にあるときに奇妙なことが起こります。ログアウトまたは再起動すると、さらに深刻な問題が発生します。

したがって、最初にシェルを安全なものに変更する必要があります。インストールしたシェルを確認する

cat /etc/shells

次に、シェルをそこにリストされている他のシェルのいずれかに変更します。たとえば、

chsh -s /bin/dash

すでに再起動したため、更新:

今日のブートプロセスがbashに依存していないのは幸運です。そのため、システムはブートしますが、コマンドラインを取得できません。ただし、/etc/passwdを編集するエディターを起動し、root行のシェルを/bin/bashから/bin/dashに変更できます。ログアウトして、再度ログインします。そのファイルに他の変更を加えないでください。変更すると、システムが完全に混乱する可能性があります。

次に、bashを再インストールしてみます

apt-get --reinstall install bash

すべてが成功した場合は、chshに戻ってbashを実行できます。

最後に、kaliは非常に専門的なディストリビューションであり、誤ってシェルを上書きしてしまう人にはおそらく適さないと思います。 この文は失礼で過酷なものと呼ばれていたので、自分の経験から書いたことを付け加えておきます。私が若い頃、システムを台無しにしたのは、誰もrootとしていじり回すのを避けるように言われなかったからです。

35
Philippos

マシンをシャットダウンしないでください。

実行中のシェルはまだありますか?バッシュですか?もしそうなら、あなたは大丈夫です。 (ただし、これを再度行わないでください。)

実行:

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

出来上がり、すべて順調です。


コメントの誰かがこれがうまくいくことを疑っているので:

[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

ログインできても、ターミナルを開いたりシェルにアクセスしたりすることはできないが、GUIからファイルにアクセスできる場合は、/binに移動し、名前がshで終わるファイルを探します( .shではなく)(ダブルクリックまたは右クリックにより)1つ実行します。特に、以下を探します。

  • sh
  • dash
  • ash
  • ksh(またはkshの後に番号を付けたもの。例:ksh93
  • zsh
  • yash

または、最後の手段として、

  • tcshまたは
  • csh

シェルを実行できる場合は、 Philipposの回答 を試してください。

別のアプローチは これらの指示 に従ってシングルユーザーモードで起動することですが、init=/bin/shの代わりにinit=/bin/bash(または他のシェルの1つ)を指定します。

5
Scott