/ bin / etc / lib64 / root / sbinが削除されたか、mvフォルダーによって移動されました/ * / * su中に


11

OSはCentos 6.5 64ビット

私はtarファイルをダウンロードし、mvそれを解凍します。

解凍した後、誤って(rootとして)bashのmv folder/* /*代わりに実行するとmv folder/* .、一部のファイルを上書きできないとのことで、他のユーザーに許可を求めました。Ctrl + Cを押した。

ターミナルセッションを開いたままにしましたが、終了しましたsu

これで、ほとんどのshellコマンドにアクセスできなくなりls、どのディレクトリにもアクセスできなくなり、に戻ることができなくなりましたsu

Webサーバーとサービスはまだ実行されているようです。実行できるコマンドcdは非常に少なく、そのうちの1つであり、実行しようとするcd/etc/binエラーが発生しno directory foundます。

EDITだけから欠落しているすべてのフォルダに気づい/binetclib64rootsbin)に移動してしまった/var私が試した、ディレクトリ/var/bin/su&取得: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory


1
/var/bin/su直接走れない?
Darkhogg 2014

解決策で質問を編集しないでください。スタック交換ネットワークでは、回答を追加するのではなく、既存の回答にコメントを残して回答を改善します。
Bernhard 14

@Darkhogg /var/bin/su: user root does not exist/ etcが/ var / etcにあるため、実行できないと判断しました
webaholik

@Bernhardが修正を試みました
webaholik 14

回答:


22

システムがbusyboxインストールされている場合は、これを使用して元に戻すことができます。

busybox多くの標準ユーティリティが組み込まれたバイナリです。物事のようなmvshls、など

Pavelの回答に対するコメントから、すべてがに終わったように思えます/var。やってみることができ/var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /ます。これで、システムのほとんどが再び動作可能になります。として/tmpも存在するようなディレクトリがいくつかある/var/tmpため、単に移動することはできません。うまくいけば、それらはmv不平を言ったものであり、彼らは一人に残されました。

 

ルートシェルを取得する

また、ルートシェルを失ったとのことsuで、ld-linuxライブラリエラーが発生しています。以下を使用できる場合があります。

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

注:これを試みても機能しません。これは、su内のいくつかのファイルが必要です/etcpasswdpam.d、など)を。/etcそれでも元のままであれば、これは成功する可能性が高いでしょう。

 

busyboxなし

busyboxが利用できない場合は、次の場合と同じld-linuxトリックを使用できる場合がありますsu

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

 

ライブCDから

コメントで説明したように、ルートシェルを失った場合、かなり行き詰まっています。基本的にこれを修正するにはroot権限が必要です。そこにたどり着く唯一の方法は、パーミッションなどのユーティリティを用意するsusudo、これらを現時点でエスカレートするか、すでにrootとして実行されている別のプログラムをハイジャックすることです(何が実行されているかによって異なります)。

これにより、唯一のオプションがライブCDになります。ライブCD(またはライブUSBなど)で起動したら、ルートボリュームをマウントし、影響を受けるディレクトリ/varをの元のホームに戻し/ます。


何が起こったかの概要

folder/*folder/fooおよびなどの何かに拡張されますfolder/bar
/*のようなものに拡張されたでしょう/bin /lib32 /lib64 /etc /home /root /var。それ/varが最後のアイテムであることに注意してください。
したがって、シェルがこれらのグロブをすべて展開すると、次のようになります。

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

/varリストの最後のアイテムと同様に、すべてがそれに移動しました。


/var/bin/suエラーの理由/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Linuxのほとんどすべてのバイナリが動的にリンクされld-linuxます。ld-linuxバイナリが必要とする他のライブラリをロードするライブラリです。あなたのシステムでは、これはに住んでい/lib64/ld-linux-x86-64.so.2ます。このディレクトリが移動したため、動的にリンクされた実行可能ファイルは機能しなくなります。

busyboxが機能する理由は、busyboxが静的にリンクされているためです。使用しませんld-linux


良いアイデア。CentOSには通常、initramfsのためにbusyboxがインストールされているため、うまく機能する可能性があります。
PavelŠimerda2014

busybox残念ながらインストールされていない完璧なソリューションのように聞こえますが、これが修正された後は...しばらくの間、コマンドの実行パスを修正する/var/lib64/ld-linux-x86-64.so.2代わりに、とにかくコマンドを修正する方法はあり/lib64/ld-linux-x86-64.so.2ますか?これがコマンドを殺しているようです/var/bin
webaholik

@Patrick:OPで使用する予定のコマンドも間違っているという情報を追加していただけませんか?回答は現在(ほぼ)冗長なので、削除することができます。ところで、それはスタック交換を使用する正しい方法ですか?
PavelŠimerda2014

1
これは、いくつかのものを探しています/etc(存在しないこれ/etc/passwd/etc/nsswitch/etc/pam.d、そしておそらくより)。以下のためにsu仕事に、/etcそれの元の場所に戻っている必要があります。ルートシェルを配置しない限り、行き詰まっていると思います:-(
Patrick

2
@ user1296209 livecdを取得したら、ルートボリュームをマウントし、それらのディレクトリを元に戻します。これで、再度実行することができます。
Patrick 14

10

mv folder/* ./*同様に間違っています。実行するコマンドのセマンティクスに注意する必要があります。3 mvつ以上の引数を持つコマンドは、最後の引数を除くすべての引数を取り、それらが指すパスを最後の引数で指定されたディレクトリに移動します。

すべてのディレクトリ(非表示のものを除く)をフォルダから現在のディレクトリに移動するには、次のコマンドを使用します。

mv folder/* .

実行中のシステムが壊れています。シェルと組み込みコマンドは引き続き機能します。ライブCDを起動して、ディレクトリを戻す必要があります。再起動せずに状況を修正できるファイルを移動/名前変更する組み込みのbashについては知りません。詳細については、Patrickの回答を参照してください。


/ var / binと/ var / etcにcdできます。フォルダーがvarに移動したようですが、とにかくそれらを元に戻すことはできますか?... livecdなしで?
webaholik 2014

私は/ var / bin / suを試してみました:-bash:/ var / bin / su:/lib64/ld-linux-x86-64.so.2:bad ELF interpreter:No
such

あはは…答えを直していきます。
PavelŠimerda2014

mvすべてのファイルとフォルダーをフォルダーから現在のディレクトリに移動するには、どうすればよいですか。
webaholik 14

1
@ user1296209:ライブシステムを起動する場合、ライフシステムでrootアクセス権を持っていることは確かです。実際のシステムは、マウントされたパーティションであり、ライブシステムに特別な意味はありません。唯一の問題は、//varディレクトリが異なるパーティションにある可能性があることです。その場合、両方をマウントする必要があります。
celtschk 14

2

誤って/ usrを/ usr_oldに移動し、すべてが地獄に行きました。幸い、私はプロンプトにとどまり、次のコマンドを実行してusrフォルダーを復元できました。

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr

U&Lへようこそ、入力したコマンドはそれだけでしたか?より詳細な手順を提供してください。(特に10か月前の質問の場合、急ぐ必要はありません)
Archemar

1
はい、そのコマンドを入力した後、すべてが復元されました。たぶん私はこの間ずっと私が根を張っていたことを言及しなければなりません。
Mansehr

1

重要 ここにいて、mv正しく実行されなかったshell場合、コマンドを実行できず、ルートディレクトリ(/)からフォルダーが見つからない場合は、まず、がある場合はSUSU修正されるまで終了しないでください。元に戻せません。リモートで接続している場合、切断するとssh、サーバーをそのままにしておくことができなくなりますreboot-実行中のほとんどのサービスは正常です。Patrickが提案する多くの解決策の1つを試すことができますが、私と同じように台無しにした場合は、物理的なアクセスが必要になる可能性があります。

マシンの前で、再起動しました。予想通り、カーネルパニックが発生しました。

これはかなり簡単な修正だと思いました。livecdを挿入し、レスキューモードに入ります。これまでは簡単でした。ルートディレクトリをマウントしてみる必要がありました。ただし、必要なのは単純なマウントコマンドだけではありません。

これは、多くの人と同じようにlvmファイルシステムがあったためであり、このような救急に対処しなければならなかったのはこれが初めてでした。私は何をする必要があるかを見るためにウェブを検索しなければなりませんでした。その情報をこの投稿に統合しました。ここに私の問題を修正するための私のプロセスがありました。

1)挿入されたCentos_6.4_min cd

2)GUIインターフェースで何をしたいかを尋ねられ、Rescueを選択しました

3)Rescueは現在のシステムをマウントしようとしましたが、Linuxパーティションがないことを示しました

4)shellオプションが与えられたときに入力することを選択

この時点で、システムをマウントするために多くのことを試みましたが、運が悪かったので、これらは(lvmのため)実行しなければならないすべての手順であると確信しています。

5)私のボリュームをスキャンし、

lvmdiskscan

6)lvscanを実行し、すべてを「非アクティブ」として表示

lvscan

7)デバイスモジュールをロードする

modprobe dm-mod

8)存在するボリュームをアクティブに変更する

vgchange -ay

9)lvscan再度実行し、すべてのアイテムが「アクティブ」としてリストされるようになりました

10)マウントポイントの作成と論理パーティションのマウント

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11)フォルダーを元に戻しました(他のフォルダーが必要になる場合があります):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12)reboot

13)成功!

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