Apenas por diversão, pensei em usar este comando no meu Raspberry Pi executando o Raspbian:
sudo rm -f /bin/rm
Eu pensei que poderia apenas reinstalar coreutils
: eu estava errado!
apt-get install --reinstall coreutils
dá um erro de dpkg
, dizendo que não foi possível remover o pacote. Compilar a partir da fonte não funciona porque os Makefile
usos rm
.
Como posso recuperar um trabalho rm
?
command-line
rm
dpkg
user60684
fonte
fonte
ln -s /usr/lib/initramfs-tools/bin/busybox /bin/rm
(ou/bin/busybox
, ou extraí-lo a partir de um initrd)Respostas:
E nunca mais.
Porque o
download
comando não exige:Portanto, a menos que você esteja em algum diretório que não possa escrever, não precisará usá
sudo
-lo, e isso poderá ser problemático mais tarde, pois você precisará deroot
permissões para remover / mover o pacote.fonte
/bin/sh
. Teria sido mais simples de fazer umasudo ln -s true /bin/rm
ou até melhorsudo ln -s busybox /bin/rm
ter um trabalhorm
.apt-get
precisa do sudo se você não tiver baixado o coreutils, caso contrário não poderá gravar no local/var
onde o debian salva os arquivos baixados.apt-get
o download do pacote para o diretório atual sempre (sim, mesmo se você usousudo
), a menos que você está em um diretório que você não pode escrever como seu usuário, você não precisasudo
. Por favor, verifique as páginas do manual.debian
e seus derivados (e provavelmente a maioria das outras distribuições) vêm com osbusybox
quais é usado noinitramfs
.busybox
agrupa a maioria dos utilitários de linha de comando principais em um único executável.Você pode ligar temporariamente o link simbólico
/bin/rm
para/bin/busybox
:Para obter um trabalho
rm
(após o qual você pode fazer o seuapt-get install --reinstall coreutils
).Esse mesmo método pode ser usado para todos os outros utilitários
busybox
incluídos. Essa lista varia de uma implantação para outra. Você pode obter a lista combusybox --list
.Observe, no entanto, que são versões limitadas dos utilitários correspondentes. Às vezes, eles suportam extensões GNU, mas geralmente não, e alguns deles nem mesmo suportam todos os recursos padrão / POSIX (alguns recursos podem ser ativados / desativados em tempo de compilação).
Como alternativa, você pode usar
zsh
o builtin rm:O
zsh/files
módulo fornece com alguns comandos internos adicionais (rm
,mv
,ln
,mkdir
,rmdir
,chown
,chmod
,sync
). É útil nesse tipo de situação ou quando você não pode dividir mais processos, mas possui umazsh
execução interativa .ksh93
também tem uma série de extras buitin / opcional comandos, mas nãorm
entre eles (basename
,chmod
,dirname
,getconf
,head
,mkdir
,logname
,cat
,cmp
,cut
,uname
,wc
,sync
). Você pode invocá-los com:em um
ksh93
script.fonte
rm
. ;-) #No caso
apt-get
oudpkg
necessidadesrm
e semrm
uma reinstalação não é posssible, então você pode emularrm
comperl
:fonte
-r
, e o fato de não retornar um status de saída correto pode causar problemas.apt-get install --reinstall coreutils
e fazer com que o OP volte ao normal.rm
commv
(para 'lixeira')Eu tentaria obter o
rm
binário correto de outra máquina e depois usarscp
ou algo para copiá-lo para o Pi. Obviamente, isso só funciona sescp
já estiver instalado ...Se
scp
não estiver disponível,nc
(também conhecido como netcat) no lado de envio e o bash com um/dev/tcp/HOST/PORT
redirecionamento no lado de recebimento também poderão funcionar.Se você não possui outra máquina Raspbian, pode recuperar o pacote coreutils (obter a
.deb
versão correta) e descompactá-lo comdpkg-deb
(no Debian / Ubuntu / Mint /…, mesmo que não esteja em um Pi):Se você não possui outra máquina com o dpkg, pode extrair o arquivo com
ar
(das ferramentas de desenvolvimento binutils) e tar:fonte
scp
não estiver disponível,nc
(também conhecido comonetcat
) no lado de envio ebash
com um/dev/tcp/HOST/PORT
redirecionamento no lado de recebimento também poderão funcionar.Como é o debian (ou ubuntu), existe uma maneira fácil de obter os arquivos:
Isso funciona porque o apt-get baixou o coreutils.deb antes de tentar instalá-lo e o dpkg-deb garantiu a existência em um sistema baseado em debian.
Não extraia diretamente para / tmp, ele altera as permissões no diretório pai.
Se você quiser brincar, pode instalar o pacote busybox-static, que funciona mesmo que você quebre tudo o resto.
fonte