/bin/shを上書きしましたが、どのように復元しますか?

/bin/shを上書きしましたが、どのように復元しますか?

私はLinuxに初めて触れ、/bin/shそれがフォルダだと思いました。

私がやったmv path/to/file /bin/shこれで端末とUbuntuソフトウェアを開くことができなくなりました。まだ発見されていない破損したプログラムがあります。

エラーが発生します。

/bin/shあまりにも多くのシンボリックリンクレイヤーを持つ子プロセスを作成できません。

どんな提案がありますか?

Ubuntu 20.04を実行しています。

答え1

/bin/shシンボリックリンクなので上書きしても実際に何も削除されず、リンクが無効になるだけです。

/bin/shShebangヘッダーにはすべての種類のスクリプトが使用されるため問題になります。これがおそらくすべての種類のランダムなものが失敗する理由です。

root または sudo: 1 でログインする必要があります。

cd /bin 
rm sh 
ln -s dash sh 

見つかったメカニズムによっては、絶対パスを使用してこれを実行する方が簡単になる可能性があるため、意味が十分に明確であることを願っています。 (元のリンクでは絶対パスを使用していない可能性がありますが、これは重要ではありません。)慣れていない場合(記号)ファイルリンク望むよりman ln

これにより、端末を再び正常に使用できるようになります。機能している場合は、以前に失敗したスクリプトによって継続的な結果が発生した場合に再起動する必要があります。

  1. これはDebian / Ubuntuとそのスイートにのみ当てはまります。他のディストリビューションにはdashシェルが含まれていない可能性がありますが、そうでbashないdash場合。/binbash

答え2

この種の問題に対する 1 つの (一般的な) 解決策は、破損したファイルが属するパッケージを見つけて、そのパッケージを再インストールすることです。これを行う方法は、ディストリビューションのパッケージマネージャによって異なります。 RPMベースのシステムでは、次のようになります。

rpm -qf /bin/sh         # Package is bash-5.1.0-2.fc34.x86_64 here
yum -y reinstall bash

関連情報