Я работал над каталогом с именем bin. После того, как я закончил, из-за права собственности на bin и некоторых файлов внутри него я случайно побежал:
sudo rm -r /bin
Вместо:
sudo rm -r bin
Кажется, что мои руки
Как восстановить исходный каталог /bin?
Я хочу, чтобы те же файлы, которые принадлежат моему Ubuntu, я не нравится копировать и вставлять их с живого диска или другой запущенной системы.
Ну, самые тривиальные и важные утилиты установлены в /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
Установите ваш [ f30] (для меня это /dev/sda1):
mount /dev/sda1 /mnt
Нам понадобится подключение к Интернету, поэтому скопируйте resolv.conf из живого Ubuntu в установленный корневой раздел:
[ f6]Теперь скопируйте сценарий где-нибудь на смонтированном разделе, например:
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. например: named bintmp внутри вашего сломанного системного корня:
mkdir /mnt/bintmp
Затем привяжите живой /bin к этому:
mount --bind /bin /mnt/bintmp
Вставьте ручку в систему, установив [ f38] в качестве вашей оболочки входа:
chroot /mnt /bintmp/bash
Экспортировать /bintmp в качестве переменной среды PATH:
export PATH=/bintmp:$PATH
Дать скрипту исполняемый бит: [!d38 ]
chmod +x restore-bin.sh
Запустить скрипт:
./restore-bin.sh
Подождите, пока поиск будет завершен, а затем ответьте на вопрос, который мы видели на скриншоте. Он начнет восстанавливать /bin, и мы почти закончили.
После этого используйте CTRL + D, чтобы выйти из среды chroot и отключить установленные пути:
umount -R /mnt
Перезагрузите систему.
Теперь почти все файлы в каталоге /bin вернулись, за исключением около 5 символических ссылок, которые управляются в update-alternatives.
В вашей запущенной системе запустите:
sudo update-alternatives --all
Он задает вам несколько вопросов; вы можете просто нажать CTRL , чтобы принять их все.
И теперь мы закончили.
Ну, самые тривиальные и важные утилиты установлены в /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.cof
Теперь скопируйте сценарий где-нибудь на смонтированном разделе, например:
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. например: named bintmp внутри вашего сломанного системного корня:
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 вернулись, за исключением около 5 символических ссылок, которые управляются в update-alternatives.
В вашей запущенной системе запустите:
sudo update-alternatives --all
Он задает вам несколько вопросов; вы можете просто нажать CTRL , чтобы принять их все.
И теперь мы закончили.
Ну, самые тривиальные и важные утилиты установлены в /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.cof
Теперь скопируйте сценарий где-нибудь на смонтированном разделе, например:
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. например: named bintmp внутри вашего сломанного системного корня:
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 вернулись, за исключением около 5 символических ссылок, которые управляются в update-alternatives.
В вашей запущенной системе запустите:
sudo update-alternatives --all
Он задает вам несколько вопросов; вы можете просто нажать CTRL , чтобы принять их все.
И теперь мы закончили.
Ну, самые тривиальные и важные утилиты установлены в /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.cof
Теперь скопируйте сценарий где-нибудь на смонтированном разделе, например:
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. например: named bintmp внутри вашего сломанного системного корня:
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 вернулись, за исключением около 5 символических ссылок, которые управляются в update-alternatives.
В вашей запущенной системе запустите:
sudo update-alternatives --all
Он задает вам несколько вопросов; вы можете просто нажать CTRL , чтобы принять их все.
И теперь мы закончили.
Ну, самые тривиальные и важные утилиты установлены в /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.cof
Теперь скопируйте сценарий где-нибудь на смонтированном разделе, например:
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. например: named bintmp внутри вашего сломанного системного корня:
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 вернулись, за исключением около 5 символических ссылок, которые управляются в update-alternatives.
В вашей запущенной системе запустите:
sudo update-alternatives --all
Он задает вам несколько вопросов; вы можете просто нажать CTRL , чтобы принять их все.
И теперь мы закончили.
Если ваша текущая система по-прежнему имеет рабочую оболочку и доступ в Интернет, это можно сделать с помощью инструментов, существующих в других местах системы. Я предполагаю, что вы удалили только /bin. /bin, конечно, имеет самую удобную утилиту, которую вы могли бы использовать в такой ситуации (busybox), но без этого нам нужно будет немного сориентироваться.
Поскольку у вас уже есть работающая оболочка, а поскольку sudo находится в /usr/bin, давайте получим запущенную корневую оболочку, прежде чем наносить дополнительный урон. Но /bin/bash и большинство других снарядов ушли! К счастью, у Linux все еще есть копия оболочки, которую вы используете. Итак:
sudo /proc/$$/exe
Строго говоря, для большей части следующего мы не нуждаемся в корневой оболочке. Но в любом случае.
Теперь dpkg все еще работает, по крайней мере, для поиска, какие пакеты имеют файлы в /bin:
dpkg -S /bin
Мы можем использовать awk для его обработки и получить имена пакетов и xargs и apt-get для загрузки пакетов (все в /usr/bin). Если у вас есть временный каталог, который вы можете использовать, cd там, потому что ваш текущий каталог будет немного запутанным:
dpkg -S /bin | awk -F '[, :]' '{NF--}1' | xargs apt-get download
Теперь самая большая проблема заключается в том, что /bin/tar отсутствует, и без него dpkg не может извлечь архивы. Мы можем получить две трети пути, потому что:
.deb файлы фактически являются ar архивами (снова в /usr/bin):ar x tar_*.deb
Состоит из двух архивов .tar.*, [ f30] и control: $ echo *.tar.*
control.tar.gz data.tar.xz
Хотя утилиты gzip находятся в /bin, unxz находится в /usr/bin: unxz data.tar.xz
Теперь у нас есть файл data.tar без tar ] извлечь tar из него.
Python на помощь! Здесь sudo действительно необходимо:
$ sudo python -c 'import tarfile; tarfile.open("data.tar").extractall("/")'
$ echo /bin/*
/bin/tar
Теперь мы можем использовать dpkg для извлечения оставшихся файлов deb для получения достаточно полного /bin:
for i in *.deb; do dpkg-deb -x "$i" /; done
Однако мы все равно должны правильно установить файлы deb, так что символические ссылки и т. д., которые будут созданы пакетами, будут воссозданы:
sudo apt install --reinstall ./*.deb
Или:
sudo dpkg -i *.deb
sudo apt-get install -f
Примечания:
.deb файлы на самом деле являются ar архивами (снова в /usr/bin):ar x tar_*.deb
После получения назад /bin/tar, вам все равно нужно извлечь некоторые из файлов deb, прежде чем вы сможете использовать apt-get: оболочки, coreutils и т. д. Легче просто извлечь все из них и переустановить позже. Вы можете временно помещать файлы с живого компакт-диска или другой системы в свой /bin, чтобы сделать вашу систему пригодной для использования, а затем заменить их на файлы из вашей установки Ubuntu, запустив apt-get install --reinstall для пакетов, которые имеют материал в /bin.
Вы можете временно помещать файлы с живого компакт-диска или другой системы в свой /bin, чтобы сделать вашу систему пригодной для использования, а затем заменить их на файлы из вашей установки Ubuntu, запустив apt-get install --reinstall для пакетов, которые имеют материал в /bin.
Некоторые дополнения к этому замечательному ответу после того, как я столкнулся с этой проблемой (наряду с удалением /boot, /etc, /lib и /lib64):
chroot требует /lib и /lib64; в противном случае вы получите следующую ошибку: failed to run command ‘/bin/bash’: No such file or directory Я скопировал их из LiveCD OS и не испытывал никаких проблем при восстановлении. YMMV в зависимости от пакетов, которые вы установили в системе. Я не могу отредактировать ответ, упомянутый выше, но есть опечатка: cp /etc/resolv.conf /mnt/etc/resolv.cof должен быть cp /etc/resolv.conf /mnt/etc/resolv.conf /boot можно легко восстановить с помощью инструментов grub. Глянь сюда. Как рекомендует этот ответ, apt install --reinstall <package> - отличный способ восстановить недостающие файлы в /bin, /lib и /lib64. Некоторые пакеты, требующие переустановки: libaio1, mysql-server, openvpn, vsftpdПримечание для себя: rm -rf folder /* не совпадает с rm -rf folder/*
Если ваша текущая система по-прежнему имеет рабочую оболочку и доступ в Интернет, это можно сделать с помощью инструментов, существующих в других местах системы. Я предполагаю, что вы удалили только /bin. /bin, конечно, имеет самую удобную утилиту, которую вы могли бы использовать в такой ситуации (busybox), но без этого нам нужно будет немного сориентироваться.
Поскольку у вас уже есть работающая оболочка, а поскольку sudo находится в /usr/bin, давайте получим запущенную корневую оболочку, прежде чем наносить дополнительный урон. Но /bin/bash и большинство других снарядов ушли! К счастью, у Linux все еще есть копия оболочки, которую вы используете. Итак:
sudo /proc/$$/exe
Строго говоря, для большей части следующего мы не нуждаемся в корневой оболочке. Но в любом случае.
Теперь dpkg все еще работает, по крайней мере, для поиска, какие пакеты имеют файлы в /bin:
dpkg -S /bin
Мы можем использовать awk для его обработки и получить имена пакетов и xargs и apt-get для загрузки пакетов (все в /usr/bin). Если у вас есть временный каталог, который вы можете использовать, cd там, потому что ваш текущий каталог будет немного запутанным:
dpkg -S /bin | awk -F '[, :]' '{NF--}1' | xargs apt-get download
Теперь самая большая проблема заключается в том, что /bin/tar отсутствует, и без него dpkg не может извлечь архивы. Мы можем получить две трети пути, потому что:
.deb файлы фактически являются ar архивами (снова в /usr/bin):ar x tar_*.deb
Состоит из двух архивов .tar.*, data и control: $ echo *.tar.*
control.tar.gz data.tar.xz
Хотя утилиты gzip находятся в /bin, unxz находится в /usr/bin: unxz data.tar.xz
Теперь у нас есть файл data.tar без tar ] извлечь tar из него.
Python на помощь! Здесь sudo действительно необходимо:
$ sudo python -c 'import tarfile; tarfile.open("data.tar").extractall("/")'
$ echo /bin/*
/bin/tar
Теперь мы можем использовать dpkg для извлечения оставшихся файлов deb для получения достаточно полного /bin:
for i in *.deb; do dpkg-deb -x "$i" /; done
Однако мы все равно должны правильно установить файлы deb, так что символические ссылки и т. д., которые будут созданы пакетами, будут воссозданы:
sudo apt install --reinstall ./*.deb
Или:
sudo dpkg -i *.deb
sudo apt-get install -f
Примечания:
.deb файлы на самом деле являются ar архивами (снова в /usr/bin):ar x tar_*.deb
После получения назад /bin/tar, вам все равно нужно извлечь некоторые из файлов deb, прежде чем вы сможете использовать apt-get: оболочки, coreutils и т. д. Легче просто извлечь все из них и переустановить позже. Вы можете временно помещать файлы с живого компакт-диска или другой системы в свой /bin, чтобы сделать вашу систему пригодной для использования, а затем заменить их на файлы из вашей установки Ubuntu, запустив apt-get install --reinstall для пакетов, которые имеют материал в /bin.
Некоторые дополнения к этому отличному ответу после того, как я столкнулся с этой проблемой (наряду с удалением /boot, /etc, /lib и /lib64):
chroot требует /lib и /lib64; в противном случае вы получите следующую ошибку: failed to run command ‘/bin/bash’: No such file or directory Я скопировал их из LiveCD OS и не испытывал никаких проблем при восстановлении. YMMV в зависимости от пакетов, которые вы установили в системе. Я не могу отредактировать ответ, упомянутый выше, но есть опечатка: cp /etc/resolv.conf /mnt/etc/resolv.cof должен быть cp /etc/resolv.conf /mnt/etc/resolv.conf /boot можно легко восстановить с помощью инструментов grub. Глянь сюда. Как рекомендует этот ответ, apt install --reinstall <package> - отличный способ восстановить недостающие файлы в /bin, /lib и /lib64. Некоторые пакеты, требующие переустановки: libaio1, mysql-server, openvpn, vsftpdПримечание для себя: rm -rf folder /* не совпадает с rm -rf folder/*
Если ваша текущая система по-прежнему имеет рабочую оболочку и доступ в Интернет, это можно сделать с помощью инструментов, существующих в других местах системы. Я предполагаю, что вы удалили только /bin. /bin, конечно, имеет самую удобную утилиту, которую вы могли бы использовать в такой ситуации (busybox), но без этого нам нужно будет немного сориентироваться.
Поскольку у вас уже есть работающая оболочка, а поскольку sudo находится в /usr/bin, давайте получим запущенную корневую оболочку, прежде чем наносить дополнительный урон. Но /bin/bash и большинство других снарядов ушли! К счастью, у Linux все еще есть копия оболочки, которую вы используете. Итак:
sudo /proc/$$/exe
Строго говоря, для большей части следующего мы не нуждаемся в корневой оболочке. Но в любом случае.
Теперь dpkg все еще работает, по крайней мере, для поиска, какие пакеты имеют файлы в /bin:
dpkg -S /bin
Мы можем использовать awk для его обработки и получить имена пакетов и xargs и apt-get для загрузки пакетов (все в /usr/bin). Если у вас есть временный каталог, который вы можете использовать, cd там, потому что ваш текущий каталог будет немного запутанным:
dpkg -S /bin | awk -F '[, :]' '{NF--}1' | xargs apt-get download
Теперь самая большая проблема заключается в том, что /bin/tar отсутствует, и без него dpkg не может извлечь архивы. Мы можем получить две трети пути, потому что:
.deb файлы фактически являются ar архивами (снова в /usr/bin):ar x tar_*.deb
Состоит из двух архивов .tar.*, data и control: $ echo *.tar.*
control.tar.gz data.tar.xz
Хотя утилиты gzip находятся в /bin, unxz находится в /usr/bin: unxz data.tar.xz
Теперь у нас есть файл data.tar без tar ] извлечь tar из него.
Python на помощь! Здесь sudo действительно необходимо:
$ sudo python -c 'import tarfile; tarfile.open("data.tar").extractall("/")'
$ echo /bin/*
/bin/tar
Теперь мы можем использовать dpkg для извлечения оставшихся файлов deb для получения достаточно полного /bin:
for i in *.deb; do dpkg-deb -x "$i" /; done
Однако мы все равно должны правильно установить файлы deb, так что символические ссылки и т. д., которые будут созданы пакетами, будут воссозданы:
sudo apt install --reinstall ./*.deb
Или:
sudo dpkg -i *.deb
sudo apt-get install -f
Примечания:
.deb файлы на самом деле являются ar архивами (снова в /usr/bin):ar x tar_*.deb
После получения назад /bin/tar, вам все равно нужно извлечь некоторые из файлов deb, прежде чем вы сможете использовать apt-get: оболочки, coreutils и т. д. Легче просто извлечь все из них и переустановить позже. Вы можете временно помещать файлы с живого компакт-диска или другой системы в свой /bin, чтобы сделать вашу систему пригодной для использования, а затем заменить их на файлы из вашей установки Ubuntu, запустив apt-get install --reinstall для пакетов, которые имеют материал в /bin.
Некоторые дополнения к этому отличному ответу после того, как я столкнулся с этой проблемой (наряду с удалением /boot, /etc, /lib и /lib64):
chroot требует /lib и /lib64; в противном случае вы получите следующую ошибку: failed to run command ‘/bin/bash’: No such file or directory Я скопировал их из LiveCD OS и не испытывал никаких проблем при восстановлении. YMMV в зависимости от пакетов, которые вы установили в системе. Я не могу отредактировать ответ, упомянутый выше, но есть опечатка: cp /etc/resolv.conf /mnt/etc/resolv.cof должен быть cp /etc/resolv.conf /mnt/etc/resolv.conf /boot можно легко восстановить с помощью инструментов grub. Глянь сюда. Как рекомендует этот ответ, apt install --reinstall <package> - отличный способ восстановить недостающие файлы в /bin, /lib и /lib64. Некоторые пакеты, требующие переустановки: libaio1, mysql-server, openvpn, vsftpdПримечание для себя: rm -rf folder /* не совпадает с rm -rf folder/*
Если ваша текущая система по-прежнему имеет рабочую оболочку и доступ в Интернет, это можно сделать с помощью инструментов, существующих в других местах системы. Я предполагаю, что вы удалили только /bin. /bin, конечно, имеет самую удобную утилиту, которую вы могли бы использовать в такой ситуации (busybox), но без этого нам нужно будет немного сориентироваться.
Поскольку у вас уже есть работающая оболочка, а поскольку sudo находится в /usr/bin, давайте получим запущенную корневую оболочку, прежде чем наносить дополнительный урон. Но /bin/bash и большинство других снарядов ушли! К счастью, у Linux все еще есть копия оболочки, которую вы используете. Итак:
sudo /proc/$$/exe
Строго говоря, для большей части следующего мы не нуждаемся в корневой оболочке. Но в любом случае.
Теперь dpkg все еще работает, по крайней мере, для поиска, какие пакеты имеют файлы в /bin:
dpkg -S /bin
Мы можем использовать awk для его обработки и получить имена пакетов и xargs и apt-get для загрузки пакетов (все в /usr/bin). Если у вас есть временный каталог, который вы можете использовать, cd там, потому что ваш текущий каталог будет немного запутанным:
dpkg -S /bin | awk -F '[, :]' '{NF--}1' | xargs apt-get download
Теперь самая большая проблема заключается в том, что /bin/tar отсутствует, и без него dpkg не может извлечь архивы. Мы можем получить две трети пути, потому что:
.deb файлы фактически являются ar архивами (снова в /usr/bin):ar x tar_*.deb
Состоит из двух архивов .tar.*, data и control: $ echo *.tar.*
control.tar.gz data.tar.xz
Хотя утилиты gzip находятся в /bin, unxz находится в /usr/bin: unxz data.tar.xz
Теперь у нас есть файл data.tar без tar ] извлечь tar из него.
Python на помощь! Здесь sudo действительно необходимо:
$ sudo python -c 'import tarfile; tarfile.open("data.tar").extractall("/")'
$ echo /bin/*
/bin/tar
Теперь мы можем использовать dpkg для извлечения оставшихся файлов deb для получения достаточно полного /bin:
for i in *.deb; do dpkg-deb -x "$i" /; done
Однако мы все равно должны правильно установить файлы deb, так что символические ссылки и т. д., которые будут созданы пакетами, будут воссозданы:
sudo apt install --reinstall ./*.deb
Или:
sudo dpkg -i *.deb
sudo apt-get install -f
Примечания:
.deb файлы на самом деле являются ar архивами (снова в /usr/bin):ar x tar_*.deb
После получения назад /bin/tar, вам все равно нужно извлечь некоторые из файлов deb, прежде чем вы сможете использовать apt-get: оболочки, coreutils и т. д. Легче просто извлечь все из них и переустановить позже. Вы можете временно помещать файлы с живого компакт-диска или другой системы в свой /bin, чтобы сделать вашу систему пригодной для использования, а затем заменить их на файлы из вашей установки Ubuntu, запустив apt-get install --reinstall для пакетов, которые имеют материал в /bin.
Некоторые дополнения к этому отличному ответу после того, как я столкнулся с этой проблемой (наряду с удалением /boot, /etc, /lib и /lib64):
chroot требует /lib и /lib64; в противном случае вы получите следующую ошибку: failed to run command ‘/bin/bash’: No such file or directory Я скопировал их из LiveCD OS и не испытывал никаких проблем при восстановлении. YMMV в зависимости от пакетов, которые вы установили в системе. Я не могу отредактировать ответ, упомянутый выше, но есть опечатка: cp /etc/resolv.conf /mnt/etc/resolv.cof должен быть cp /etc/resolv.conf /mnt/etc/resolv.conf /boot можно легко восстановить с помощью инструментов grub. Глянь сюда. Как рекомендует этот ответ, apt install --reinstall <package> - отличный способ восстановить недостающие файлы в /bin, /lib и /lib64. Некоторые пакеты, требующие переустановки: libaio1, mysql-server, openvpn, vsftpdПримечание для себя: rm -rf folder /* не совпадает с rm -rf folder/*
Если ваша текущая система по-прежнему имеет рабочую оболочку и доступ в Интернет, это можно сделать с помощью инструментов, существующих в других местах системы. Я предполагаю, что вы удалили только /bin. /bin, конечно, имеет самую удобную утилиту, которую вы могли бы использовать в такой ситуации (busybox), но без этого нам нужно будет немного сориентироваться.
Поскольку у вас уже есть работающая оболочка, а поскольку sudo находится в /usr/bin, давайте получим запущенную корневую оболочку, прежде чем наносить дополнительный урон. Но /bin/bash и большинство других снарядов ушли! К счастью, у Linux все еще есть копия оболочки, которую вы используете. Итак:
sudo /proc/$$/exe
Строго говоря, для большей части следующего мы не нуждаемся в корневой оболочке. Но в любом случае.
Теперь dpkg все еще работает, по крайней мере, для поиска, какие пакеты имеют файлы в /bin:
dpkg -S /bin
Мы можем использовать awk для его обработки и получить имена пакетов и xargs и apt-get для загрузки пакетов (все в /usr/bin). Если у вас есть временный каталог, который вы можете использовать, cd там, потому что ваш текущий каталог будет немного запутанным:
dpkg -S /bin | awk -F '[, :]' '{NF--}1' | xargs apt-get download
Теперь самая большая проблема заключается в том, что /bin/tar отсутствует, и без него dpkg не может извлечь архивы. Мы можем получить две трети пути, потому что:
.deb файлы фактически являются ar архивами (снова в /usr/bin):ar x tar_*.deb
Состоит из двух архивов .tar.*, data и control: $ echo *.tar.*
control.tar.gz data.tar.xz
Хотя утилиты gzip находятся в /bin, unxz находится в /usr/bin: unxz data.tar.xz
Теперь у нас есть файл data.tar без tar ] извлечь tar из него.
Python на помощь! Здесь sudo действительно необходимо:
$ sudo python -c 'import tarfile; tarfile.open("data.tar").extractall("/")'
$ echo /bin/*
/bin/tar
Теперь мы можем использовать dpkg для извлечения оставшихся файлов deb для получения достаточно полного /bin:
for i in *.deb; do dpkg-deb -x "$i" /; done
Однако мы все равно должны правильно установить файлы deb, так что символические ссылки и т. д., которые будут созданы пакетами, будут воссозданы:
sudo apt install --reinstall ./*.deb
Или:
sudo dpkg -i *.deb
sudo apt-get install -f
Примечания:
.deb файлы на самом деле являются ar архивами (снова в /usr/bin):ar x tar_*.deb
После получения назад /bin/tar, вам все равно нужно извлечь некоторые из файлов deb, прежде чем вы сможете использовать apt-get: оболочки, coreutils и т. д. Легче просто извлечь все из них и переустановить позже.