En este breve tutorial, aprenderemos cómo restaurar o recuperar comandos eliminados en Linux usando coreutils
y busybox
.
Usualmente usamos rm
comando para eliminar cosas en Linux, ¿verdad? Sí. ¿Qué pasa si usamos rm
? a rm
rm
? En otras palabras, ¿qué pasa si eliminamos /bin/rm
? archivo usando rm
¿dominio? Siempre me pregunté qué pasaría si realmente hiciera esto en una máquina Linux. Así que encendí rápidamente una VM de Ubuntu y eliminé el /bin/rm
archivo ejecutando el siguiente comando:
$ sudo rm /bin/rm
Pensé que podría recuperar fácilmente el rm
eliminado comando reinstalando Gnu coreutils
paquete, porque rm
el comando es parte de coreutils
paquete, ¿no?
Entonces traté de reinstalar coreutils
paquete usando apt
administrador de paquetes como a continuación:
$ sudo apt install --reinstall coreutils
¡Oh hombre, estaba equivocado! El apt
el administrador de paquetes requiere rm
, por lo que no puede reinstalar coreutils
paquete.
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)
También traté de compilarlo desde la fuente, pero tampoco funciona, porque el Makefile
usa rm
. Hasta ahora, no sabía que la reinstalación no es posible sin rm
comando.
Pensé que restaurar los comandos eliminados es trivial. Sin embargo, en este caso particular no pude restaurar el rm
dominio. Finalmente encontré la solución después de un par de búsquedas en la web. Si alguna vez eliminó accidentalmente rm
comando (espero que no lo haga), puede usar cualquiera de los siguientes métodos para recuperarlo. No solo rm
comando, puede usar este procedimiento para recuperar casi todos los comandos principales eliminados proporcionados por coreutils
paquete.
Descargo de responsabilidad:
NO DEBE HACER ESTO EN UN SISTEMA DE PRODUCCIÓN . ¡Es estrictamente solo para fines educativos!.
Recuperar comandos eliminados en Linux usando coreutils
Para aquellos que no saben, el Gnu coreutils
El paquete proporciona comandos básicos esenciales como cat
, ls
, rm
, mkdir
, rmdir
, touch
, y muchos más. Viene preinstalado con la mayoría de las distribuciones GNU/Linux.
Para recuperar el rm
eliminado comando, primero cree un archivo binario vacío con el nombre "rm"
en /bin/
ubicación:
$ sudo touch /bin/rm
Hazlo ejecutable:
$ sudo chmod +x /bin/rm
Descarga las coreutils
paquete usando el comando:
$ apt download coreutils
Tenga en cuenta que no podemos reinstalar coreutils
pero descargalo. Además, no necesitamos usar sudo
privilegios para descargar un paquete.
Descomprima el paquete descargado con el siguiente dpkg
comando:
$ sudo dpkg --unpack coreutils_8.30-3ubuntu2_amd64.deb
El comando anterior simplemente desempaqueta el coreutils
paquete, pero no lo configurará.
¡Hecho! Ahora, puede comenzar a usar el rm
dominio. Para verificar si la funcionalidad del rm
se restaura el comando, simplemente elimine cualquier archivo no deseado. Por ejemplo, eliminé coreutils
paquete que descargué anteriormente:
$ rm coreutils_8.30-3ubuntu2_amd64.deb
¡Estupendo! ¡Funciona!
¡¡Y, por favor, nunca hagas esto en un sistema de producción!!
Restaurar comandos eliminados usando busybox en Linux
BusyBox es un paquete de software que proporciona muchas utilidades comunes de UNIX en un solo ejecutable pequeño. Proporciona reemplazos para la mayoría de las utilidades que normalmente encuentra en GNU fileutils, shellutils, etc. Está disponible de forma predeterminada en Debian y sus derivados como Ubuntu y muchas otras distribuciones de Linux.
Puede ver la lista de las principales utilidades de línea de comandos proporcionadas por busybox
usando el comando:
$ busybox --list
Salida de muestra:
[ [[ acpid adjtimex ar arch arp arping ash awk basename bc blkdiscard blockdev brctl bunzip2 busybox bzcat bzip2 cal cat [..]
En mi escritorio Ubuntu 20.04 LTS, busybox proporciona alrededor de 263 utilidades de línea de comandos.
Ahora vamos a restaurar el rm
eliminado comando creando temporalmente un enlace simbólico lo. Ejecute el siguiente comando para enlazar temporalmente /bin/rm
a /bin/busybox
:
$ ln -s busybox /bin/rm
Luego reinstale coreutils
paquete usando el comando:
$ sudo apt install --reinstall coreutils
Eso es todo. El comando anterior restaurará el rm
comando.
Como se indicó anteriormente, este procedimiento no es solo para recuperar rm
dominio. Supongo que podemos recuperar casi todos los comandos de Linux usando estos métodos. Compruébelo usted mismo en una VM y vea si funciona. De nuevo, no hagas esto en un sistema de producción . ¡Has sido advertido!
Lea también:
- Restaurar permiso ejecutable al comando Chmod en Linux
- Moreutils:una colección de utilidades Unix más útiles