В этом кратком руководстве мы узнаем, как восстановить удаленные команды Linux с помощью coreutils и busybox.
Обычно мы используем команду rm для удаления файлов в Linux, верно?
Что, если мы используем rm для rm rm?
Другими словами, что, если мы удалим файл /bin/rm с помощью команды rm?
Мне всегда было интересно, что произойдет, если я действительно сделаю это на машине с Linux.
Поэтому я быстро развернул виртуальную машину Ubuntu и удалил файл /bin/rm, выполнив следующую команду:
$ sudo rm /bin/rm
Я думал, что смогу легко восстановить удаленную команду rm, переустановив пакет Gnu coreutils, потому что команда rm является частью пакета coreutils, не так ли?
Поэтому я попытался переустановить пакет coreutils с помощью диспетчера пакетов apt, как показано ниже:
$ sudo apt install --reinstall coreutils
Для диспетчера пакетов apt требуется rm, поэтому он не может переустановить пакет coreutils.
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
Need to get 1249 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://in.archive.ubuntu.com/ubuntu focal/main amd64 coreutils amd64 8.30-3ubuntu2 [1249 kB]
Fetched 1249 kB in 2s (747 kB/s)
dpkg: warning: 'rm' not found in PATH or not executable
dpkg: error: 1 expected program not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin
E: Sub-process /usr/bin/dpkg returned an error code (2)
Я также пытался скомпилировать его из исходников, но это тоже не сработало, потому что Makefile использует rm.
Я думал, что можно восстановить удаленные команды тривиально.
Однако в этом конкретном случае мне не удалось восстановить команду rm.
В конце концов я нашел решение после поиска Интернете.
Если вы когда-либо случайно удаляли команду rm (надеюсь, вы этого не сделаете), вы можете использовать любой из следующих методов для ее восстановления.
Речь не только про команду rm, вы можете использовать эту процедуру для восстановления почти всех удаленных основных команд, предоставленных пакетом coreutils.
Вы НЕ ДОЛЖНЫ ДЕЛАТЬ ЭТО В ПРОИЗВОДСТВЕННОЙ СИСТЕМЕ. Это только для образовательных целей !.
Восстановим удаленные команды в Linux с помощью coreutils
Для тех, кто не знает, пакет Gnu coreutils предоставляет основные команды ядра, такие как cat, ls, rm, mkdir, rmdir, touch и многие другие.
Он предустановлен в большинстве дистрибутивов GNU/Linux.
Чтобы восстановить удаленную команду rm, сначала создайте пустой двоичный файл с именем «rm» в /bin/location:
$ sudo touch /bin/rm
Сделайте его исполняемым:
$ sudo chmod +x /bin/rm
Загрузите пакет coreutils с помощью команды:
$ apt download coreutils
Обратите внимание, что мы не можем переустановить coreutils, но можем загрузить его.
Кроме того, нам не нужно использовать привилегии sudo для загрузки пакета.
Распакуйте загруженный пакет с помощью следующей команды dpkg:
$ sudo dpkg --unpack coreutils_8.30-3ubuntu2_amd64.deb
Приведенная выше команда просто распаковывает пакет coreutils, но не настраивает его.
Теперь вы можете начать использовать команду rm.
Чтобы проверить, восстановлена ли функциональность команды rm, просто удалите все ненужные файлы.
Например, я удалил загруженный ранее пакет coreutils:
$ rm coreutils_8.30-3ubuntu2_amd64.deb
Восстановим удаленные команды с помощью busybox в Linux
BusyBox – это программный пакет, который объединяет множество стандартных утилит UNIX в один небольшой исполняемый файл.
Он обеспечивает замену большинства утилит, которые вы обычно найдете в GNU fileutils, shellutils и т.д.
Он доступен по умолчанию в Debian и его производных, таких как Ubuntu и многих других дистрибутивах Linux.
Вы можете просмотреть список основных утилит командной строки, предоставляемых busybox, используя команду:
$ busybox --list
Вывод:
[
[[
acpid
adjtimex
ar
arch
arp
arping
ash
awk
basename
bc
blkdiscard
blockdev
brctl
bunzip2
busybox
bzcat
bzip2
cal
cat
[..]
На моей Ubuntu 20.04 LTS busybox предоставляет около 263 утилит командной строки.
Теперь давайте восстановим удаленную команду rm, временно создав на нее символическую ссылку.
Выполните следующую команду, чтобы временно создать символическую ссылку /bin/rm на /bin/busybox:
$ ln -s busybox /bin/rm
Затем переустановите пакет coreutils с помощью команды:
$ sudo apt install --reinstall coreutils
Вот и все. Приведенная выше команда восстановит команду rm.
Заключение
Как было сказано ранее, эта процедура предназначена не только для восстановления команды rm.
Думаю, с помощью этих методов мы можем восстановить почти все команды Linux.
Проверьте сами на виртуальной машине и убедитесь, что она работает!
Опять же, не делайте этого в производственной системе. Вы были предупреждены!