Поиск по сайту:

Восстановить или восстановить удаленные команды в 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

Статьи по данной тематике