Просто ради интереса, я подумал, что буду использовать эту команду на Raspberry Pi с Raspbian:
sudo rm -f /bin/rm
Я думал, что могу просто переустановить coreutils
: я был неправ!
apt-get install --reinstall coreutils
выдает ошибку dpkg
, говоря, что не может удалить пакет. Компиляция из исходного кода не работает, потому что Makefile
использует rm
.
Как я могу получить работу rm
обратно?
command-line
rm
dpkg
user60684
источник
источник
ln -s /usr/lib/initramfs-tools/bin/busybox /bin/rm
(или/bin/busybox
или извлеките его из initrd)Ответы:
И никогда больше.
Потому что
download
команда не требует этого:Поэтому, если вы не находитесь в каком-либо каталоге, который вы не можете написать, вам не нужно его использовать
sudo
, и это может стать проблемой позже, так как вам потребуютсяroot
разрешения для удаления / перемещения пакета.источник
/bin/sh
. Было бы проще сделатьsudo ln -s true /bin/rm
или даже лучшеsudo ln -s busybox /bin/rm
иметь работуrm
.apt-get
нужен sudo, если вы не загрузили coreutils, потому что в противном случае он не сможет записать туда,/var
где Debian сохраняет загруженные файлы.apt-get
загружает пакет в текущий каталог (да, даже если вы его использовали ), поэтому, если вы не находитесь в каталоге, вы не можете писать от имени пользователя, который вам не нужен . Пожалуйста, проверьте справочные страницы.sudo
sudo
debian
и его производные (и, вероятно, большинство других распределений) идут с,busybox
который используется вinitramfs
.busybox
объединяет большинство основных утилит командной строки в один исполняемый файл.Вы можете временно использовать символическую ссылку
/bin/rm
на/bin/busybox
:Чтобы получить работу
rm
(после чего вы можете сделать своеapt-get install --reinstall coreutils
).Тот же самый метод может использоваться для всех других утилит, которые
busybox
включают. Этот список варьируется от одного развертывания к другому. Вы можете получить список сbusybox --list
.Однако обратите внимание, что они являются ограниченными версиями соответствующих утилит. Иногда они поддерживают расширения GNU, но, как правило, нет, и некоторые из них даже не поддерживают все стандартные функции / POSIX (некоторые функции могут быть включены / отключены во время компиляции).
В качестве альтернативы вы можете использовать
zsh
встроенный rm:zsh/files
Модуль обеспечивает несколько дополнительных встроенных команд (rm
,mv
,ln
,mkdir
,rmdir
,chown
,chmod
,sync
). Это полезно в такой ситуации или когда вы не можете разветвлять больше процессов, но у них есть интерактивныйzsh
запуск.ksh93
также имеет ряд дополнительных / факультативная команд buitin, но неrm
среди них (basename
,chmod
,dirname
,getconf
,head
,mkdir
,logname
,cat
,cmp
,cut
,uname
,wc
,sync
). Вы можете вызвать их с помощью:в
ksh93
сценарии.источник
rm
. ;-)В случае необходимости
apt-get
или без переустановки, вы можете эмулировать с помощью :dpkg
rm
rm
rm
perl
источник
-r
, и тот факт, что он не возвращает правильное состояние выхода, может вызвать проблемы.apt-get install --reinstall coreutils
и вернуть OP в нормальное состояние.rm
сmv
(«мусорное ведро»)Я попытался бы получить правильный
rm
двоичный файл с другой машины, а затем использоватьscp
или что-то, чтобы скопировать его в Pi. Это, конечно, работает только еслиscp
уже установлено ...Если
scp
недоступно, тоnc
(aka netcat) на отправляющей стороне и bash с/dev/tcp/HOST/PORT
перенаправлением на принимающей стороне также могут работать.Если у вас нет другого компьютера с Raspbian, вы можете получить пакет coreutils (получить
.deb
нужную версию) и распаковать его с помощьюdpkg-deb
(в Debian / Ubuntu / Mint /…, даже если он не на Pi):Если у вас нет другой машины с dpkg, вы можете извлечь файл с помощью
ar
(из инструментов разработки binutils) и tar:источник
scp
нет, тоnc
(akanetcat
) на стороне отправителя иbash
с/dev/tcp/HOST/PORT
перенаправлением на стороне получателя может также работать.Так как это Debian (или Ubuntu), есть простой способ получить файлы:
Это работает, потому что apt-get скачал файл coreutils.deb перед тем, как пытаться установить его, и dpkg-deb гарантированно существует в системе на основе debian.
Не распаковывайте напрямую в / tmp, это меняет права на родительский каталог.
Если вы собираетесь поиграть, вы можете установить пакет busybox-static, который работает, даже если вы сломаете все остальное.
источник