私はLinuxが初めてで、今日Ubuntu 12.04をインストールしました。コマンド/usr/bin
を入力して、rm -rf *
のすべてを誤って削除しました。
何がマウントされているのかわからないので、学びたいと思いますが、この時点で私に残された唯一の方法はすべてを再インストールすることだと思います。今すぐすべてを再インストールする方法を教えてください。それは私にとって大きな助けになるでしょう。
今日インストールしたばかりなので、再度インストールを行ってください。これから復旧できますが、インストールをやり直すよりも多くの作業が必要になります。
/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$//')
繰り返しますが、あなたの状況では、完全な再インストールを行ってください。
/usr/bin/
には、システムにインストールされているほとんどのプログラムが含まれています。
Ubuntuを再度インストールするだけで、動作しているシステムを再び取得する最も簡単で最速の方法になります。
同じ愚かな問題を抱えていた...すべてが再び機能するように私がやったことはここにあります:
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
これがvmの場合、それほど難しいことはありません。
インストールしたパッケージのリストを保存します
cd /var/lib/dpkg/info
grep -l '^/usr/bin/' *.list | sed 's/\.list$//' > ~/packs.txt
新しいVMに同じOSバージョン(i386またはAMD64)をインストールする
新鮮な機械で
cd /var/lib/dpkg/info
grep -l '^/usr/bin/' *.list | sed 's/\.list$//' > ~/packs2.txt
新しいシステムに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
これで、新しいシステムには、破損したマシンと同じコンテンツ/usr/bin
が含まれます
壊れたマシンのディスクを新しいマシンにマウントし、最後に:
rsync -av /usr/bin /mnt/usr/bin
利益
NFSを介して別のコンピューターからこのディレクトリをエクスポートできますか?はい、これは非常にいため、再インストールする必要があります。
とにかく、マウントは引き続き機能するはずです。
ls /usr/bin | grep mount
grub-mount
以外に何も教えてくれませんでした。そのため、マウントされたディレクトリから関連ファイルをコピーするだけで一時的に機能する場合があります。 Sudo
は機能しないので、su
を使用してください。