Является ли это возможным?
Ну, большинство тривиальных и важных утилит установлены в /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(что является рекомендуемым вариантом):

Вы можете получить копию этого скрипта или загрузить его напрямую .
Давайте начнем
корневой
Загрузите вашу систему с живого диска, который имеет ту же архитектуру, что и установленная вами Ubuntu, откройте терминал и получите root-доступ:
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внутри вашей сломанной системы root:
mkdir /mnt/bintmp
Тогда связывай жизнь /binс этим:
mount --bind /bin /mnt/bintmp
Загрузите систему, установив в /bintmp/bashкачестве оболочки для входа в систему:
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чтобы принять их все.
И теперь мы закончили.
/binв Ubuntu не просто символическая ссылка на/usr/binэти дни? Так что все, что вам нужно сделать, это вернуть символическую ссылку обратно?