/ bin / bashの内容は何ですか。誤って上書きしてしまった場合はどうすればよいですか


24

/ bin / bashファイルを誤って/ binフォルダー内に配置することを意図したダムスクリプトで上書きしました。

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

私はまだこの種のものの初心者であり、私が得ることができるすべての助けに感謝しています。

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

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


9
bashを削除しましたか?zshを使用してください:-) </ troll>
ケビン


物理またはVM?
ベンAveling

9
次回:システムディレクトリに物を置かないでください。カスタムスクリプトやものが必要な場合は$HOME/.bin、自分自身を作成して追加PATHする/usr/local/binか、システム全体で使用する必要がある場合に使用します。または、さらに良いことに、パッケージをビルドします。
スペクトル

回答:


33

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

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

cat /etc/shells

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

chsh -s /bin/dash

既に再起動したため、更新します。

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

その後で再インストールbashしてみてください

apt-get --reinstall install bash

すべてが成功したら、にchsh戻ることができますbash

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


3
@ dr01:bashエスケープがどのように機能するかを考えると、間違った引用の問題である可能性があります。考えるcommand > /bin/bash ...command > (/bin/bash ...)
MSalters

7
その最後の文は厳しいものでした... :)
ジェームズ・レインステート・モニカ・ポーク

6
@MSalters間違った場所にある引用がrootとして実行されます。それは2つの間違いです。2番目の方法は、もちろん、特権のないユーザーとしてではなく、ルートとして複雑なパイプラインを試すことです。
デロバート

12
@JamesKPolkいいえ、それはまったく厳しいものではありません。それは単純な真実です。カーリーは、専門家が使用するために設計されたプロフェッショナルなツールです。彼らはウェブページにも同じように述べています。あなたが専門家でない場合、あなたは本当にカリを実行しているビジネスを持っていません。
テルドン

3
最後の文は厳しいものではありません。それは明白な真実です。
アンドレア

65

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

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

実行:

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 ~]$ 

18
いずれにせよ、この後に、ハードリンクやシンボリックリンク(例えばに復元するためにも、(いくつかのルートキットハンターが変更を驚かすることができる)適切な権限のために例えば、あなたのディストリビューションからのbashを再インストールすることをお勧めします/bin/shrbash
ジャコモCatenazzi

4
@GiacomoCatenazzi、実際には、このメソッドはアクセス許可を保持します。root実行時のデフォルトですcp。ただし、ハードリンクは良い点です。
ワイルドカード

1
マシンが再起動されました。通常のシェルを開くことはできませんが、GUIを使用して内容を編集できます。前述したように、「子プロセス/ bin / bashの実行に失敗しました。(シンボリックリンクのレベルが多すぎます)」というエラーが表示されます。
GarrukApex

5

ログインできるが、端末を開くことができないか、シェルにアクセスできないが、GUIからファイルにアクセスできる場合は、に移動し/bin、名前がsh(ではなく.sh)で終わるファイルを探して(ダブルクリックして)または右クリック)。特に、次を探してください。

  • sh
  • dash
  • ash
  • ksh (またはksh数字が続く;例えば、  ksh93
  • zsh
  • yash

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

  • tcsh または
  • csh

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.