web-dev-qa-db-ja.com

rm -rfと入力してusr / bin内のすべてのファイルを削除しました*

私はLinuxが初めてで、今日Ubuntu 12.04をインストールしました。コマンド/usr/binを入力して、rm -rf *のすべてを誤って削除しました。

何がマウントされているのかわからないので、学びたいと思いますが、この時点で私に残された唯一の方法はすべてを再インストールすることだと思います。今すぐすべてを再インストールする方法を教えてください。それは私にとって大きな助けになるでしょう。

4
user1455116

今日インストールしたばかりなので、再度インストールを行ってください。これから復旧できますが、インストールをやり直すよりも多くの作業が必要になります。

/usr/binの削除から回復するには、そのディレクトリにファイルがあるすべてのパッケージを再インストールする必要があります。このコマンドを使用して、影響を受けるパッケージを一覧表示できます。

cd /var/lib/dpkg/info
grep -l '^/usr/bin/' *.list | sed 's/\.list$//'

その後、削除されたプログラムに依存せずにパッケージをダウンロードする方法を見つける必要があります。低レベルパッケージインストールユーティリティdpkgを削除したので、最初にどこかから入手する必要があります。同じリリースのUbuntuを実行している他のマシンから入手するか、別のマシンに dpkg パッケージをダウンロードして、そこからプログラムを抽出します。 /usr/bin/dpkgだけでなく、update-alternativesおよび/usr/bin/dpkg-*という名前のすべてのプログラムを含む、そのパッケージ内の他のすべてのプログラムも必要です。繰り返しますが、コピーは非常に多くのプログラムが削除された状態でトリッキーになる可能性があるため、レスキューCD/USBから再起動する必要があります。

dpkgスイートを入手したら、少なくとも dpkg および apt パッケージをダウンロードします。おそらく別のマシンまたはまだ実行中のWebブラウザーでダウンロードしてください。

次に、コマンドを使用してaptを手動でインストールします

dpkg -i /path/to/apt_0.8.16~exp12ubuntu10.2.deb

欠落しているコマンドに関するエラーが発生した場合は、最初に対応するパッケージを再インストールしてください。次に、影響を受けるすべてのパッケージを再インストールします。

apt-get --reinstall install $(grep -l '^/usr/bin/' *.list | sed 's/\.list$//')

繰り返しますが、あなたの状況では、完全な再インストールを行ってください。

7
Gilles

/usr/bin/には、システムにインストールされているほとんどのプログラムが含まれています。

Ubuntuを再度インストールするだけで、動作しているシステムを再び取得する最も簡単で最速の方法になります。

4
Florian Diesch

同じ愚かな問題を抱えていた...すべてが再び機能するように私がやったことはここにあります:

1. @Gillesの答えのように、パッケージのリストを作成します。

cd /var/lib/dpkg/info
grep -l '^/usr/bin/' *.list | sed 's/\.list$//' > ~/my_packages1.txt

2.同じUbuntuバージョンのLive CDを挿入し、そこから起動して、/usr/binディレクトリをコピーします。ハードディスクにUbuntuのパーティションがマウントされたため、次のように簡単です

cp -R /usr/bin /media/something/usr/bin

3.これで、Sudoまたはpkexecを使用できなくなりました。エラーメッセージを所有しているのはuid 0であり、setuidビットが設定されている必要があるためです。そのため、GRUBからルートシェルを起動して、それを変更する必要がありました。 ( こちら これを行う方法と ドイツ語サイト を参照してください。)今:

mount -o remount,rw / 
chown -R root:root /usr/bin
chmod a=rx,u+ws /usr/bin/Sudo
chmod a=rx,u+ws /usr/bin/pkexec

通常のUbuntuシステムで再起動します。

4.パッケージを再インストールします。

Sudo xargs -a ~/my_packages1.txt apt-get install --reinstall
rm ~/my_packages.txt

5.まだ多くのパッケージが欠落しています。 debsumsは、それらを手動でインストールするためのパッケージを見つけるのに役立ちました。 (おそらくこのステップ1と4は時代遅れですが、私は試していません...)

Sudo apt-get install debsums
Sudo debsums_init

# This lets debsums find packages with missing files, filters the package names and writes the unique ones to the file.
Sudo debsums -cs 2>&1 >/dev/null | sed -e 's/\(.*\)from \(.*\) package\(.*\)/\2/' | uniq -u > my_packages2.txt

Sudo xargs -a ~/my_packages2.txt apt-get install --reinstall
0
Frank Zalkow

これがvmの場合、それほど難しいことはありません。

  1. インストールしたパッケージのリストを保存します

    cd /var/lib/dpkg/info
    grep -l '^/usr/bin/' *.list | sed 's/\.list$//' > ~/packs.txt
    
  2. 新しいVMに同じOSバージョン(i386またはAMD64)をインストールする

  3. 新鮮な機械で

    cd /var/lib/dpkg/info
    grep -l '^/usr/bin/' *.list | sed 's/\.list$//' > ~/packs2.txt
    
  4. 新しいシステムにpacks.txtのコンテンツをコピーすると、次のことができます。

    install=$(diff -c ~/packs2.txt ~/packs.txt | grep "^- " | cut -d' ' -f2 | xargs echo )
    apt-get install -y --force-yes $install
    remove=$(diff -c ~/packs2.txt ~/packs.txt | grep "^+ " | cut -d' ' -f2 | xargs echo )
    apt-get purge -y --force-yes $remove
    
  5. これで、新しいシステムには、破損したマシンと同じコンテンツ/usr/binが含まれます

  6. 壊れたマシンのディスクを新しいマシンにマウントし、最後に:

    rsync -av /usr/bin /mnt/usr/bin
    

利益

0
Gian

NFSを介して別のコンピューターからこのディレクトリをエクスポートできますか?はい、これは非常にいため、再インストールする必要があります。

とにかく、マウントは引き続き機能するはずです。

ls /usr/bin | grep mount

grub-mount以外に何も教えてくれませんでした。そのため、マウントされたディレクトリから関連ファイルをコピーするだけで一時的に機能する場合があります。 Sudoは機能しないので、suを使用してください。

0
AdamKalisz