web-dev-qa-db-ja.com

/ usrの名前を誤って変更した後、名前を元に戻すにはどうすればよいですか?

ディレクトリ/usrの名前を誤って/usr_bakに変更しました。

元に戻したいので、/usr_bak/bin$PATHを追加して、システムがコマンドSudoを見つけられるようにします。

しかし今Sudo mv /usr_bak /usrは私にエラーを与えます:

Sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory

システムを再インストールする以外に、/usr_bak/usrに名前変更する方法はありますか?

63
Yves

Rootのパスワードを設定したので、Ubuntuにデフォルトでインストールされているsuおよびbusyboxを使用します。 suに必要なライブラリはすべて/libにあります。 Busyboxは静的にリンクされたユーティリティのコレクションであるため、ライブラリの欠落は問題になりません。行う:

su -c '/bin/busybox mv /usr_bak /usr'

(Busybox自体にもsuアプレットがありますが、/bin/busyboxバイナリはsetuidではないため、rootとして実行しない限り機能しません。)

Rootパスワードがない場合は、 あなたはおそらく ここでLD_LIBRARY_PATH を使用してGillesのソリューションを使用するか、または(Gillesは、これはSudoのようなsetuidバイナリでは機能しないと言っています)再起動し、GRUBメニューを編集して、カーネルパラメータとしてinit=/bin/busyboxで起動し、フォルダを元に戻します。

110
muru

muru's answer に加えて:

  • システムを修復するためにレスキューブートUSBキーを使用することもできます。例えばシステムがDebianまたはUbuntuの場合は、インストールUSBキーをレスキューモードで起動し、適切なmountおよびmvおよびumountを実行します。

  • そのような間違いをより簡単に修復できるように、私は一般的にいくつかの組み込みコマンド(特にいくつかのcprmmvに似た組み込みコマンド)を含む静的シェルもインストールしますas sash (Debian&Ubuntuでは packaged であり、ソースでは sash-3.8.tar.gz としても利用可能フォーム)とinit=/bin/sashがGrubに渡されました。

PS:sashは少しバグが多く、完全にPosix準拠ではありませんが、それでも非常に便利です。

34

最も安全な方法は、USB、CD、またはDVDでブートしたOS(Debian、Ubuntu、Suseなど)を使用して再起動することです。次に、問題のあるドライブをマウントし、名前を変更します。

/ usrまたは/ libが事実上存在しない状態で地雷原を起動するよりも安全です。

3
Larry

いくつかのテストのために/usr/bin/usr/bin_bkpに名前変更したのと同じような問題に遭遇しましたが、名前を変更できませんでした(コマンドが標準でSudoを見つけられなかったため) /usr/binのディレクトリ)から手動で(ファイルマネージャを使用して)/usr/bin_bkpディレクトリに移動し、右クリックでのほとんどの機能(名前の変更を含む)が無効になっています。

それから私は次のコマンドを試しました、そしてそれは問題を修正しました

$/usr/bin_bkp/Sudo mv /usr/bin_bkp/ /usr/bin/

私は現在のパスからSudoを呼び出して動作しましたが、すべて正常に戻りました。

OS:Xubuntu 14.04

0
geek