誤ってルートフォルダ内のすべてのフォルダをサブフォルダに移動しました。 (/bin
、、、、、...すべて移動しました。)使用中なので移動していないフォルダは/etc
、、、、、だけです。/home
/lib
/usr
/bak
/boot
/dev
/proc
/sys
これで実行したいコマンドは実行されません。続いて、「該当するファイルまたはディレクトリがありません」というメッセージが表示されます。
SSHとFTP経由で接続しますが、直接SUログインが無効になっているため、FTP経由でファイルを移動できません。物理サーバーで直接作業が必要な場合は、物理サーバーにアクセスすることもできます。
再度アクセスするのに役立つフォルダを見つけることができる場所を知らせるために、設定ファイルを編集する必要があると仮定していますが、ファイルが/bin
何であるか、何をすべきかわかりません。実行してchmod
権限を変更します)。
再インストール以外に解決策はありませんか?
以前のバージョンのCentOSを使用しています。
私はLinuxの世界に初めて触れたので、この仕事と質問は...
答え1
まだルートシェルがある場合は、システムを回復する機会があるかもしれません。よく使うディレクトリ(/bin
、、、、、 -リカバリを困難にする可能性があるディレクトリ)をすべて下に移動したとし/etc
ます。/lib
/sbin
/usr
/oops
mv
フルパスを指定してもコマンドを直接実行することはできません/oops/bin/mv
。mv
だからです。動的リンク/lib
;ディレクトリを移動したため、mv
そのコードの一部を構成するライブラリが見つからないため、実行できません。実際、それより悪いことはmv
見つけることができないということです。動的ローダー /lib/ld-linux.so.2
(名前はアーキテクチャとUNIXのバリエーションによって異なる場合があり、ディレクトリ名はまたは/lib32
などのように異なる場合があります/lib64
。)したがって、/lib
ディレクトリを再度移動する前にリンカを明示的に呼び出す必要があり、移動したライブラリへのパスを指定する必要があります。します。これはDebian scrape 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についてはわかりません)は、静的にリンクされたコピーを提供します。忙しい箱。しかもウエストバンド、多くのコマンドが組み込まれたスタンドアロンシェルです。これらのいずれかがあれば、そこから復元できます。以前にインストールしていない場合は遅すぎます。
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
もはやルートシェルはありませんが、SSHデーモンがリッスンしていてSSH経由でルートとして直接ログインでき、静的にリンクされたツールボックスの1つがある場合は、SSH経由でログインできます。引っ越すと仕事は/lib
でき/bin
ますが、仕事はできません/etc
。
ssh [email protected] /oops/bin/sash
[email protected]'s password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
一部の管理者は、この問題を解決するために静的リンクシェルを使用して代替アカウントを設定するか、ルートアカウントが静的リンクシェルを使用できるようにします。
ルートシェルがなく、予防措置を講じていない場合は、Linux Live CD / USBから起動する必要があります。ディスクにアクセスできるほど新しいCD/USBなら、すべて可能です。ファイルシステム)ファイルを再度移動します。
答え2
再起動せずに回復できるため、起動しないため、他の操作を試みる前に再起動しないでください。 SSHセッションがまだ開いている場合は、以下を試してください。
プログラムが実行される場所は、$ PATH変数を使用して設定されます。を実行して、パスに新しいストレージの場所を追加できます
export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin"
。適切な項目を追加する必要があります。回転ディレクトリにも同じです。フルパスでプログラムを手動で実行することもできます。/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ベースのリカバリディスクは、これらのリカバリを実行するためのいくつかの基本的なコンソールツールを提供するように設計されています。
答え3
インストールCDを使用して、シングルユーザーモードでコンピュータを再起動し、ルートファイルシステムをマウントし、ファイルをLinuxに戻すことができます。私はcentosについてはよくわかりませんが、RHELに似ているのでこれはうまくいきます。
答え4
申し込み後にもっとコマンドを追加したい ktipの答え最新のシステム(Unixを実行しているx86_64システム)の場合はエラーが表示されるため、mvを使用して「etc」ディレクトリを移動することはできません。
Error : Directory not empty
だから私は使うべきだった
rsync -a source_file target_location
すべてを正常に戻すことができることを確認するために。まだインストールしていない場合は、まずインストールする必要があります。