誤って/ bin/bashファイルを/ binフォルダー内に置くつもりのないスクリプトで上書きしました。
どうすればそのファイルの内容を取り戻すことができますか? Webでコンテンツを見つけてコピーする方法はありますか?その端末で「シンボリックリンクが多すぎます」というエラーメッセージが表示されることを考えると、ここに私のオプションは何ですか?
私はまだこのようなことの新人であり、私が得ることができるすべての助けに感謝しています。
編集:私はKali 2.2 Rollingを使用していることを忘れていました。これは、いくつかの追加機能を備えたかなりdebianです。
編集2:数日前まで間違いに気づかなかったため、マシンも再起動しました。そのため、これはかなり難しくなります。
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としていじり回すのを避けるように言われなかったからです。
マシンをシャットダウンしないでください。
実行中のシェルはまだありますか?バッシュですか?もしそうなら、あなたは大丈夫です。 (ただし、これを再度行わないでください。)
実行:
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 ~]$
ログインできても、ターミナルを開いたりシェルにアクセスしたりすることはできないが、GUIからファイルにアクセスできる場合は、/bin
に移動し、名前がsh
で終わるファイルを探します( .sh
ではなく)(ダブルクリックまたは右クリックにより)1つ実行します。特に、以下を探します。
sh
dash
ash
ksh
(またはksh
の後に番号を付けたもの。例:ksh93
)zsh
yash
または、最後の手段として、
tcsh
またはcsh
シェルを実行できる場合は、 Philipposの回答 を試してください。
別のアプローチは これらの指示 に従ってシングルユーザーモードで起動することですが、init=/bin/sh
の代わりにinit=/bin/bash
(または他のシェルの1つ)を指定します。