Восстановить или восстановить удаленные команды в Linux
В этом кратком руководстве мы узнаем, как восстановить удаленные команды в 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)
dpkg: предупреждение: «rm» не найден в PATH или не исполняется
Я также пытался скомпилировать его из исходников, но это тоже не сработало, поскольку Makefile
использует rm
. До сих пор я не знал, что переустановка невозможна без команды rm
.
Я думал, что восстановить удаленные команды — это тривиально. Однако в данном конкретном случае мне не удалось восстановить команду rm
. В конце концов я нашел решение после пары поисков в Интернете. Если вы когда-либо случайно удалили команду rm
(надеюсь, вы этого не сделаете), вы можете использовать любой из следующих методов, чтобы восстановить ее. Не только команду rm
, вы можете использовать эту процедуру для восстановления почти всех удаленных основных команд, предоставляемых пакетом coreutils
.
Отказ от ответственности:
Вы НЕ ДОЛЖНЫ ДЕЛАТЬ ЭТО В ПРОИЗВОДСТВЕННОЙ СИСТЕМЕ. Это строго только для образовательных целей!.
Восстановите удаленные команды в Linux с помощью coreutils
Для тех, кто не знает: пакет Gnu coreutils
предоставляет основные основные команды, такие как cat
, ls
, rm
, mkdir
, rmdir
, touch
и многие другие. Он предустановлен в большинстве дистрибутивов GNU/Linux.
Чтобы восстановить удаленную команду rm
, сначала создайте пустой двоичный файл с именем "rm"
в /bin/
расположение:
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
, но не настраивает его.
Восстановите удаленные команды в Linux с помощью пакета coreutils
Сделанный! Теперь вы можете начать использовать команду rm
. Чтобы проверить, восстановлена ли функциональность команды rm
, просто удалите ненужный файл. Например, я удалил пакет coreutils
, который скачал ранее:
rm coreutils_8.30-3ubuntu2_amd64.deb
Удалить файлы с помощью команды rm в Linux
Большой! Оно работает!
И, пожалуйста, никогда не делайте этого в производственной системе!!
Восстановить удаленные команды с помощью 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
[..]
Список утилит командной строки busybox
На моем рабочем столе 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. Проверьте это сами на виртуальной машине и убедитесь, что это работает! Опять же, не делайте этого в производственной системе. Вы были предупреждены!
Связанное чтение:
- Восстановить разрешение на исполняемый файл для команды Chmod в Linux
- Moreutils – коллекция более полезных утилит для Unix