出来ますか?
さて、ほとんどの些細で重要なユーティリティはにインストールされて/binおり、今ではそれらすべてにアクセスできなくなりました。実際、再起動すると、システムは起動できなくなります。
とにかく、私たちは問題を修正し、/binの内容を可能な限り近くするつもりです。唯一の違いは、修正するシンボリックリンクです。
どうやって?
まず、chroot壊れたシステムを調べますが、わずかな違いがあります!その後、/binディレクトリにインストールされたファイルがあるシステムのインストール済みパッケージのリストを取得し、必要なパッケージのみをダウンロードして、必要なファイルをに抽出します/bin。これで完了です。
たとえば、の後にchroot、次を/bin使用してファイルをインストールしたパッケージのリストを取得できます。
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
また、次のものも使用できます。
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
これらのパッケージによってインストールされたファイルを一覧表示するには/bin。
次に、必要なすべてのパッケージのリストを作成し、それらをダウンロードして/bin、次のようなもので展開します。
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
ただし、スクリプトを使用して、システムにインストールされているすべてのパッケージを確認する必要があります。手動で行うのは単なる狂気です。
そこで、必要なすべてを実行するスクリプトを作成しました。それは私たちが復元するために必要なすべてのパッケージを見つけ/binて、各パッケージの名前とに属するそれらの関連ファイルを示します/bin。これがスクリーンショットです:

最後に、すべてのパッケージを再インストールするか、必要なファイルのみをダウンロードして抽出することを選択します/bin(推奨オプション)。

このスクリプトのコピーを取得するか、直接ダウンロードできます。
始めましょう
chroot
インストールしたUbuntuと同じアーキテクチャのライブディスクでシステムを起動し、ターミナルを開いてルートアクセスを取得します。
sudo -i
rootファイルシステムをマウントします(私にとっては/dev/sda1)。
mount /dev/sda1 /mnt
インターネットへの接続が必要になるためresolv.conf、ライブUbuntuからマウントされたルートパーティションにコピーします。
cp /etc/resolv.conf /mnt/etc/resolv.conf
次に、スクリプトをマウントされたパーティションのどこかにコピーします。例:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
またはwget、などを使用してダウンロードできます。
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
他の必要なパスをマウントします。
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
そしてここに小さな違いがあります:chrootそこに/binディレクトリがないときに壊れたシステムにどうやって行くことができますか?どのシェルを実行する必要がありますか?
そのため、一時的なbinディレクトリを作成します。例:bintmp壊れたシステムルート内で名前が付けられます:
mkdir /mnt/bintmp
次に、ライブ/binをそれにバインドします。
mount --bind /bin /mnt/bintmp
を/bintmp/bashログインシェルとして設定しながら、システムにchrootします。
chroot /mnt /bintmp/bash
を環境変数/bintmpとしてエクスポートしPATHます。
export PATH=/bintmp:$PATH
スクリプトに実行可能ビットを与えます。
chmod +x restore-bin.sh
スクリプトを実行します。
./restore-bin.sh
検索が完了するのを待ってから、スクリーンショットで見た質問に答えてください。復元が開始され、/binほぼ完了です。
完了したら、CTRL+ Dを使用してchroot環境から抜け出し、マウントされたパスをアンマウントします。
umount -R /mnt
システムを再起動します。
内のリンクを復元する /bin
これで、/binディレクトリ内のほぼすべてのファイルが元に戻ります。ただし、で管理される約5つのシンボリックリンクは例外update-alternativesです。
実行中のシステムで、次を実行します。
sudo update-alternatives --all
いくつか質問があります。を押しENTERて、それらすべてを受け入れることができます。
これで完了です。
/binUbuntu は/usr/bin最近の単なるシンボリックリンクではありませんか?シンボリックリンクを戻すだけでいいのですか?