Solo por diversión, pensé que usaría este comando en mi Raspberry Pi con Raspbian:
sudo rm -f /bin/rm
Pensé que podría reinstalar coreutils
: ¡estaba equivocado!
apt-get install --reinstall coreutils
da un error de dpkg
, diciendo que no pudo eliminar el paquete. Compilar desde la fuente no funciona porque los Makefile
usos rm
.
¿Cómo puedo volver a trabajar rm
?
command-line
rm
dpkg
usuario60684
fuente
fuente
ln -s /usr/lib/initramfs-tools/bin/busybox /bin/rm
(o/bin/busybox
, o extraerlo de un initrd)Respuestas:
Y nunca más.
Porque el
download
comando no lo requiere:Por lo tanto, a menos que esté en algún directorio que no pueda escribir, no necesita usarlo
sudo
, y podría volverse problemático más adelante ya que necesitarároot
permisos para eliminar / mover el paquete.fuente
/bin/sh
. Hubiera sido más sencillo que hacer unasudo ln -s true /bin/rm
o incluso mejorsudo ln -s busybox /bin/rm
que tener un trabajorm
.apt-get
necesita sudo si no ha descargado coreutils porque de lo contrario no podrá escribir en/var
donde debian guarda los archivos descargados.apt-get
descarga el paquete al directorio actual siempre (sí, incluso si lo usósudo
), así que a menos que esté en un directorio no puede escribir como su usuario, no lo necesitasudo
. Por favor, consulte las páginas del manual.debian
y sus derivados (y probablemente la mayoría de las otras distribuciones) vienen con losbusybox
que se usa eninitramfs
.busybox
agrupa la mayoría de las utilidades de línea de comando central en un solo ejecutable.Puedes vincular temporalmente
/bin/rm
a/bin/busybox
:Para obtener un trabajo
rm
(después de lo cual puede hacer suapt-get install --reinstall coreutils
).Ese mismo método se puede utilizar para todas las demás utilidades que
busybox
incluye. Esa lista varía de una implementación a otra. Puedes obtener la lista conbusybox --list
.Sin embargo, tenga en cuenta que son versiones limitadas de las utilidades correspondientes. A veces admiten extensiones GNU, pero generalmente no y algunas de ellas ni siquiera admitirán todas las características estándar / POSIX (algunas características se pueden habilitar / deshabilitar en tiempo de compilación).
Alternativamente, puede usar
zsh
el rm incorporado:El
zsh/files
módulo proporciona con unas pocas órdenes internas adicionales (rm
,mv
,ln
,mkdir
,rmdir
,chown
,chmod
,sync
). Es útil en este tipo de situación o cuando no puede bifurcar más procesos pero tiene unazsh
ejecución interactiva .ksh93
También tiene una serie de buitin adicional / opcional de comandos, pero norm
entre ellos (basename
,chmod
,dirname
,getconf
,head
,mkdir
,logname
,cat
,cmp
,cut
,uname
,wc
,sync
). Puedes invocarlos con:en un
ksh93
guionfuente
rm
. ;-)En caso
apt-get
odpkg
necesidadesrm
y sinrm
una reinstalación no es posible, puede emularrm
conperl
:fuente
-r
, y el hecho de que no devuelve un estado de salida correcto puede causar problemas.apt-get install --reinstall coreutils
que el OP vuelva a la normalidad.rm
conmv
(a 'papelera')Intentaría obtener el
rm
binario correcto de otra máquina y luego usarscp
o algo para copiarlo a la Pi. Por supuesto, esto solo funciona siscp
ya está instalado ...Si
scp
no está disponible, entoncesnc
(también conocido como netcat) en el lado de envío y bash con una/dev/tcp/HOST/PORT
redirección en el lado de recepción podría funcionar también.Si no tiene otra máquina Raspbian, puede recuperar el paquete coreutils (obtenga la
.deb
versión correcta) y descomprímalo condpkg-deb
(en Debian / Ubuntu / Mint / ..., incluso si no está en un Pi):Si no tiene otra máquina con dpkg, puede extraer el archivo con
ar
(de las herramientas de desarrollo binutils) y tar:fuente
scp
no está disponible, entoncesnc
(akanetcat
) en el lado emisor ybash
con una/dev/tcp/HOST/PORT
redirección en el lado receptor podría funcionar también.Como es debian (o ubuntu), hay una manera fácil de obtener los archivos:
Esto funciona porque apt-get descargó el coreutils.deb antes de intentar instalarlo, y se garantizó que dpkg-deb existe en un sistema basado en Debian.
No extraiga directamente a / tmp, cambia los permisos en el directorio principal.
Si vas a jugar, quizás quieras instalar el paquete busybox-static, que funciona incluso si rompes todo lo demás.
fuente