Juste pour le fun, je pensais utiliser cette commande sur mon Raspberry Pi sous Raspbian:
sudo rm -f /bin/rm
Je pensais pouvoir réinstaller simplement coreutils
: j'avais tort!
apt-get install --reinstall coreutils
donne une erreur de dpkg
, en disant qu'il ne pouvait pas supprimer le paquet. Compiler à partir des sources ne fonctionne pas car les Makefile
utilisations rm
.
Comment puis-je obtenir un rm
retour en arrière?
command-line
rm
dpkg
utilisateur60684
la source
la source
ln -s /usr/lib/initramfs-tools/bin/busybox /bin/rm
(ou/bin/busybox
, ou l'extraire d'un initrd)Réponses:
Et plus jamais.
Parce que la
download
commande n'en a pas besoin:Donc, à moins que vous ne soyez dans un répertoire que vous ne pouvez pas écrire, vous n'avez pas besoin de l'utiliser
sudo
, et cela pourrait poser problème plus tard, car vous aurez besoin d'root
autorisations pour supprimer / déplacer le paquet.la source
/bin/sh
. Il aurait été plus simple de faire unsudo ln -s true /bin/rm
ou même mieuxsudo ln -s busybox /bin/rm
d'avoir un travailrm
.apt-get
Vous n'avez pas besoin de sudo si vous n'avez pas téléchargé coreutils, sinon, il ne pourra pas écrire dans/var
lequel Debian enregistre les fichiers téléchargés.apt-get
télécharge le package dans le répertoire courant toujours (oui, même si vous avez utilisésudo
), sauf si vous êtes dans un répertoire que vous ne pouvez pas écrire tant qu'utilisateur vous n'avez pas besoinsudo
. Veuillez vérifier les pages de manuel.debian
et ses dérivés (et probablement la plupart des autres distributions) viennent avecbusybox
ce qui est utilisé dans leinitramfs
.busybox
regroupe la plupart des utilitaires de ligne de commande essentiels dans un seul exécutable.Vous pouvez temporairement créer un lien symbolique
/bin/rm
vers/bin/busybox
:Pour obtenir un travail
rm
(après quoi vous pouvez faire votreapt-get install --reinstall coreutils
).Cette même méthode peut être utilisée pour tous les autres utilitaires
busybox
inclus. Cette liste varie d'un déploiement à l'autre. Vous pouvez obtenir la liste avecbusybox --list
.Notez cependant qu'il s'agit de versions limitées des utilitaires correspondants. Ils supportent parfois les extensions GNU, mais généralement pas et certains d’entre eux ne supporteront même pas toutes les fonctionnalités standard / POSIX (certaines fonctionnalités peuvent être activées / désactivées lors de la compilation).
Alternativement, vous pouvez utiliser
zsh
la fonction intégrée:Le
zsh/files
module fournit avec quelques commandes internes supplémentaires (rm
,mv
,ln
,mkdir
,rmdir
,chown
,chmod
,sync
). C'est utile dans ce genre de situation ou lorsque vous ne pouvez pas créer plus de processus mais que vous avez unzsh
fonctionnement interactif .ksh93
a aussi un certain nombre de commandes supplémentaires / option buitin, mais pasrm
parmi eux (basename
,chmod
,dirname
,getconf
,head
,mkdir
,logname
,cat
,cmp
,cut
,uname
,wc
,sync
). Vous pouvez les invoquer avec:dans un
ksh93
script.la source
rm
. ;-)Dans le cas
apt-get
ou lesdpkg
besoinsrm
et sansrm
réinstallation n'est pas posssible, vous pouvez émulerrm
avecperl
:la source
-r
et que le fait de ne pas renvoyer un état de sortie correct peut poser problème.apt-get install --reinstall coreutils
à l'OP de revenir à la normale.rm
avecmv
(à 'poubelle')Je voudrais essayer d'obtenir le bon
rm
binaire à partir d'une autre machine, puis en utilisantscp
ou quelque chose pour le copier sur le Pi. Cela ne fonctionne bien sûr que siscp
est déjà installé ...Si
scp
n'est pas disponible, alorsnc
(alias netcat) du côté de l'envoi et bash avec une/dev/tcp/HOST/PORT
redirection du côté de la réception pourraient également fonctionner.Si vous n'avez pas d'autre machine Raspbian, vous pouvez récupérer le paquet coreutils (obtenir la
.deb
version correcte) et le décompresser avecdpkg-deb
(sur Debian / Ubuntu / Mint /…, même si ce n'est pas sur un Pi):Si vous n'avez pas d'autre machine avec dpkg, vous pouvez extraire le fichier avec
ar
(depuis les outils de développement de binutils) et tar:la source
scp
n'est pas disponible, alorsnc
(akanetcat
) du côté de l'envoi etbash
avec une/dev/tcp/HOST/PORT
redirection du côté de la réception pourrait également fonctionner.Comme il s'agit de Debian (ou Ubuntu), il existe un moyen simple de récupérer les fichiers:
Cela fonctionne parce qu'apt-get a téléchargé coreutils.deb avant d'essayer de l'installer et que dpkg-deb a la garantie d'exister sur un système basé sur Debian.
Ne pas extraire directement dans / tmp, cela modifie les autorisations sur le répertoire parent.
Si vous voulez jouer, vous voudrez peut-être installer le paquet busybox-static, qui fonctionnera même si vous cassez tout le reste.
la source