GNU/Linux >> Linux の 問題 >  >> Linux

ビンと他のフォルダを移動しました!それらを取り戻す方法は?

root シェルがまだ残っている場合は、システムを修復できる可能性があります。すべての共通ディレクトリを移動したとしましょう (/bin/etc/lib/sbin/usr — これらは回復を困難にする可能性があるものです) /oops の下 .

mv を発行することはできません フルパス /oops/bin/mv を指定しても直接コマンド .それは mv だからです 動的にリンクされています。 /lib を移動したため ディレクトリ、mv コードの一部を構成するライブラリが見つからないため、実行できません。実際には、それよりさらに悪い:mv ダイナミックローダー /lib/ld-linux.so.2 が見つかりません (名前はアーキテクチャと UNIX バリアントによって異なる場合があり、ディレクトリは /lib32 などの別の名前になる可能性があります または /lib64 )。したがって、/lib を移動するまでは ディレクトリを戻すには、リンカを明示的に呼び出す必要があり、移動したライブラリへのパスを指定する必要があります。以下は、Debian スクイーズ i386 でテストされたコマンドです。

export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /

他のディストリビューションやアーキテクチャでは、これを少し調整する必要があるかもしれません。たとえば、x86_64 上の CentOS の場合:

export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /

何かを台無しにしたとき /lib 、静的にリンクされたツールボックスが横になっていると役立ちます。一部のディストリビューション (CentOS については知りません) は、静的にリンクされた Busybox のコピーを提供します。多くのコマンドが組み込まれたスタンドアロン シェルである sash もあります。これらのいずれかを持っている場合は、そこから回復を行うことができます。事前にインストールしていなければ、手遅れです。

# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit

root シェルがなくなったが、SSH デーモンがまだリッスンしていて、ssh 経由で root として直接ログインでき、これらの静的にリンクされたツールボックスのいずれかがある場合は、ssh でログインできる可能性があります。 /lib を移動した場合に機能します と /bin 、ただし /etc ではありません .

ssh [email protected] /oops/bin/sash
[email protected]'s password:
Stand-alone shell (version 3.7)
> -mv /oops/* /

一部の管理者は、この種の問題のために、静的にリンクされたシェルで代替アカウントを設定したり、root アカウントに静的にリンクされたシェルを使用させたりします.

root シェルがなく、予防策を講じていない場合は、Linux のライブ CD/USB から起動する必要があります (ディスクやファイルシステムにアクセスできるほど最近のものであれば何でも構いません)。ファイルを元に戻してください。


おそらく再起動せずに回復できるので、起動しないため、他のことを試すまで再起動しないでください。 SSH セッションがまだ開いている場合は、これらを試してください:

  • プログラムがどこから実行されるかは、$PATH 変数を使用して設定されます。 export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin" を実行すると、新しいビンの場所をパスに追加できます .対応する sbin を追加する必要がある場合があります ディレクトリも。フルパス /path/to/mv [from] [to] を介してプログラムを手動で実行することもできます たとえば、 mv が別の場所にある場合でも機能するはずです。トリッキーな部分は、ほとんどのコマンドが共通ライブラリにアクセスすることを望んでおり、あなたは /lib と言います 移動したので、その場所にも変数を設定する必要があります。 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib

  • いくつかの基本的なコマンドを実行できるようになったら、元に戻してください! mv /path/to/subfolder/* / 順調でしょう!すべてが元の位置に戻ると、システムは正常に動作するはずです。

それが失敗した場合は、任意の LiveCD を起動してドライブをマウントすると、フォルダーを元の場所に戻すことができます。再インストールしたり、ディストリビューションの livecd を使用したりする必要はありません。ドライブをマウントして、フォルダをディスク上の正しい場所に戻すだけです。多くの Linux ベースのレスキュー ディスクは、この種の修復を行うためのいくつかの基本的なコンソール ツールを提供することに特化しています。


シングル ユーザー モードでインストール CD を使用してコンピューターを再起動し、ルート ファイルシステムをマウントして、ファイルを Linux に戻すことができるはずです。 CentOS についてはあまり詳しくありませんが、RHEL のようなものなので、これでうまくいくはずです。


Linux
  1. 簡単なシェルスクリプトで配布名とバージョン番号を取得するにはどうすればよいですか?

  2. 特定のサイズを超えるファイルをすべて取得して削除する方法

  3. シェルで PYTHONPATH を取得するには?

  1. #!/bin/bash と #!/bin/sh はいつ使用する必要がありますか?

  2. 日付に X 日を追加して新しい日付を取得するにはどうすればよいですか?

  3. プロセスの pid を取得し、シェル スクリプトで kill -9 を呼び出す方法は?

  1. `^ m`そしてそれを取り除く方法は?

  2. 独自のIPアドレスを取得し、シェルスクリプトの変数に保存する方法は?

  3. Centos –移動したビンとその他のフォルダー!それらを取り戻す方法は?